Я реализует BASIC-подобный язык, синтаксис, если заявления почти то же самое BASIC:Устный 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 для моего языка, но я не знаю, как обрабатывать инструкцию ветви. Чтобы быть более точным, если значение expr в if является истинным, как я могу избежать оценки инструкции ELSE? Спасибо
@Bart Извините, что я забыл внести изменения здесь. На самом деле сначала я редактирую свой вопрос, а затем отправил его в список рассылки ANTLR, но, возможно, я забыл применить изменения. – ZelluX