编译理论——哪些编程语言有规则语法



我很好奇哪些(如果有的话)现实世界的编程语言有一个规则语法(即所有语法正确的程序的集合是规则的)。

请参见这个问题:哪些编程语言是上下文无关的?

脑残和空白以及类似的东西当然是有规律的。

另一方面,任何支持(parent)的语言都不是正则的,因为自动识别它需要一个堆栈。而且我真的不知道有多少语言没有(){}[]支持,除了汇编之外还能做别的事情。

我能想到的唯一一个真实的例子可能是Forth。

答案是肯定的。当然也有具有规则语法的编程语言!

A=B编程语言是一种规则的单指令编程语言。

https://esolangs.org/wiki/A%3DB

下面是匹配任何此类语言的正则表达式:

(((once))?([^=()]+|(start)[^=()]+|(end)[^=()]+)=([^=()]*|(start)[^=()]*|(end)[^=()]*|(return)[^=()]*))*

事实上,用正则语言描述图灵机是可能的。设图灵机的状态为aaaaaa等,其中a为初始状态。我们可以这样描述图灵机,假设磁带上只包含012,其中0为空白符号:

([012]a+=[012][lr]a+)*

最新更新