是否存在从LL(*)到PEG的明确定义和合理的转换?

时间:2012-10-29 18:33:07

标签: parsing ll peg

我正在研究PEG(Parsing Expression Grammar)解析器,我正在研究的一个主题是与其他解析技术等效。

我找到了一篇关于在From Regular Expressions to Parsing Expression Grammars将正则表达式转换为等价的PEG的好文章。

我希望找到LL(*)解析器的类似处理方法,但还是空手而归。在我看来,1中描述的许多技术也适用于LL(*)转换的问题,但是我并没有充分沉浸在对我自己有信心的形式主义中。分析

非常感谢您的集体帮助!

1 个答案:

答案 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