我有以下的生产 A -> Aa
A -> b
所以很显然,有左递归像 parseA() {
parseA();//recursion
parsea();
}
据说左递归可以使用可以避免以下规则: A -> bA'
A' -> aA'|null
这里如何避免左递归?仍然存在递归在函数A'中。 有人可以解释我这个。我是这个主题的初学者吗?
这是我询问How to encode FIRST & FOLLOW sets inside a compiler的上一个问题的后续步骤,但这一个更多地是关于我的程序的设计。 我正在通过编写递归下降解析器来实现我的编译器的语法分析阶段。我需要能够利用FIRST和FOLLOW集合,以便更有效地处理源程序语法中的错误。我已经为我的所有非终端计算了FIRST和FOLLOW,但在决定将它们逻辑放置在我的程序