1
我正在使用antlr生成生成抽象語法樹的解析器。我遇到了關於左聯合操作符的一些問題。我的語法是這樣的:如何處理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 [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)
問題是,輸入ABC,它被解析成類似A-(BC)而不是(ab)-c。 Antlr不接受左遞歸語法。如何修改語法以使左關聯語法在表達式中工作,如a-b-c?