Javacc 冲突产生式
Javacc conflicting productions
我有两个输入
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 参数没有帮助。
参见Expression Parsing by Recursive Descent。关注"classic solution".
由于您使用的是 JJTree,Make a calculator's grammar that make a binary tree with javacc 问题的答案将会有所帮助。
你可以试试
void AssignmentExpression() : {}
{
LOOKAHEAD(UnaryExpression() AssignmentOperator() )
UnaryExpression() AssignmentOperator() AssignmentExpression()
| ConditionalExpression()
}
如果不了解更多语法,很难知道这是否有效。由于使用前瞻规范将抑制来自 JavaCC 的任何警告 --JavaCC "assumes" 你知道你在做什么 -- 你必须自己进行分析。
我的另一个答案更好。
我有两个输入
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 参数没有帮助。
参见Expression Parsing by Recursive Descent。关注"classic solution".
由于您使用的是 JJTree,Make a calculator's grammar that make a binary tree with javacc 问题的答案将会有所帮助。
你可以试试
void AssignmentExpression() : {}
{
LOOKAHEAD(UnaryExpression() AssignmentOperator() )
UnaryExpression() AssignmentOperator() AssignmentExpression()
| ConditionalExpression()
}
如果不了解更多语法,很难知道这是否有效。由于使用前瞻规范将抑制来自 JavaCC 的任何警告 --JavaCC "assumes" 你知道你在做什么 -- 你必须自己进行分析。
我的另一个答案更好。