簡體   English   中英

如何在ANTLR中處理左聯想語法

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM