我正在研究PEG(Parsing Expression Grammar)解析器,我正在研究的一个主题是与其他解析技术等效。
我找到了一篇关于在From Regular Expressions to Parsing Expression Grammars将正则表达式转换为等价的PEG的好文章。
我希望找到LL(*)
解析器的类似处理方法,但还是空手而归。在我看来,1中描述的许多技术也适用于LL(*)
转换的问题,但是我并没有充分沉浸在对我自己有信心的形式主义中。分析
非常感谢您的集体帮助!
答案 0 :(得分:1)
关于PEG的Wikipedia article说明了这一切,我想。 PEG通过使用子句排序来消除歧义来进行递归下降。从理论上讲,可以通过递归下降解析的语言族是LL族,但是,由于PEG具有无限的前瞻性且没有歧义,因此该族应该是更大的,可能是完整的CFG。
每个LL(k)语法都可以通过具有k前瞻的递归下降解析器来实现,因此可以通过对规则进行排序来将每个LL(k)语法转换为PEG语法,以便首先列出需要最长外观的那些语法。
这是LL(k)语法:
params = expr
params = expr ',' params
要使其成为同一语言的PEG语法,必须重新排序规则:
params = expr ',' params
params = expr