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