Java 如何在ANTLR中处理左联想语法
我使用antlr生成生成抽象语法树的解析器。我有一些关于左联想运算符的问题。我的语法如下:Java 如何在ANTLR中处理左联想语法,java,parsing,antlr,context-free-grammar,Java,Parsing,Antlr,Context Free Grammar,我使用antlr生成生成抽象语法树的解析器。我有一些关于左联想运算符的问题。我的语法如下: add_expr returns [ASTNode value] :a=mul_expr {$value = a;} ( o = ('+' | '-') b = add_expr { $value = new AddNode(a, b, $o.text); } )? ; mul_expr returns [AS
add_expr returns [ASTNode value]
:a=mul_expr {$value = a;}
(
o = ('+' | '-') b = add_expr
{
$value = new AddNode(a, b, $o.text);
}
)?
;
mul_expr returns [ASTNode value]
:a=term {$value = a;}
(
o = ('*' | '/') b = mul_expr
{
$value = new MultiplyNode(a, b, $o.text);
}
)?
;
AddNode和MultiplyNode的构造函数如下所示:
AddNote(ASTNode left, ASTNode right, String operatorr)
问题是,对于输入a-b-c,它被解析为类似于a-(b-c)的东西,而不是(a-b)-c。Antlr不接受左递归语法。如何修改语法以使左侧关联语法在表达式中像a-b-c一样工作?解析
a-b-c
不是作为a-(b-c)
而不是作为(a-b)-c
,而是作为a(-b)-c
,也就是说
additiveExpression
: multiplicativeExpression
(
( '+'
| '-'
)
multiplicativeExpression
)*
;
以上规则摘自。保存文本并使用编辑器阅读,因为浏览器可能会忽略其中的行尾。解析
a-b-c
不是作为a-(b-c)
,也不是作为(a-b)-c
,而是作为a(-b)-c
,也就是说
additiveExpression
: multiplicativeExpression
(
( '+'
| '-'
)
multiplicativeExpression
)*
;
以上规则摘自。保存文本并使用编辑器阅读,因为浏览器可能会忽略其中的行尾