LL(1)解析器如何处理Right Associative语法

问题描述 投票:0回答:1

我试图找到LL(1)解析器如何处理正确的关联语法。例如,在像这样的左关联语法的情况下,E->+TE' first()和follow()工作顺利,解析表很容易生成。但是,在右递归语法的情况下,例如,在像E->T^E/T这样的权力的情况下,解析表不能正确生成。我正在寻找资源,但发现每个例子都避免像权力那样的正确联想。

parsing ll
1个回答
3
投票

LL算法处理右递归,没有任何问题。实际上,您提到的转换将左关联语法转换为右关联语法,并且需要通过在语义规则中转换语法树来恢复左关联性语法。因此,如果生产是真正的关联,您可以使用相同的语法,而无需对树进行后处理。

E->T^E/T的问题不在于它是正确的递归。问题是两个右侧以相同的非终端开始,使得预测变得不可能。解决方案是左因子分解,这将产生E->T(^ T)*`。

© www.soinside.com 2019 - 2024. All rights reserved.