38 lines
601 B
ANTLR
38 lines
601 B
ANTLR
grammar ifcc;
|
|
|
|
axiom: prog EOF ;
|
|
|
|
prog: 'int' 'main' '(' ')' '{' stmt* '}' ;
|
|
|
|
stmt: decl_stmt | set_stmt | return_stmt ;
|
|
|
|
return_stmt: RETURN expr ';' ;
|
|
|
|
decl_stmt: 'int' (VAR_NAME ',')* VAR_NAME ';' ;
|
|
set_stmt: VAR_NAME '=' expr ';' ;
|
|
|
|
val: CONST | VAR_NAME;
|
|
|
|
expr: expr MUL expr
|
|
| expr DIV expr
|
|
| expr ADD expr
|
|
| expr SUB expr
|
|
| '(' expr ')'
|
|
| val
|
|
;
|
|
|
|
|
|
|
|
MUL : '*' ;
|
|
DIV : '/' ;
|
|
ADD : '+' ;
|
|
SUB : '-' ;
|
|
|
|
RETURN : 'return' ;
|
|
CONST : [0-9]+ ;
|
|
VAR_NAME : [0-9a-zA-Z_]+ ;
|
|
|
|
COMMENT : '/*' .*? '*/' -> skip ;
|
|
DIRECTIVE : '#' .*? '\n' -> skip ;
|
|
WS : [ \t\r\n] -> channel(HIDDEN) ;
|