删除 JavaCC 中的直接左递归
Removing direct left recursion in JavaCC
我在 JavaCC 文件中有以下内容:
void condition() : {}
{
expression() comp_op() expression()
| condition() (<AND> | <OR>) condition()
}
其中 <AND>
是“&&”,<OR>
是“||”。由于它是直接左递归的事实,这会导致问题。我该如何解决这个问题?
条件基本上是 expression comp_op expression
中的 1 个或多个,由 AND
或 OR
分隔。您可以执行以下操作
condition --> simpleCondition ( (<AND> | <OR>) simpleCondition )*
simpleCondition --> expression comp_op expression
我在 JavaCC 文件中有以下内容:
void condition() : {}
{
expression() comp_op() expression()
| condition() (<AND> | <OR>) condition()
}
其中 <AND>
是“&&”,<OR>
是“||”。由于它是直接左递归的事实,这会导致问题。我该如何解决这个问题?
条件基本上是 expression comp_op expression
中的 1 个或多个,由 AND
或 OR
分隔。您可以执行以下操作
condition --> simpleCondition ( (<AND> | <OR>) simpleCondition )*
simpleCondition --> expression comp_op expression