Advertisement
Guest User

Untitled

a guest
Jan 20th, 2020
70
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.59 KB | None | 0 0
  1. grammar Nimble;
  2.  
  3. program : funcdec* vardec* statement* ;
  4.  
  5. statement
  6. : 'print' expr # print
  7. | 'while' expr statementblock # while
  8. | ('if' expr statementblock | 'if' expr statementblock 'else' statementblock) # if
  9. | 'return' expr? # return
  10. | ID '(' ((expr ',')* expr)? ')' # funccall
  11. | ID '=' expr # assign
  12. ;
  13.  
  14. funcdec : 'func' ID '(' ((pramtr ',')* pramtr)? ')' ('->' TYPE)? '{' vardec* statement* '}';
  15.  
  16. pramtr : ID ':' TYPE ;
  17.  
  18. vardec : 'var' ID ':' TYPE ('=' expr)? ;
  19.  
  20. statementblock : '{' statement* '}' ;
  21.  
  22. expr
  23. : '(' expr ')' #bracexpr
  24. | op=('!' | '-') expr #unary
  25. | expr op=('*' | '/') expr #muldiv
  26. | expr op=('+' | '-') expr #addsub
  27. | expr op=('==' | '<' | '<=') expr #compare
  28. | ID '(' ((expr ',')* expr)? ')' #funccall
  29. | STRING #string
  30. | NUMBER #number
  31. | BOOL #bool
  32. | ID #id
  33. ;
  34.  
  35. BOOL : ('true' | 'false') ;
  36.  
  37. STRING : ["]~["\r\n]*["] ;
  38. // https://github.com/antlr/grammars-v4/blob/master/c/C.g4
  39.  
  40. TYPE : ('Int' | 'String' | 'Bool') ;
  41.  
  42. ID : [a-zA-Z_][a-zA-Z_0-9]* ;
  43.  
  44. NUMBER : [0-9]+ ;
  45.  
  46. COMMENT : '//' ~[\r\n]* -> skip ;
  47.  
  48. WS : [ \t\r\n]+ -> skip ;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement