在JavaCC中删除直接左递归

时间:2016-10-26 15:52:56

标签: parsing recursion compiler-construction javacc left-recursion

我在JavaCC文件中有以下内容:

void condition() : {}
{
    expression() comp_op() expression()
    | condition() (<AND> | <OR>) condition()
}

其中<AND>是&#34;&amp;&amp;&#34; <OR>是&#34; ||&#34;。由于它是直接左递归的事实,这引起了问题。我该如何解决这个问题?

1 个答案:

答案 0 :(得分:2)

条件基本上是由expression comp_op expressionAND分隔的OR中的一个或多个。您可以执行以下操作

condition --> simpleCondition ( (<AND> | <OR>) simpleCondition )*
simpleCondition --> expression comp_op expression