Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- grammar AwesomeLang;
- options {
- language = C;
- output=AST;
- backtrack=true;
- }
- builtin :
- Builtin
- ;
- binOp
- : '+' | '-' | '*' | '/' | '^' | '%'
- | '<' | '<=' | '>' | '>=' | '==' | '!='
- | '&&' | '||'
- ;
- typeRef
- : builtin
- | custom
- | arrayType
- ;
- custom: IDENTIFIER;
- source
- : sourceItem*
- ;
- arrayType
- : (builtin | IDENTIFIER) 'array' '[' DEC ']'
- ;
- funcSignature
- : IDENTIFIER '(' list ')' ('of' typeRef)?
- ;
- funcDef
- : 'def' funcSignature statement* 'end'
- ;
- sourceItem
- : funcDef
- ;
- expr
- : primaryExpr (binOp primaryExpr)*
- ;
- primaryExpr
- : UNOP primaryExpr
- | '(' expr ')'
- | IDENTIFIER '(' list ')'
- | IDENTIFIER
- | LITERAL
- ;
- sliceExpr
- : primaryExpr '[' rangeList ']'
- ;
- callExpr
- : IDENTIFIER '(' list ')'
- ;
- list
- : (item (',' item)*)?
- ;
- item
- : IDENTIFIER ('of' typeRef)?
- ;
- range
- : expr ('..' expr)?
- ;
- rangeList
- : range (',' range)*
- ;
- statement
- : ifStatement
- | loopStatement
- | repeatStatement
- | breakStatement
- | expressionStatement
- | blockStatement
- ;
- ifStatement
- : 'if' expr 'then' statement (elseStatement)?
- ;
- elseStatement
- : 'else' statement
- ;
- loopStatement
- : ('while' | 'until') expr statement* 'end'
- ;
- repeatStatement
- : 'repeat' (statement+)? ('while' | 'until') expr ';'
- ;
- breakStatement
- : 'break' ';'
- ;
- expressionStatement
- : expr ';'
- ;
- blockStatement
- : ('begin' | '{') (statement | sourceItem)* ('end' | '}')
- ;
- Builtin : ('bool'|'byte'|'int'|'uint'|'ulong'|'char'|'string')
- ;
- BOOL: ('true'|'false');
- IDENTIFIER : ('a'..'z'|'A'..'Z'|'_') ('a'..'z'|'A'..'Z'|'0'..'9'|'_')*
- ;
- WS : ( ' '
- | '\t'
- | '\r'
- | '\n'
- ) {$channel=HIDDEN;}
- ;
- CHAR: '\'' ( ESC_SEQ | ~('\''|'\\') ) '\''
- ;
- fragment
- HEX_DIGIT : ('0'..'9'|'a'..'f'|'A'..'F') ;
- fragment
- ESC_SEQ
- : '\\' ('b'|'t'|'n'|'f'|'r'|'\"'|'\''|'\\')
- | UNICODE_ESC
- | OCTAL_ESC
- ;
- fragment
- OCTAL_ESC
- : '\\' ('0'..'3') ('0'..'7') ('0'..'7')
- | '\\' ('0'..'7') ('0'..'7')
- | '\\' ('0'..'7')
- ;
- fragment
- UNICODE_ESC
- : '\\' 'u' HEX_DIGIT HEX_DIGIT HEX_DIGIT HEX_DIGIT
- ;
- fragment
- HEX : '0x' ('0'..'9'|'a'..'f'|'A'..'F')+;
- fragment
- BITS : '0b' ('0'|'1')+;
- BINOP
- : '+'
- | '-'
- | '*'
- | '/'
- | '%'
- | '=='
- | '!='
- | '<'
- | '>'
- | '<='
- | '>='
- | '&&'
- | '||'
- | '&'
- | '|'
- | '^'
- | '<<'
- | '>>'
- | ':='
- ;
- UNOP
- : '-' | '!'
- ;
- DEC : '0'..'9'+
- ;
- fragment
- STRING
- : '"' ( ESC_SEQ | ~('\\'|'"') )* '"'
- ;
- LITERAL
- : BOOL
- | STRING
- | CHAR
- | HEX
- | BITS
- | DEC
- ;
Advertisement
Add Comment
Please, Sign In to add comment