Skip to content

Instantly share code, notes, and snippets.

@goyox86
Created January 15, 2016 15:12
Show Gist options
  • Save goyox86/e991fb824692608c6218 to your computer and use it in GitHub Desktop.
Save goyox86/e991fb824692608c6218 to your computer and use it in GitHub Desktop.
token IF ELSE
token DEF
token CLASS
token NEWLINE
token NUMBER
token STRING
token TRUE FALSE NIL
token IDENTIFIER
token CONSTANT
Root:
| Expressions
;
Expressions:
Expression
| Expressions Terminator Expression
| Expressions Terminator
| Terminator
;
Expression:
Literal
| Call
| Operator
| Constant
| Assign
| Def
| Class
| If
| '(' Expression ')'
;
Terminator:
NEWLINE
| ";"
;
Literal:
NUMBER
| STRING
| TRUE
| FALSE
| NIL
;
Call:
IDENTIFIER
| IDENTIFIER "(" ArgList ")"
| Expression "." IDENTIFIER
| Expression "."
IDENTIFIER "(" ArgList ")"
;
ArgList:
// nothing
| Expression
| ArgList "," Expression
Operator:
Expression '||' Expression
| Expression '&&' Expression
| Expression '==' Expression
| Expression '!=' Expression
| Expression '>' Expression
| Expression '>=' Expression
| Expression '<' Expression
| Expression '<=' Expression
| Expression '+' Expression
| Expression '-' Expression
| Expression '*' Expression
| Expression '/' Expression
;
Constant:
CONSTANT
;
Assign:
IDENTIFIER "=" Expression
| CONSTANT "=" Expression
;
Def:
DEF IDENTIFIER Block
| DEF IDENTIFIER"(" ParamList ")" Block
;
ParamList:
// nothing
| IDENTIFIER
| ParamList "," IDENTIFIER
;
Class:
CLASS CONSTANT Block
;
If:
IF Expression Block
;
Block:
INDENT Expressions DEDENT
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment