0
聲明
我實現基本般的語言,如果語句幾乎相同,以基本的語法:解釋IF在ANTLR
IF a == b THEN
PRINT "EQUAL"
ELSE
PRINT "UNEQUAL"
ENDIF
我有寫一個語法文件解析和樹遍歷到解釋器語言:
[Expr.g]
options {
language=Python;
output=AST;
ASTLabelType=CommonTree;
}
tokens {
BLOCK;
}
block
: stmt* -> ^(BLOCK stmt*)
;
if_stmt
: 'IF' c=expr 'THEN' t=block ('ELSE' f=block)? 'ENDIF'
-> ^('IF' $c $t+ ^('ELSE' $f+))
;
在AST沃克:
[Walker.g]
options {
language=Python;
tokenVocab=Expr;
ASTLabelType=CommonTree;
}
block
: ^(BLOCK stmt*)
;
stmt
: ...
| 'IF' expr t=stmt* 'ELSE' f=stmt*
{}
現在我能正確地產生AST對於我的語言,但我不知道如何處理分支語句。更確切地說,如果if語句中的expr爲真,我該如何避免評估ELSE語句?謝謝
@Bart對不起,我忘了在這裏提交更改。其實我先在這裏編輯我的問題,然後將它發佈到ANTLR郵件列表中,但也許我忘了應用這些更改。 – ZelluX 2010-07-08 09:50:33