[英]How to handle left associative grammar in 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不接受左遞歸語法。 如何修改語法以使左聯想語法在像abc這樣的表達式中起作用?
將abc
解析為a-(bc)
而不解析為(ab)-c
而是解析為a (-b) (-c)
,即,
additiveExpression
: multiplicativeExpression
(
( '+'
| '-'
)
multiplicativeExpression
)*
;
以上規則取自Java語法 。 保存文本並使用編輯器閱讀,因為瀏覽器可能會忽略其中的行尾。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.