Falexom

Untitled

Oct 9th, 2024
31
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.97 KB | None | 0 0
  1.  
  2. grammar AwesomeLang;
  3.  
  4. options {
  5. language = C;
  6. output=AST;
  7. backtrack=true;
  8. }
  9.  
  10. builtin :
  11. Builtin
  12. ;
  13.  
  14. binOp
  15. : '+' | '-' | '*' | '/' | '^' | '%'
  16. | '<' | '<=' | '>' | '>=' | '==' | '!='
  17. | '&&' | '||'
  18. ;
  19.  
  20.  
  21. typeRef
  22. : builtin
  23. | custom
  24. | arrayType
  25. ;
  26.  
  27. custom: IDENTIFIER;
  28.  
  29. source
  30. : sourceItem*
  31. ;
  32.  
  33. arrayType
  34. : (builtin | IDENTIFIER) 'array' '[' DEC ']'
  35. ;
  36.  
  37. funcSignature
  38. : IDENTIFIER '(' list ')' ('of' typeRef)?
  39. ;
  40.  
  41. funcDef
  42. : 'def' funcSignature statement* 'end'
  43. ;
  44.  
  45. sourceItem
  46. : funcDef
  47. ;
  48.  
  49. expr
  50. : primaryExpr (binOp primaryExpr)*
  51. ;
  52.  
  53. primaryExpr
  54. : UNOP primaryExpr
  55. | '(' expr ')'
  56. | IDENTIFIER '(' list ')'
  57. | IDENTIFIER
  58. | LITERAL
  59.  
  60. ;
  61.  
  62. sliceExpr
  63. : primaryExpr '[' rangeList ']'
  64. ;
  65.  
  66. callExpr
  67. : IDENTIFIER '(' list ')'
  68. ;
  69. list
  70. : (item (',' item)*)?
  71. ;
  72.  
  73. item
  74. : IDENTIFIER ('of' typeRef)?
  75. ;
  76.  
  77. range
  78. : expr ('..' expr)?
  79. ;
  80.  
  81. rangeList
  82. : range (',' range)*
  83. ;
  84.  
  85. statement
  86. : ifStatement
  87. | loopStatement
  88. | repeatStatement
  89. | breakStatement
  90. | expressionStatement
  91. | blockStatement
  92. ;
  93.  
  94. ifStatement
  95. : 'if' expr 'then' statement (elseStatement)?
  96. ;
  97.  
  98. elseStatement
  99. : 'else' statement
  100. ;
  101.  
  102. loopStatement
  103. : ('while' | 'until') expr statement* 'end'
  104. ;
  105.  
  106. repeatStatement
  107. : 'repeat' (statement+)? ('while' | 'until') expr ';'
  108. ;
  109.  
  110. breakStatement
  111. : 'break' ';'
  112. ;
  113.  
  114. expressionStatement
  115. : expr ';'
  116. ;
  117.  
  118. blockStatement
  119. : ('begin' | '{') (statement | sourceItem)* ('end' | '}')
  120. ;
  121.  
  122. Builtin : ('bool'|'byte'|'int'|'uint'|'ulong'|'char'|'string')
  123. ;
  124.  
  125.  
  126. BOOL: ('true'|'false');
  127.  
  128. IDENTIFIER : ('a'..'z'|'A'..'Z'|'_') ('a'..'z'|'A'..'Z'|'0'..'9'|'_')*
  129. ;
  130.  
  131. WS : ( ' '
  132. | '\t'
  133. | '\r'
  134. | '\n'
  135. ) {$channel=HIDDEN;}
  136. ;
  137.  
  138. CHAR: '\'' ( ESC_SEQ | ~('\''|'\\') ) '\''
  139. ;
  140.  
  141. fragment
  142. HEX_DIGIT : ('0'..'9'|'a'..'f'|'A'..'F') ;
  143.  
  144. fragment
  145. ESC_SEQ
  146. : '\\' ('b'|'t'|'n'|'f'|'r'|'\"'|'\''|'\\')
  147. | UNICODE_ESC
  148. | OCTAL_ESC
  149. ;
  150.  
  151. fragment
  152. OCTAL_ESC
  153. : '\\' ('0'..'3') ('0'..'7') ('0'..'7')
  154. | '\\' ('0'..'7') ('0'..'7')
  155. | '\\' ('0'..'7')
  156. ;
  157.  
  158. fragment
  159. UNICODE_ESC
  160. : '\\' 'u' HEX_DIGIT HEX_DIGIT HEX_DIGIT HEX_DIGIT
  161. ;
  162. fragment
  163. HEX : '0x' ('0'..'9'|'a'..'f'|'A'..'F')+;
  164.  
  165. fragment
  166. BITS : '0b' ('0'|'1')+;
  167.  
  168.  
  169. BINOP
  170. : '+'
  171. | '-'
  172. | '*'
  173. | '/'
  174. | '%'
  175. | '=='
  176. | '!='
  177. | '<'
  178. | '>'
  179. | '<='
  180. | '>='
  181. | '&&'
  182. | '||'
  183. | '&'
  184. | '|'
  185. | '^'
  186. | '<<'
  187. | '>>'
  188. | ':='
  189. ;
  190.  
  191.  
  192. UNOP
  193. : '-' | '!'
  194. ;
  195.  
  196. DEC : '0'..'9'+
  197. ;
  198.  
  199. fragment
  200. STRING
  201. : '"' ( ESC_SEQ | ~('\\'|'"') )* '"'
  202. ;
  203.  
  204. LITERAL
  205. : BOOL
  206. | STRING
  207. | CHAR
  208. | HEX
  209. | BITS
  210. | DEC
  211. ;
Advertisement
Add Comment
Please, Sign In to add comment