Advertisement
YahiaOsama

Untitled

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