Advertisement
YahiaOsama

Untitled

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