如何制作一个没有左递归的上下文无关语法来包含一个左递归(不改变语法的语言)?
how to make a context free grammar with no left recursion to include a left recursion (without changing the language of the grammar)?
假设我们有一个上下文无关文法,如果它在 LL[1] 中,那么它只有正确的关联性!
但是假设我想让这个上下文无关语法有一个左关联,那么它就不会留在 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
这不会改变语言,只会改变语言的解析方式。
此修改适用于以级联优先样式编写的任何表达式语法。但它不是可以应用于任何语法的转换。
假设我们有一个上下文无关文法,如果它在 LL[1] 中,那么它只有正确的关联性! 但是假设我想让这个上下文无关语法有一个左关联,那么它就不会留在 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
这不会改变语言,只会改变语言的解析方式。
此修改适用于以级联优先样式编写的任何表达式语法。但它不是可以应用于任何语法的转换。