-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathlanguage.ebnf
43 lines (28 loc) · 1.58 KB
/
language.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
32
33
34
35
36
37
38
39
40
41
42
43
program = { function_definition } ;
function_definition = "fn" , identifier , "(" , [ parameter_list ] , ")" , block ;
parameter_list = identifier , { "," , identifier } ;
block = "{" , { statement } , "}" ;
statement = variable_declaration
| return_statement
| function_call
| expression_statement ;
variable_declaration = "vr" , identifier , "=" , expression , ";" ;
return_statement = "rt" , expression , ";" ;
function_call = identifier , "(" , [ argument_list ] , ")" ;
argument_list = expression , { "," , expression } ;
expression_statement = expression , ";" ;
expression = term , { ("+" | "-") , term } ;
term = factor , { ("*" | "/" ) , factor } ;
factor = identifier
| number
| "(" , expression , ")"
| function_call ;
identifier = ( letter | "_" ) , { letter | digit | "_" } ;
number = digit , { digit } , [ "." , digit , { digit } ] ;
letter = "a" | "b" | "c" | "d" | "e" | "f" | "g" | "h" | "i" | "j"
| "k" | "l" | "m" | "n" | "o" | "p" | "q" | "r" | "s" | "t"
| "u" | "v" | "w" | "x" | "y" | "z"
| "A" | "B" | "C" | "D" | "E" | "F" | "G" | "H" | "I" | "J"
| "K" | "L" | "M" | "N" | "O" | "P" | "Q" | "R" | "S" | "T"
| "U" | "V" | "W" | "X" | "Y" | "Z" ;
digit = "0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9" ;