问题描述
假设我们有一个上下文无关文法,如果它在 LL[1] 中,那么它只有正确的 Associative ! 但是假设我想让这个上下文无关语法有一个左关联,那么它就不会留在 LL[1] 中,(这没关系) 我认为为了使上下文无关语法具有左关联,我应该使其具有左递归。 有没有一种方法可以在不改变语法语言的情况下将左递归包含在上下文无关语法中? 例如,如果我们有这个上下文无关语法:
1: S -> sum ( ELIST )
2: ELIST -> E,ELIST
3: ELIST -> E
4: E -> num
5: E -> id
6: E -> S
如何使其包含左递归,以便运算符“,”现在将成为左关联?
解决方法
将您的第二个制作更改为:
2: ELIST -> ELIST,E
这不会改变语言,只会改变语言的解析方式。
此修改应适用于以级联优先级样式编写的任何表达式语法。但它不是一种可以应用于任何语法的转换。