Advertisement
YahiaOsama

Untitled

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