Skip to content

Instantly share code, notes, and snippets.

@koteyur
Last active March 17, 2020 11:36
Show Gist options
  • Save koteyur/cc897244ea693eb7b189e337ea7d03ca to your computer and use it in GitHub Desktop.
Save koteyur/cc897244ea693eb7b189e337ea7d03ca to your computer and use it in GitHub Desktop.
Fix for loop
grammar EIScript;
script
: block* ;
block
: globalVars
| declareScript
| scriptBlock
| worldScript
;
globalVars
: K_GLOBALVARS varsBlock ;
declareScript
: K_DECLARESCRIPT IDENTIFIER varsBlock ;
scriptBlock
: K_SCRIPT IDENTIFIER '(' ifBlock+ ')' ;
worldScript
: K_WORLDSCRIPT statements ;
ifBlock
: K_IF conditions K_THEN statements ;
conditions
: '(' functionCall* ')' ;
statements
: '(' statement* ')' ;
statement
: functionCall
| IDENTIFIER '=' expression
| (K_FOR | K_FORIF) paramList statements
;
functionCall
: IDENTIFIER paramList ;
expression
: IDENTIFIER
| NUMBER
| STRING
| functionCall
;
paramList
: '(' (expression (',' expression)*)? ')' ;
varsBlock
: '(' (varDecl (',' varDecl)*)? ')' ;
varDecl
: IDENTIFIER ':' typeName ;
typeName
: K_FLOAT | K_GROUP | K_OBJECT | K_STRING ;
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]* ;
NUMBER
: '-'? DIGIT+ ('.' DIGIT+)? ;
STRING
: '"' ~[\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