-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathEBNF.ebnf
31 lines (31 loc) · 2.52 KB
/
EBNF.ebnf
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
Program = Statement* .
Statement = ((?= "var" <ident>) VariableDefinition? (";" | "\n")?) | ((?= <ident> ("." <ident>)* "=") Assignment? (";" | "\n")?) | ((?= "extern" "func") ExternalFunctionDefinition? (";" | "\n")?) | ((?= "private"? "static"? "func") FunctionDefinition?) | ((?= "class") ClassDefinition?) | ((?= "if") If?) | ((?= "for") For?) | ((?= "while") While?) | ((?= "return") Return?) | ((?= "private"? <ident> ":" <ident>) FieldDefinition?) | ((?= "import") Import?) | ((?= "from" <string> "import" "{") FromImportMultiple?) | ((?= "from" <string> "import") FromImport?) | ("export" Statement? (";" | "\n")?) | ("break" (";" | "\n")?) | ("continue" (";" | "\n")?) | Expression .
VariableDefinition = "var" <ident> ":" ("*"? <ident>) ("=" Expression)? .
Expression = Comparison OpExpression* .
Comparison = Term OpComparison* .
Term = Factor OpTerm* .
Factor = Value | ((?= "new") ClassInitializer) | ("(" Expression ")") | ((?= <ident> "(") FunctionCall) | ((?= <ident> ("." <ident>)+ "(") ClassMethod) | Identifier .
Value = <float> | <int> | ("true" | "false") | <string> | (<int> ("h" | "m" | "s" | "ms" | "us" | "ns")) .
ClassInitializer = "new" <ident> "(" ArgumentList ")" ";" .
ArgumentList = (Expression ("," Expression)*)? .
FunctionCall = <ident> "(" ArgumentList ")" ";" .
ClassMethod = Identifier "(" ArgumentList ")" ";" .
Identifier = <ident> ("." Identifier)* .
OpTerm = ("*" | "/" | "%") Factor .
OpComparison = (("=" "=") | ("<" "=") | "<" | (">" "=") | ">" | ("!" "=")) Term .
OpExpression = ("+" | "-") Comparison .
Assignment = Identifier "=" Expression .
ExternalFunctionDefinition = "extern" "func" <ident> "(" (ArgumentDefinition ("," ArgumentDefinition)*)? ")" (":" ("*"? <ident>))? .
ArgumentDefinition = <ident> ":" ("*"? <ident>) .
FunctionDefinition = "private"? "static"? "func" <ident> "(" (ArgumentDefinition ("," ArgumentDefinition)*)? ")" (":" <ident>)? "{" Statement* "}" .
ClassDefinition = "class" <ident> "{" Statement* "}" .
If = "if" "(" Expression ")" "{" Statement* "}" ("else" "if" ElseIf)* ("else" "{" Statement* "}")? .
ElseIf = "else" "if" "(" Expression ")" "{" Statement* "}" .
For = "for" "(" Statement Expression ";" Statement ")" "{" Statement* "}" .
While = "while" "(" Expression ")" "{" Statement* "}" .
Return = "return" Expression ";" .
FieldDefinition = "private"? <ident> ":" <ident> ";" .
Import = "import" <string> ";" .
FromImportMultiple = "from" <string> "import" "{" Symbol ("," Symbol)* "}" ";" .
Symbol = <string> ("as" <string>)? .
FromImport = "from" <string> "import" <string> ("as" <string>)? ";" .