Parsing 从LL(*)到PEG是否存在定义明确、理由充分的转换?

Parsing 从LL(*)到PEG是否存在定义明确、理由充分的转换?,parsing,ll,peg,Parsing,Ll,Peg,我正在研究PEG(解析表达式语法)解析器,我正在研究的主题之一是与其他解析技术的等价性 我发现了一篇关于将正则表达式转换为等价的peg的好论文 我希望能为LL(*)解析器找到类似的处理方法,但到目前为止还是空手而归。在我看来,中描述的许多技术也将适用于LL(*)转换的问题,但是我对形式主义没有足够的了解,无法对自己的分析充满信心 非常感谢您的集体帮助 我想,关于佩格的故事说明了一切。PEG通过使用子句排序来消除歧义,从而实现递归下降。理论上,可以用递归下降法解析的语言家族是LL家族,但是,由于P

我正在研究PEG(解析表达式语法)解析器,我正在研究的主题之一是与其他解析技术的等价性

我发现了一篇关于将正则表达式转换为等价的peg的好论文

我希望能为
LL(*)
解析器找到类似的处理方法,但到目前为止还是空手而归。在我看来,中描述的许多技术也将适用于
LL(*)
转换的问题,但是我对形式主义没有足够的了解,无法对自己的分析充满信心

非常感谢您的集体帮助

我想,关于佩格的故事说明了一切。PEG通过使用子句排序来消除歧义,从而实现递归下降。理论上,可以用递归下降法解析的语言家族是LL家族,但是,由于PEG具有无限的前瞻性和无歧义性,该家族应该是一个更大的家族,可能是完整的CFG

每个LL(k)语法都可以通过一个具有k个lookahead的递归下降解析器来实现,因此每个LL(k)语法都可以通过对规则进行排序来转换为PEG语法,以便首先列出需要最长lookahed的规则

这是一个LL(k)语法:

要使其成为同一语言的PEG语法,必须对规则进行重新排序:

params = expr ',' params
params = expr

谢谢我知道这是可能的,但我要找的是一个为“翻译”制定了足够机械的程序的人,以及一个好的证明,至少是正确性的理由,类似于我引用的regex论文。(尽管如此,我还是会在一两天内“接受”这个答案作为感谢。)@danfuzz抱歉,我没有登记入住。我不太明白你在找什么。任何LL(k)语法也是PEG语法(PEG>LL)就足够了。不能转化为LL或LR的CFG不能用常规方法进行确定性治疗。PEG应该小于CFG(如LL和LR),因为规则顺序不允许CFG允许的所有派生。但大多数实际应用都是LL,所以PEG应该是好的。对不起,隆隆声。如果我知道你想要什么,我可以帮你更多。
params = expr ',' params
params = expr