我很好奇哪些(如果有的话)现实中的编程语言具有正则文法(即所有语法正确的程序集合是正则的)。
另请参见这个问题:哪些编程语言是上下文无关文法?。
我很好奇哪些(如果有的话)现实中的编程语言具有正则文法(即所有语法正确的程序集合是正则的)。
另请参见这个问题:哪些编程语言是上下文无关文法?。
Brainfuck和Whitespace等类似语言是确定性的。
另一方面,任何支持(括号)的语言都不是确定性的,因为识别它的自动机需要一个堆栈。而且我并不知道有多少不支持(){}[]的语言可以做更多的事情,除了汇编语言。
唯一能想到的现实例子并且可能是确定性的是Forth。
[
表示循环的开始,]
表示循环的结束。由于这些符号必须匹配,所以 Brainfuck 不是正则语言。 - Pallewhile{}
语句或者推入 [
和弹出+jmp/ret ]
指令。从技术上讲,括号计数没有必要匹配。 - KeksArmeehttps://esolangs.org/wiki/A%3DB
这是一个匹配任何这种语言的正则表达式。((\(once\))?([^=()]+|\(start\)[^=()]+|\(end\)[^=()]+)=([^=()]*|\(start\)[^=()]*|\(end\)[^=()]*|\(return\)[^=()]*))*
a
、aa
、aaa
等等,其中a
是初始状态。我们可以如下描述一个图灵机,假设纸带上只包含0
、1
和2
,其中0
是空白符号:([012]a+=[012][lr]a+)*