从这个维基百科页面:
上下文无关文法和解析表达式文法的根本区别在于 PEG 的选择运算符是有序的。如果第一个备选方案成功,则第二个备选方案将被忽略。因此,有序选择不是可交换的,这与上下文无关文法和正则表达式中的无序选择不同。有序选择类似于某些逻辑编程语言中可用的软切运算符。
为什么 PEG 的选择算子会短路匹配?是因为尽量减少内存使用(由于记忆)?
我不确定正则表达式中的选择运算符是什么,但让我们假设它是这样的:/[aeiou]/
匹配元音。所以这个正则表达式是可交换的,因为我可以用 5 个中的任何一个来写它!(五个阶乘)元音字符的排列?ie/[aeiou]/
的行为与/[eiaou]/
. 它是可交换的有什么好处?(参见 PEG 的不可交换性)
结果是,如果将 CFG 直接音译为 PEG,则通过从可能的解析中确定性地选择一棵解析树来解决前者中的任何歧义。通过仔细选择指定语法替代方案的顺序,程序员可以很好地控制选择哪个分析树。
这是说 PEG 的语法优于 CFG 的吗?