簡體   English   中英

如果對ANTLR中的樹表示進行聲明

[英]If statement to tree representation in ANTLR

我有以下正確解析的if語句:

ifStatement
    : 'IF' expression 'THEN' statementBlock 
        (options {greedy=true;} 
            : 'ELSE' statementBlock)?

    ;

現在,我想將其解析為AST。 這是我的方法:

ifStatement
    : 'IF'^ expression 'THEN'! statementBlock 
        (options {greedy=true;} 
            : 'ELSE'! statementBlock)?

    ;

新增! ^ ,因為->構建說明似乎無效。

我的結果是一個有3個孩子的AST:1是有條件的,2和3是語句塊。 else部分是可選的:如果沒有其他部分,則節點3丟失。

問題在於語句塊始終為空。 如何解決?

以下基本上是我的實現方式。 請注意,在“令牌”部分中聲明了“ IF”,“ THEN”和“ ELSE”

ifStatement
:   IF expression THEN ifStat=statementBlock 
    (   ELSE elseStat=statementBlock  ->  ^(IF expression $ifStat $elseStat)
    |                                 ->  ^(IF expression $ifStat)
    )
;

[edit]或者您可以更明確一點,這也應該有效

ifStatement
:   IF expression THEN ifStat=statementBlock ELSE elseStat=statementBlock  ->  ^(IF expression $ifStat $elseStat)
|   IF expression THEN ifStat=statementBlock                               ->  ^(IF expression $ifStat)
;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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