我很好奇哪些(如果有的话)现实世界的编程语言有一个规则语法(即所有语法正确的程序的集合是规则的)。
请参见这个问题:哪些编程语言是上下文无关的?
脑残和空白以及类似的东西当然是有规律的。
另一方面,任何支持(parent)的语言都不是正则的,因为自动识别它需要一个堆栈。而且我真的不知道有多少语言没有(){}[]支持,除了汇编之外还能做别的事情。我能想到的唯一一个真实的例子可能是Forth。
答案是肯定的。当然也有具有规则语法的编程语言!
A=B编程语言是一种规则的单指令编程语言。
https://esolangs.org/wiki/A%3DB下面是匹配任何此类语言的正则表达式:
(((once))?([^=()]+|(start)[^=()]+|(end)[^=()]+)=([^=()]*|(start)[^=()]*|(end)[^=()]*|(return)[^=()]*))*
事实上,用正则语言描述图灵机是可能的。设图灵机的状态为a
、aa
、aaa
等,其中a
为初始状态。我们可以这样描述图灵机,假设磁带上只包含0
、1
和2
,其中0
为空白符号:
([012]a+=[012][lr]a+)*