Skip to content

Instantly share code, notes, and snippets.

@demothorg demothorg/EIScript.g4
Last active Sep 24, 2018

Embed
What would you like to do?
Fix for loop
grammar EIScript;
script
: block*
;
block
: globalVars
| declareScript
| scriptBlock
| worldScript
;
globalVars
: K_GLOBALVARS vars
;
declareScript
: K_DECLARESCRIPT IDENTIFIER vars
;
scriptBlock
: K_SCRIPT IDENTIFIER PAR_OPEN ifBlock+ PAR_CLOSE
;
worldScript
: K_WORLDSCRIPT statements
;
ifBlock
: K_IF conditions K_THEN statements
;
conditions
: PAR_OPEN functionCall* PAR_CLOSE
;
statements
: PAR_OPEN statement* PAR_CLOSE
;
statement
: functionCall
| IDENTIFIER ASSIGN expression
| (K_FOR | K_FORIF) paramList statements
;
functionCall
: IDENTIFIER paramList
;
expression
: IDENTIFIER
| NUMERIC_LITERAL
| STRING_LITERAL
| functionCall
;
paramList
: PAR_OPEN ( expression ( COMMA expression )* )? PAR_CLOSE
;
vars
: PAR_OPEN ( var ( COMMA var )* )? PAR_CLOSE
;
var
: IDENTIFIER COLON type
;
type
: K_FLOAT
| K_GROUP
| K_OBJECT
| K_STRING
;
ASSIGN : '=' ;
PAR_OPEN : '(' ;
PAR_CLOSE : ')' ;
COMMA : ',' ;
COLON : ':' ;
K_GLOBALVARS : G L O B A L V A R S ;
K_DECLARESCRIPT : D E C L A R E S C R I P T ;
K_SCRIPT : S C R I P T ;
K_WORLDSCRIPT : W O R L D S C R I P T ;
K_IF : I F ;
K_THEN : T H E N ;
K_FLOAT : F L O A T ;
K_GROUP : G R O U P ;
K_OBJECT : O B J E C T ;
K_STRING : S T R I N G ;
K_FOR : F O R ;
K_FORIF : F O R I F ;
IDENTIFIER
: [#_a-zA-Z] [#_\-a-zA-Z0-9]*
;
NUMERIC_LITERAL
: '-'? DIGIT+ ( '.' DIGIT+ )?
;
STRING_LITERAL
: '"' ~[\r\n]*? '"'
;
SINGLE_LINE_COMMENT
: '//' ~[\r\n]* -> channel(HIDDEN)
;
MULTILINE_COMMENT
: '/*' .*? ( '*/' | EOF ) -> channel(HIDDEN)
;
WHITESPACE
: [ \t\r\n] -> skip
;
fragment DIGIT : [0-9];
fragment A : [aA];
fragment B : [bB];
fragment C : [cC];
fragment D : [dD];
fragment E : [eE];
fragment F : [fF];
fragment G : [gG];
fragment H : [hH];
fragment I : [iI];
fragment J : [jJ];
fragment K : [kK];
fragment L : [lL];
fragment M : [mM];
fragment N : [nN];
fragment O : [oO];
fragment P : [pP];
fragment Q : [qQ];
fragment R : [rR];
fragment S : [sS];
fragment T : [tT];
fragment U : [uU];
fragment V : [vV];
fragment W : [wW];
fragment X : [xX];
fragment Y : [yY];
fragment Z : [zZ];
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
You can’t perform that action at this time.