Advertisement
Guest User

Untitled

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