Advertisement
Guest User

Untitled

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