Advertisement
YahiaOsama

Untitled

Apr 20th, 2019
115
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.07 KB | None | 0 0
  1. grammar milestone_2;
  2.  
  3. tokens { INDENT, DEDENT }
  4.  
  5. start : (stmt NEWLINE?)* EOF;
  6.  
  7. stmt : complexOrSimpleStmt | INDENT? NEWLINE DEDENT?;
  8.  
  9. complexOrSimpleStmt : complexStmt | simpleStmt;
  10.  
  11. complexStmt : forStmt | functionCall | ifStmt | whenStmt;
  12.  
  13. simpleStmt : varStmt | constStmt | letStmt | identifierAssignment | echoStmt | assertStmt | CONTROL_KEYWORD;
  14.  
  15. identifierAssignment : IDENTIFIER EQUALS equationStmt;
  16.  
  17. identifierOperand : UNARY_OPERATOR? (array|ARRAY_INDEX | NUMBER_LIT | CHAR_LIT | STR_LIT | BOOLEAN | functionCall | (IDENTIFIER (DOT (IDENTIFIER | functionCall ))*)
  18. | ARRAY OPEN_BRACK NUMBER_LIT+ (RANGE NUMBER_LIT+)? COMMA INT CLOSE_BRACK
  19. | (NUMBER_LIT | CHAR_LIT) RANGE (NUMBER_LIT | CHAR_LIT));
  20.  
  21.  
  22. letStmt : LET (identifierAssignment | NEWLINE INDENT letBlock DEDENT);
  23.  
  24. letBlock : identifierAssignment(NEWLINE identifierAssignment)* NEWLINE?;
  25.  
  26. equationStmt : identifierOperand (OPERATORS identifierOperand)?;
  27.  
  28. CONTROL_KEYWORD : CONTINUE | BREAK | RETURN;
  29.  
  30. OPERATORS : ADD_OPERATOR | DIV_OPERATOR | MUL_OPERATOR | MINUS_OPERATOR | MODULUS | XOR_OPERATOR | AND_OPERATOR | OR_OPERATOR;
  31.  
  32. UNARY_OPERATOR : AT_OPERATOR | DOLLAR_OPERATOR | NOT;
  33.  
  34. BOOLEAN : TRUE | FALSE;
  35.  
  36. array : OPEN_BRACK (declareElements | indexArray)? CLOSE_BRACK;
  37.  
  38. declareElements : LIT (COMMA LIT)*;
  39. indexArray : equationStmt | LIT | identifierOperand;
  40.  
  41. fragment LIT : STR_LIT | NUMBER_LIT;
  42.  
  43. varStmt : VARIABLE (colonOrAssignment | (NEWLINE INDENT varBlock DEDENT));
  44.  
  45. varBlock : (varColonStmt NEWLINE)+;
  46.  
  47. varColonStmt : IDENTIFIER (COMMA IDENTIFIER)* COLON dataType;
  48.  
  49. colonOrAssignment : ((identifierAssignment|varColonStmt));
  50.  
  51. constStmt : CONST (identifierAssignment | (NEWLINE INDENT constBlock DEDENT) );
  52.  
  53. constBlock : identifierAssignment (NEWLINE identifierAssignment)* NEWLINE?;
  54.  
  55. condStmt : equationStmt (COMP_OPERATOR identifierOperand)?;
  56.  
  57. whenStmt : WHEN condStmt COLON(stmt(NEWLINE elseStmt)? | ifBody elseStmt);
  58.  
  59. ifStmt : IF condStmt COLON (stmt (NEWLINE elseStmt)? | ifBody elseStmt );
  60.  
  61. ifBody : NEWLINE INDENT stmt+ NEWLINE? DEDENT;
  62.  
  63. elseStmt : (ELIF condStmt COLON NEWLINE INDENT stmt+ NEWLINE? DEDENT)*
  64. (ELSE COLON NEWLINE INDENT stmt+ NEWLINE? DEDENT)*;
  65.  
  66. echoStmt :
  67. ECHO OPEN_PAREN (identifierOperand) (COMMA (identifierOperand) )* CLOSE_PAREN
  68. | ECHO (identifierOperand) (COMMA (identifierOperand))*;
  69.  
  70. assertStmt : ASSERT NUMBER_LIT EQUALS_OPERATOR NUMBER_LIT ;
  71.  
  72. ARRAY_INDEX : IDENTIFIER OPEN_BRACK (IDENTIFIER|NUMBER_LIT) CLOSE_BRACK;
  73.  
  74. functionParameter : (IDENTIFIER | NUMBER_LIT | STR_LIT | equationStmt | identifierAssignment);
  75.  
  76. functionInput : (OPEN_PAREN (functionParameter (COMMA functionParameter)*)? CLOSE_PAREN) | (functionParameter (COMMA functionParameter)*);
  77.  
  78. functionCall : (IDENTIFIER (DOT IDENTIFIER)* | ARRAY_INDEX) functionInput;
  79.  
  80. forIdentifier : IDENTIFIER (COMMA IDENTIFIER)* | ;
  81.  
  82. forStmt : FOR forIdentifier IN identifierOperand COLON NEWLINE INDENT stmt+ NEWLINE? DEDENT ;
  83.  
  84. SKIP_ : WS -> skip;
  85.  
  86. dataType : STRING | INT ;
  87.  
  88.  
  89. STRING : 'string';
  90. INT : 'int';
  91. TRUE : 'true';
  92. FALSE : 'false';
  93.  
  94. COMMENT : '#'(MULTI_LINE_COMMENT|.)*? NEWLINE->skip;
  95. MULTI_LINE_COMMENT : '#['(MULTI_LINE_COMMENT|.)*?']#' -> skip;
  96. DOCUMENTATION_COMMENTS : '##'.*? -> skip;
  97. NEWLINE : '\r'? '\n' WS?;
  98. fragment WS : ' '+;
  99.  
  100. ARRAY :'array';
  101. INCLUDE : 'include';
  102. INTERFACE : 'interface';
  103. IS : 'is';
  104. ISNOT : 'isnot';
  105. ITERATOR : 'iterator';
  106. LET : 'let';
  107. MACRO : 'macro';
  108. METHOD : 'method';
  109. MIXIN : 'mixin';
  110. MOD : 'mod';
  111. NIL : 'nil';
  112. NOT : 'not';
  113. NOTIN : 'notin';
  114. OBJECT : 'object';
  115. OF : 'of';
  116. OR : 'or';
  117. OUT : 'out';
  118. PROC : 'proc';
  119. PTR : 'ptr';
  120. RAISE : 'raise';
  121. REF : 'ref';
  122. RETURN : 'return';
  123. SHL : 'shl';
  124. SHR : 'shr';
  125. STATIC : 'static';
  126. TEMPLATE : 'template';
  127. TRY : 'try';
  128. TUPLE : 'tuple';
  129. TYPE : 'type';
  130. USING : 'using';
  131. WHEN : 'when';
  132. WHILE : 'while';
  133. XOR : 'xor';
  134. AND : 'and';
  135. VARIABLE : 'var';
  136. ADDR : 'addr';
  137. AS : 'as';
  138. ASM : 'asm';
  139. BIND : 'bind';
  140. BLOCK : 'block';
  141. BREAK : 'break';
  142. CASE : 'case';
  143. CONCEPT : 'concept';
  144. CONST : 'const';
  145. CONTINUE : 'continue';
  146. CONVERTER : 'converter';
  147. DEFER : 'defer';
  148. DISCARD : 'discard';
  149. DISTINCT : 'distinct';
  150. DIV : 'div';
  151. DO : 'do';
  152. ELIF : 'elif';
  153. ELSE : 'else';
  154. END : 'end';
  155. ENUM : 'enum';
  156. EXCEPT : 'except';
  157. EXPORT : 'export';
  158. FINALLY : 'finally';
  159. FOR : 'for';
  160. FROM : 'from';
  161. FUNC : 'func';
  162. IF : 'if';
  163. IMPORT : 'import';
  164. IN : 'in';
  165. YIELD : 'yield';
  166. ASSERT : 'assert';
  167. ECHO : 'echo';
  168. IDENTIFIER : [a-zA-Z]+ [0-9]* ( ['_'] ([a-zA-Z] | [0-9]) )*;
  169. NUMBER_LIT : INT_LIT | INT8_LIT | INT16_LIT | INT32_LIT | INT64_LIT | UINT_LIT | UINT8_LIT | UINT16_LIT | UINT32_LIT | UINT64_LIT | FLOAT_LIT | FLOAT32_LIT | FLOAT64_LIT;
  170. INT_LIT : HEX_LIT | DEC_LIT | OCT_LIT | BIN_LIT;
  171. DEC_LIT : DIGIT+ ( ['_'] DIGIT+ )*;
  172. BIN_LIT : '0' ('b' | 'B' ) BINDIGIT+ ( ['_'] BINDIGIT+ )*;
  173. HEX_LIT : '0' ('x' | 'X' ) HEXDIGIT+ ( ['_'] HEXDIGIT+ )*;
  174. OCT_LIT : '0o' OCTDIGIT+ ( ['_'] OCTDIGIT )*;
  175. INT8_LIT : INT_LIT ('\'') ('i' | 'I') '8';
  176. INT16_LIT : INT_LIT ('\'') ('i' | 'I') '16';
  177. INT32_LIT : INT_LIT ('\'') ('i' | 'I') '32';
  178. INT64_LIT : INT_LIT ('\'') ('i' | 'I') '64';
  179. UINT_LIT : INT_LIT ('\'') ('u' | 'U');
  180. UINT8_LIT : INT_LIT ('\'') ('u' | 'U') '8';
  181. UINT16_LIT : INT_LIT ('\'') ('u' | 'U') '16';
  182. UINT32_LIT : INT_LIT ('\'') ('u' | 'U') '32';
  183. UINT64_LIT : INT_LIT ('\'') ('u' | 'U') '64';
  184. EXPONENT : ('e' | 'E' ) ('+' | '-') DIGIT+ ( ['_'] DIGIT+ )*;
  185. FLOAT_LIT : DIGIT (['_'] DIGIT+)* (('.' DIGIT+ (['_'] DIGIT+)* (EXPONENT)*) |EXPONENT);
  186. FLOAT32_SUFFIX : ('f' | 'F') '32';
  187. FLOAT32_LIT : HEX_LIT '\'' FLOAT32_SUFFIX | (FLOAT_LIT | DEC_LIT | OCT_LIT | BIN_LIT) ('\'') FLOAT32_SUFFIX;
  188. FLOAT64_SUFFIX : ( ('f' | 'F') '64' ) | 'd' | 'D';
  189. FLOAT64_LIT : HEX_LIT '\'' FLOAT64_SUFFIX | (FLOAT_LIT | DEC_LIT | OCT_LIT | BIN_LIT) ('\'') FLOAT64_SUFFIX;
  190. RANGE : '..';
  191. EQUALS : '=';
  192. COMP_OPERATOR : GREATER_THAN | LESS_THAN | ((GREATER_THAN | LESS_THAN)? EQUALS) | EQUALS_OPERATOR;
  193. EQUALS_OPERATOR : EQUALS EQUALS;
  194. ADD_OPERATOR : '+';
  195. MUL_OPERATOR : '*';
  196. DIGIT : [0-9];
  197. LETTER : [a-zA-Z];
  198. HEXDIGIT : DIGIT | [a-fA-F];
  199. OCTDIGIT : [0-7];
  200. BINDIGIT : [0-1];
  201.  
  202. DOLLAR_OPERATOR : '$';
  203. MINUS_OPERATOR : '-';
  204. DIV_OPERATOR : '/';
  205. BITWISE_NOT_OPERATOR : '~';
  206. AND_OPERATOR : '&';
  207. OR_OPERATOR : '|';
  208. LESS_THAN : '<';
  209. GREATER_THAN : '>';
  210. AT_OPERATOR : '@';
  211. MODULUS : '%';
  212. NOT_OPERATOR : '!';
  213. XOR_OPERATOR : '^';
  214. DOT : '.';
  215. COLON : ':';
  216. OPEN_PAREN : '(';
  217. CLOSE_PAREN : ')';
  218. OPEN_BRACE : '{';
  219. CLOSE_BRACE : '}';
  220. OPEN_BRACK : '[';
  221. CLOSE_BRACK : ']';
  222. COMMA : ',';
  223. SEMI_COLON : ';';
  224. STR_LIT : '"'.*?'"';
  225. CHAR_LIT : '\''([a-zA-Z]
  226. |'\\'('r'
  227. |'c'
  228. |'n'
  229. |'l'
  230. |'f'
  231. |'t'
  232. |'v'
  233. |'\\'
  234. |'"'
  235. |'\''
  236. |DIGIT+
  237. |'a'
  238. |'b'
  239. |'e'
  240. |'x 'HEXDIGIT HEXDIGIT))'\'';
  241. TRIPLESTR_LIT : '"""'.*?'"""';
  242. RSTR_LIT : 'r''"'.*?'"';
  243. GENERALIZED_STR_LIT : [a-zA-Z]+ STR_LIT;
  244. GENERALIZED_TRIPLESTR_LIT : [a-zA-Z]+ TRIPLESTR_LIT;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement