Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /** Simple statically-typed programming language with functions and variables
- * taken from "Language Implementation Patterns" book.
- */
- grammar Hello;
- file: ((functionDecl | varDecl | stat )';')+ ;
- varDecl
- : ID ':' TYPE ('<-' expr)?
- ;
- TYPE : 'Float' | 'Int' | 'Void' | 'Bool' ;
- functionDecl
- : ID '(' formalParameters? ')' ':' TYPE block // "void f(int x) {...}"
- ;
- formalParameters
- : formalParameter (',' formalParameter)*
- ;
- formalParameter
- : ID ':' TYPE
- ;
- block: '{' stat '}' ; // possibly empty statement block
- stat: block
- | varDecl
- | 'if' expr 'then' stat ('else' stat)?
- | expr '<-' expr ';' // assignment
- | expr // func call
- ;
- expr: ID '(' exprList? ')' # Call
- | expr '*' expr # Mult
- | expr PLUS expr # Add
- | expr MINUS expr # Sub
- | expr LT expr # Less
- | expr '=' expr # Equal
- | ID # Var
- | INT # Int
- | '(' expr ')' # Parens
- ;
- exprList : expr (',' expr)* ; // arg list
- ID : LETTER (LETTER | [0-9])* ;
- fragment
- LETTER : [a-zA-Z] ;
- INT : [0-9]+ ;
- WS : [ \t\n\r]+ -> skip ;
- PLUS: '+';
- MINUS: '-';
- LT: '<';
- SL_COMMENT
- : '//' .*? '\n' -> skip
- ;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement