SHARE
TWEET

Untitled

a guest May 19th, 2019 76 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  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.  ;
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
Not a member of Pastebin yet?
Sign Up, it unlocks many cool features!
 
Top