Advertisement
YahiaOsama

Untitled

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