2026-03-04 11:56:25 +01:00

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) ;