上下文无关文法和解析 表达语法的根本区别是,PEG的 选择运营商是有序的。如果 第一个替代方案成功,则第二个替代方案将被忽略。因此,订购 的选择是不可交换的,不像 无序的选择,因为在上下文无关 语法和正则表达式。 有序选择类似于软件 削减运算符在一些逻辑 可用编程语言。
为什么PEG的选择运算符将匹配短路?是否因为最大限度地减少内存使用(由于记忆)?
我不确定在正则表达式中选择运算符是什么,但我们假设它是这样的:/[aeiou]/
以匹配元音。所以这个正则表达式是可交换的,因为我可以把它写在5中的任何一个! (五个阶乘)元音字符的排列?即/[aeiou]/
的行为与/[eiaou]/
相同。它可交换的优点是什么? (C.F. PEG的不可交换)
的后果是,如果一个CFG是 直接音译的PEG,在前任何 歧义由 确定性挑选一个解析从可能的解析 树解决。通过仔细选择 指定的文法备选 的顺序,程序员对选择哪个解析树 有很大的控制权。
这是说PEG的语法优于CFG吗?
“Superior”?你对“上级”的标准是什么? – Gabe 2011-03-31 14:02:03
对于交换性,想想'(飞机)'试图匹配飞机。 – xanatos 2011-03-31 14:47:35
看起来你很迷惑选择运算符和角色类的概念。在正则表达式中,字符类用方括号'[aeiou]'分隔,而选择操作符是管道字符'|'。在PEG中,选择运算符是斜杠字符'/'。 – hippietrail 2014-08-11 10:56:59