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