Я работаю над расширением оператора над грамматикой .g4 (с именем Simple.g4) в ANTLR, я пытаюсь реализовать оператор «if then else», включающий новую инструкцию с именем ifStatement в операторе section, но я У меня проблема с кодом, который я сгенерировал.
Это правильная форма для реализации оператора if?
Вот код, с которым я работаю, используя Eclipse IDE + ANTLR Plugin:
grammar Simple;
//PARSER RULES
block : '{' statement* '}';
statement : assignment ';'
| deletion ';'
| print ';'
| varDec ';'
| ifStatement ';'
| funDec ';'
| block;
assignment : ID '=' exp;
deletion : 'delete' ID;
print : 'print' exp;
exp : '(' exp ')' #baseExp
| '-' exp #negExp
| left=exp op=('*' | '/') right=exp #binExp
| left=exp op=('+' | '-') right=exp #binExp
| ID #varExp
| INT #valExp
| BOOL #valExp
| expression cmp='>' expression #boolExp
| expression cmp='<' expression #boolExp /
| expression cmp='==' expression #boolExp
| expression cmp='!=' expression #boolExp
| expression cmp='>=' expression #boolExp
| expression cmp='<=' expression #boolExp
// If-Then-Else
ifStatement : 'if' '(' exp ')' 'then' exp 'else' exp
// LEXER RULES
TRUE : 'true' ;
FALSE : 'false';
IF : 'if' ;
THEN : 'then' ;
ELSE : 'else' ;
VAR : 'var' ;
INT : 'int' ;
BOOL : 'bool' ;
//IDs
fragment CHAR : 'a'..'z' |'A'..'Z' ;
ID : CHAR (CHAR | DIGIT)* ;
fragment DIGIT : '0'..'9';
INT : DIGIT+;
//Boolean
BOOL : 'true' | 'false';
//Escape Sequence
WS : (' '|'\t'|'\n'|'\r')-> skip;
LINECOMMENTS : '//' (~('\n'|'\r'))* -> skip;
BLOCKCOMMENTS : '/*'( ~('/'|'*')|'/'~'*'|'*'~'/'|BLOCKCOMMENTS)* '*/' -> skip;