Initial commit
This commit is contained in:
124
src/main/antlr4/de/hsrm/compiler/Klang/Klang.g4
Normal file
124
src/main/antlr4/de/hsrm/compiler/Klang/Klang.g4
Normal file
@@ -0,0 +1,124 @@
|
||||
grammar Klang;
|
||||
|
||||
parse
|
||||
: block EOF
|
||||
;
|
||||
|
||||
block
|
||||
: stat*
|
||||
;
|
||||
|
||||
stat
|
||||
: assignment
|
||||
| if_stat
|
||||
| while_stat
|
||||
| log
|
||||
| OTHER {System.err.println("unknown char: " + $OTHER.text);}
|
||||
;
|
||||
|
||||
assignment
|
||||
: ID ASSIGN expr SCOL
|
||||
;
|
||||
|
||||
if_stat
|
||||
: IF condition_block (ELSE IF condition_block)* (ELSE stat_block)?
|
||||
;
|
||||
|
||||
condition_block
|
||||
: expr stat_block
|
||||
;
|
||||
|
||||
stat_block
|
||||
: OBRACE block CBRACE
|
||||
| stat
|
||||
;
|
||||
|
||||
while_stat
|
||||
: WHILE expr stat_block
|
||||
;
|
||||
|
||||
log
|
||||
: LOG expr SCOL
|
||||
;
|
||||
|
||||
expr
|
||||
: expr POW<assoc=right> expr #powExpr
|
||||
| MINUS expr #unaryMinusExpr
|
||||
| NOT expr #notExpr
|
||||
| expr op=(MULT | DIV | MOD) expr #multiplicationExpr
|
||||
| expr op=(PLUS | MINUS) expr #additiveExpr
|
||||
| expr op=(LTEQ | GTEQ | LT | GT) expr #relationalExpr
|
||||
| expr op=(EQ | NEQ) expr #equalityExpr
|
||||
| expr AND expr #andExpr
|
||||
| expr OR expr #orExpr
|
||||
| atom #atomExpr
|
||||
;
|
||||
|
||||
atom
|
||||
: OPAR expr CPAR #parExpr
|
||||
| (INT | FLOAT) #numberAtom
|
||||
| (TRUE | FALSE) #booleanAtom
|
||||
| ID #idAtom
|
||||
| STRING #stringAtom
|
||||
| NIL #nilAtom
|
||||
;
|
||||
|
||||
OR : '||';
|
||||
AND : '&&';
|
||||
EQ : '==';
|
||||
NEQ : '!=';
|
||||
GT : '>';
|
||||
LT : '<';
|
||||
GTEQ : '>=';
|
||||
LTEQ : '<=';
|
||||
PLUS : '+';
|
||||
MINUS : '-';
|
||||
MULT : '*';
|
||||
DIV : '/';
|
||||
MOD : '%';
|
||||
POW : '^';
|
||||
NOT : '!';
|
||||
|
||||
SCOL : ';';
|
||||
ASSIGN : '=';
|
||||
OPAR : '(';
|
||||
CPAR : ')';
|
||||
OBRACE : '{';
|
||||
CBRACE : '}';
|
||||
|
||||
TRUE : 'true';
|
||||
FALSE : 'false';
|
||||
NIL : 'nil';
|
||||
IF : 'if';
|
||||
ELSE : 'else';
|
||||
WHILE : 'while';
|
||||
LOG : 'log';
|
||||
|
||||
ID
|
||||
: [a-zA-Z_] [a-zA-Z_0-9]*
|
||||
;
|
||||
|
||||
INT
|
||||
: [0-9]+
|
||||
;
|
||||
|
||||
FLOAT
|
||||
: [0-9]+ '.' [0-9]*
|
||||
| '.' [0-9]+
|
||||
;
|
||||
|
||||
STRING
|
||||
: '"' (~["\r\n] | '""')* '"'
|
||||
;
|
||||
|
||||
COMMENT
|
||||
: '#' ~[\r\n]* -> skip
|
||||
;
|
||||
|
||||
SPACE
|
||||
: [ \t\r\n] -> skip
|
||||
;
|
||||
|
||||
OTHER
|
||||
: .
|
||||
;
|
||||
Reference in New Issue
Block a user