Falexom

Untitled

Oct 2nd, 2024
49
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.12 KB | None | 0 0
  1. grammar AwesomeLang;
  2.  
  3. options {
  4. language = C;
  5. backtrack = true;
  6. }
  7.  
  8. BOOL
  9. : 'true' | 'false'
  10. ;
  11.  
  12. IDENTIFIER
  13. : ('a'..'z' | 'A'..'Z' | '_') ('a'..'z' | 'A'..'Z' | '0'..'9' | '_')*
  14. ;
  15.  
  16. STRING
  17. : '"' ('\\' . | ~('\\' | '"'))* '"'
  18. ;
  19.  
  20. CHAR
  21. : '\'' ('\\' . | ~('\\' | '\'')) '\''
  22. ;
  23.  
  24. HEX
  25. : '0' ('x' | 'X') ('0'..'9' | 'a'..'f' | 'A'..'F')+
  26. ;
  27.  
  28. BITS
  29. : '0' ('b' | 'B') ('0' | '1')+
  30. ;
  31.  
  32. DEC
  33. : '0'..'9'+
  34. ;
  35.  
  36.  
  37. list
  38. : (item (',' item)*)?
  39. ;
  40.  
  41. item
  42. : IDENTIFIER ('of' typeRef)?
  43. ;
  44.  
  45. binOp
  46. : '+' | '-' | '*' | '/' | '^' | '%'
  47. | '<' | '<=' | '>' | '>=' | '==' | '!='
  48. | 'and' | 'or'
  49. ;
  50.  
  51. unOp
  52. : '-' | '!'
  53. ;
  54.  
  55. typeRef
  56. : builtin
  57. | IDENTIFIER
  58. | arrayType
  59. ;
  60.  
  61. builtin
  62. : 'bool' | 'byte' | 'int' | 'uint' | 'long' | 'ulong' | 'char' | 'string'
  63. ;
  64.  
  65. arrayType
  66. : (builtin | IDENTIFIER) 'array' '[' DEC ']'
  67. ;
  68.  
  69. funcSignature
  70. : IDENTIFIER '(' list ')' ('of' typeRef)?
  71. ;
  72.  
  73. sourceItem
  74. : funcDef
  75. ;
  76.  
  77. funcDef
  78. : 'def' funcSignature statement* 'end'
  79. ;
  80.  
  81. expr
  82. : primaryExpr (binOp primaryExpr)*
  83. ;
  84.  
  85. primaryExpr
  86. : unOp primaryExpr
  87. | '(' expr ')'
  88. | IDENTIFIER '(' list ')'
  89. | IDENTIFIER
  90. | literal
  91.  
  92. ;
  93.  
  94. sliceExpr
  95. : primaryExpr '[' rangeList ']'
  96. ;
  97.  
  98. literal
  99. : BOOL
  100. | STRING
  101. | CHAR
  102. | HEX
  103. | BITS
  104. | DEC
  105. ;
  106.  
  107. range
  108. : expr ('..' expr)?
  109. ;
  110.  
  111. rangeList
  112. : range (',' range)*
  113. ;
  114.  
  115. statement
  116. : ifStatement
  117. | loopStatement
  118. | repeatStatement
  119. | breakStatement
  120. | expressionStatement
  121. | blockStatement
  122. ;
  123.  
  124. ifStatement
  125. : 'if' expr 'then' statement (elseStatement)?
  126. ;
  127.  
  128. elseStatement
  129. : 'else' statement
  130. ;
  131.  
  132. loopStatement
  133. : ('while' | 'until') expr statement* 'end'
  134. ;
  135.  
  136. repeatStatement
  137. : 'repeat' (statement+)? ('while' | 'until') expr ';'
  138. ;
  139.  
  140. breakStatement
  141. : 'break' ';'
  142. ;
  143.  
  144. expressionStatement
  145. : expr ';'
  146. ;
  147.  
  148. blockStatement
  149. : ('begin' | '{') (statement | sourceItem)* ('end' | '}')
  150. ;
Advertisement
Add Comment
Please, Sign In to add comment