Advertisement
Guest User

Untitled

a guest
Nov 15th, 2018
99
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.35 KB | None | 0 0
  1. /** Simple statically-typed programming language with functions and variables
  2. * taken from "Language Implementation Patterns" book.
  3. */
  4. grammar Hello;
  5.  
  6. file: ((functionDecl | varDecl | stat )';')+ ;
  7.  
  8. varDecl
  9. : ID ':' TYPE ('<-' expr)?
  10. ;
  11. TYPE : 'Float' | 'Int' | 'Void' | 'Bool' ;
  12.  
  13. functionDecl
  14. : ID '(' formalParameters? ')' ':' TYPE block // "void f(int x) {...}"
  15. ;
  16.  
  17. formalParameters
  18. : formalParameter (',' formalParameter)*
  19. ;
  20. formalParameter
  21. : ID ':' TYPE
  22. ;
  23.  
  24. block: '{' stat '}' ; // possibly empty statement block
  25.  
  26. stat: block
  27. | varDecl
  28. | 'if' expr 'then' stat ('else' stat)?
  29.  
  30. | expr '<-' expr ';' // assignment
  31. | expr // func call
  32. ;
  33.  
  34.  
  35. expr: ID '(' exprList? ')' # Call
  36. | expr '*' expr # Mult
  37. | expr PLUS expr # Add
  38. | expr MINUS expr # Sub
  39. | expr LT expr # Less
  40. | expr '=' expr # Equal
  41. | ID # Var
  42. | INT # Int
  43. | '(' expr ')' # Parens
  44. ;
  45.  
  46. exprList : expr (',' expr)* ; // arg list
  47. ID : LETTER (LETTER | [0-9])* ;
  48. fragment
  49. LETTER : [a-zA-Z] ;
  50.  
  51. INT : [0-9]+ ;
  52.  
  53. WS : [ \t\n\r]+ -> skip ;
  54.  
  55. PLUS: '+';
  56. MINUS: '-';
  57. LT: '<';
  58. SL_COMMENT
  59. : '//' .*? '\n' -> skip
  60. ;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement