Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- grammar tinyc;
- start : program EOF ;
- program : statement | statement program ;
- statement : decl ';' | assign ';' | branch | loop | out ';' |in ';' ;
- decl : 'int' ID ;
- assign : ID '=' numExpr ;
- in : 'read' '(' ')' ;
- out : 'write' '(' numExpr ')' | 'write' '(' STRING ')';
- branch : 'if' '(' booleanExpr')' '{' program '}' | 'if' '(' booleanExpr ')' '{' program '}' 'else' '{' program '}' ;
- loop : 'while' '(' booleanExpr ')' '{' program '}' ;
- booleanExpr : booleanExpr OR booleanExpr1 | booleanExpr1 ;
- booleanExpr1 : booleanExpr1 AND booleanExpr2 | booleanExpr2 ;
- booleanExpr2 : '(' booleanExpr ')' | relation | NOT relation | NOT booleanExpr ;
- relation : numExpr EQ numExpr
- | numExpr NEQ numExpr
- | numExpr LEQ numExpr
- | numExpr GEQ numExpr
- | numExpr LT numExpr
- | numExpr GT numExpr ;
- numExpr : numExpr ADD numExpr1 | numExpr SUB numExpr1 | numExpr1 ;
- numExpr1 : numExpr1 MULT numExpr2 | numExpr1 DIV numExpr2 | numExpr1 MOD numExpr2 | numExpr2 ;
- numExpr2 : '(' numExpr ')' | NUMBER | ID | in ;
- ADD : '+' ;
- SUB : '-' ;
- DIV : '/' ;
- MOD : '%' ;
- MULT : '*' ;
- AND : '&&' ;
- OR : '||' ;
- NOT : '!' ;
- EQ : '==' ;
- LT : '<' ;
- LEQ : '<=' ;
- GT : '>' ;
- GEQ : '>=' ;
- NEQ : '!=' ;
- ID : [a-z]+ ;
- NUMBER : [0-9]+ ;
- STRING : '"' .*? '"';
- COMMENT : '/*' .*? '*/' -> skip ; // .*? matches anything until the first */
- LINE_COMMENT : '//' ~[\r\n]* -> skip ; // ~[\r\n]* matches anything but \r and \n
- WS : [ \n\t\r]+ -> skip;
- ErrorChar : . ;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement