我有两个输入
a - b
a += b
我有一个选择的作品
void AssignmentExpression() : {}
{
LOOKAHEAD(3) ConditionalExpression()
| LOOKAHEAD(3) UnaryExpression() AssignmentOperator() AssignmentExpression()
}
使用此生产输入(1)有效,但输入(2)不起作用。
如果我在生产中交换选项,使其成为
void AssignmentExpression() : {}
{
LOOKAHEAD(3) UnaryExpression() AssignmentOperator() AssignmentExpression()
| LOOKAHEAD(3) ConditionalExpression()
}
然后输入(2)有效,但输入(1)不起作用。
我该如何解决这个问题?增加LOOKAHEAD参数没有帮助。
答案 0 :(得分:0)
见Expression Parsing by Recursive Descent。遵循“经典解决方案”。
由于您使用的是JJTree,问题Make a calculator's grammar that make a binary tree with javacc的答案会有所帮助。
答案 1 :(得分:0)
您可以尝试
void AssignmentExpression() : {}
{
LOOKAHEAD(UnaryExpression() AssignmentOperator() )
UnaryExpression() AssignmentOperator() AssignmentExpression()
| ConditionalExpression()
}
如果没有看到更多的语法,很难知道这是否有效。由于使用先行规范将抑制来自JavaCC的任何警告--JavaCC"假设"你知道自己在做什么 - 你必须自己做分析。
我的其他答案更好。