Untitled
unknown
plain_text
a year ago
1.7 kB
3
Indexable
grammar ArithGrammer; program : prog; prog : func_list ; func_list : func_def func_list | func_def ; func_def : data_type ID '(' param_list ')' code_block ; param_list : param ',' param_list | param | // epsilon ; param : data_type ID ; data_type : 'int' | 'double' | 'boolean' | 'void' ; code_block : '{' stmt_list '}' ; stmt_list : stmt stmt_list | ; stmt : ';' | code_block | data_type var_list ';' | ID '=' expr ';' | ID '++' ';' | ID '--' ';' | 'return' ';' | 'return' expr ';' | decide '(' expr ')' stmt | decide '(' expr ')' stmt ('else' stmt)? | expr ';' | loop_stmt | init_stmt ';' ; decide : 'if'; loop_stmt : 'while' '(' expr ')' stmt ; init_stmt : data_type ID '=' expr ; var_list : var ',' var_list | var ; var : ID |ID '=' expr ; expr : number | ID | 'true' | 'false' | STRING | ID '(' args ')' | '(' expr ')' | unop number | number binop number ; args : expr ',' args | expr | ; unop : '-' | '!' ; binop : ( '*' | '/' | '%' ) | ( '+' | '-' ) | ( '<' | '>' | '<=' | '>=' ) | ( '==' | '!=' ) | '&&' | '||' ; number : INTEGER | DOUBLE ; // Lexer rules INTEGER : '0' | [1-9] [0-9]*; DOUBLE : INTEGER '.' ([0-9])+; ID : [a-zA-Z_] ([a-zA-Z_] | [0-9])*; STRING : '"' .*? '"'; WS : [ \t\r\n]+ -> skip; COMMENT : '//' ~[\r\n]* -> skip; BLOCK_COMMENT : '/*' .*? '*/' -> skip; // Handle errors ERROR : . -> channel(HIDDEN);
Editor is loading...
Leave a Comment