Advertisement
Guest User

Untitled

a guest
May 19th, 2019
101
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.94 KB | None | 0 0
  1. grammar BasicLang;
  2. parse
  3. : block EOF
  4. ;
  5. block
  6. : (statement | functionDecl | functionForAttr)* (Return expression )?
  7. ;
  8. statement
  9. : assignment
  10. | functionCall ';'
  11. | ifStatement
  12. | forStatement
  13. | whileStatement
  14. ;
  15. assignment
  16. : Identifier indexes? '=' expression
  17. ;
  18. functionCall
  19. : Identifier '(' exprList? ')' #identifierFunctionCall
  20. | Write '(' exprList ')' #WriteFunctionCall
  21. | Print '(' expression? ')' #PrintFunctionCall
  22. | Assert '(' expression ')' #assertFunctionCall
  23. | Size '(' expression ')' #sizeFunctionCall
  24. | Mode '(' expression ')' #ModeCall
  25. ;
  26. ifStatement
  27. : ifStat elseIfStat* elseStat? End
  28. ;
  29. ifStat
  30. : If expression Colon block
  31. ;
  32. elseIfStat
  33. : Else expression Colon block
  34. ;
  35. elseStat
  36. : ElseIf Colon block
  37. ;
  38. functionDecl
  39. : Identifier OParen idList? CParen Colon block End
  40. ;
  41. functionForAttr
  42. : Identifier '=' functionDecl End
  43. ;
  44. forStatement
  45. : For OParen Identifier '=' expression Comma expression CParen Colon block End
  46. ;
  47. whileStatement
  48. : While expression Colon block End
  49. ;
  50. idList
  51. : Identifier (',' Identifier)*
  52. ;
  53. exprList
  54. : expression (',' expression)*
  55. ;
  56. expression
  57. : '-' expression #unaryMinusExpression
  58. | '!' expression #notExpression
  59. | expression '^' expression #powerExpression
  60. | expression '*' expression #multiplyExpression
  61. | expression '/' expression #divideExpression
  62. | expression '%' expression #modulusExpression
  63. | expression '+' expression #addExpression
  64. | expression '-' expression #subtractExpression
  65. | expression '>=' expression #gtEqExpression
  66. | expression '<=' expression #ltEqExpression
  67. | expression '>' expression #gtExpression
  68. | expression '<' expression #ltExpression
  69. | expression '==' expression #eqExpression
  70. | expression '!=' expression #notEqExpression
  71. | expression '&&' expression #andExpression
  72. | expression '||' expression #orExpression
  73. | expression '?' expression ':' expression #ternaryExpression
  74. | expression In expression #inExpression
  75. | Number #numberExpression
  76. | Bool #boolExpression
  77. | Null #nullExpression
  78. | functionCall indexes? #functionCallExpression
  79. | list indexes? #listExpression
  80. | Identifier indexes? #identifierExpression
  81. | String indexes? #stringExpression
  82. | '(' expression ')' indexes? #expressionExpression
  83. | Input '(' String? ')' #inputExpression
  84. ;
  85. list
  86. : '[' exprList? ']'
  87. ;
  88. indexes
  89. : ('[' expression ']')+
  90. ;
  91. Write : 'write';
  92. Print : 'print';
  93. Input : 'input';
  94. Assert : 'assert';
  95. Size : 'size';
  96. Mode : 'mode';
  97. Def : 'def';
  98. If : 'if';
  99. ElseIf : 'else if';
  100. Else : 'else';
  101. Return : 'return';
  102. For : 'for';
  103. While : 'while';
  104. To : 'to';
  105. End : '}';
  106. In : 'in';
  107. Null : 'null';
  108. Or : '||';
  109. And : '&&';
  110. Equals : '==';
  111. NEquals : '!=';
  112. GTEquals : '>=';
  113. LTEquals : '<=';
  114. Pow : '^';
  115. Excl : '!';
  116. GT : '>';
  117. LT : '<';
  118. Add : '+';
  119. Subtract : '-';
  120. Multiply : '*';
  121. Divide : '/';
  122. Modulus : '%';
  123. OBracket : '[';
  124. CBracket : ']';
  125. OParen : '(';
  126. CParen : ')';
  127. SColon : ';';
  128. Assign : '=';
  129. Comma : ',';
  130. QMark : '?';
  131. Colon : '{';
  132. Bool
  133. : 'true'
  134. | 'false'
  135. ;
  136. Number
  137. : Int ('.' Digit*)?
  138. ;
  139. Identifier
  140. : [a-zA-Z_] [a-zA-Z_0-9]*
  141. ;
  142. String
  143. : ["] [a-zA-Z0-9 \t]* ["]
  144. | ['] [a-zA-Z0-9 \t]* [']
  145. ;
  146. Comment
  147. : ('//' ~[\r\n]* | '/**' .*? '*/') -> skip
  148. ;
  149. Space
  150. : [ \t\r\n\u000C] -> skip
  151. ;
  152. fragment Int
  153. : [1-9] Digit*
  154. | '0'
  155. ;
  156. fragment Digit
  157. : [0-9]
  158. ;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement