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