Is there a well-defined and well-reasoned transformation from LL(*) to PEG?
我正在研究PEG(解析表达式语法)解析器,而我正在研究的主题之一是与其他解析技术的等效性。
在《从正则表达式到解析表达语法》中,我找到了一篇有关将正则表达式转换为等效PEG的好论文。
我希望为
您的集体帮助将不胜感激!
我认为,关于PEG的Wikipedia文章就说明了一切。 PEG通过使用子句排序消除歧义来进行递归下降。 从理论上讲,可以用递归血统解析的语言家族是LL家族,但是,由于PEG具有无限的前瞻性并且没有歧义,因此该家族应该是一个更大的家族,可能是完整的CFG。
每个LL(k)语法都可以由具有k个超前值的递归下降解析器实现,因此可以通过对规则进行排序将每个LL(k)语法转换为PEG语法,从而将需要最长查找时间的规则排在第一位。
这是LL(k)语法:
1 2 | params = expr params = expr ',' params |
为了使其成为同一语言的PEG语法,必须对规则进行重新排序:
1 2 | params = expr ',' params params = expr |