LL(1) 解析器如何处理右关联文法
How LL(1) parser handle Right Associative grammar
我试图找出 LL(1) 解析器如何处理正确的关联语法。例如,在像这样的左关联语法的情况下 E->+TE'
first() 和 follow() 工作顺利并且解析 table 很容易生成。但是,在右递归语法的情况下,例如,在像 E->T^E/T
解析 table 这样的权力的情况下没有正确生成。我正在搜索资源,但发现每个例子都避免了像幂这样的右结合性。
LL 算法处理右递归没有任何问题。实际上,你说的转换是把左结合文法变成右结合文法,而左结合性需要通过语义规则中的语法树转换来恢复。所以如果产生式真的是右结合的,你可以使用相同的语法而不需要 post- 处理树。
E->T^E/T
的问题不在于它是右递归的。问题在于右侧的两个以相同的非终结符开头,因此无法进行预测。解决方案是左因式分解,将产生 E->
T (^T)*`.
我试图找出 LL(1) 解析器如何处理正确的关联语法。例如,在像这样的左关联语法的情况下 E->+TE'
first() 和 follow() 工作顺利并且解析 table 很容易生成。但是,在右递归语法的情况下,例如,在像 E->T^E/T
解析 table 这样的权力的情况下没有正确生成。我正在搜索资源,但发现每个例子都避免了像幂这样的右结合性。
LL 算法处理右递归没有任何问题。实际上,你说的转换是把左结合文法变成右结合文法,而左结合性需要通过语义规则中的语法树转换来恢复。所以如果产生式真的是右结合的,你可以使用相同的语法而不需要 post- 处理树。
E->T^E/T
的问题不在于它是右递归的。问题在于右侧的两个以相同的非终结符开头,因此无法进行预测。解决方案是左因式分解,将产生 E->
T (^T)*`.