Repository navigation
Expand file tree
/
Copy pathgrammar.ebnf
More file actions
78 lines (70 loc) · 3.22 KB
/
Copy pathgrammar.ebnf
File metadata and controls
78 lines (70 loc) · 3.22 KB
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
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
program = { ";" } { statement { ";" } } .
statement = declaration
| assignment
| function_def
| class_def
| if_stmt
| switch_stmt
| for_stmt
| while_stmt
| try_catch
| return_stmt
| import_stmt
| "jooji"
| "soco"
| expression_stmt .
block = { ";" } { statement { ";" } } .
declaration = "door" identifier "=" expression
| [ "madoor" ] type identifier "=" expression
| "madoor" identifier "=" expression .
type = "abn" | "jajab" | "qoraal" | "bool" | "teed" | "walax"
| identifier .
assignment = ( identifier | member | subscript ) "=" expression .
if_stmt = "haddii" "(" expression ")" "{" block "}"
{ ( "kale" | "haddii_kale" ) "(" expression ")" "{" block "}" }
[ ( "kale" | "ugudambeyn" ) "{" block "}" ] .
switch_stmt = "dooro" "(" expression ")" "{"
{ "xaalad" expression "{" block "}" }
[ ( "kale" | "ugudambeyn" ) "{" block "}" ]
"}" .
for_stmt = "kuceli" "(" identifier expression "ilaa" expression
[ "::" expression ] ")" "{" block "}" .
while_stmt = "intay" "(" expression ")" "{" block "}" .
try_catch = ( "tijaabi" | "fasax" ) "{" block "}" "qabo" "(" identifier ")"
"{" block "}" .
return_stmt = "celi" [ expression ] .
function_def = "hawl" identifier function_tail .
function_expr = "hawl" function_tail .
function_tail = "(" [ parameters ] ")" [ ":" type ] "{" block "}" .
parameters = parameter { "," parameter } .
parameter = [ type ] identifier .
class_def = "qaab" identifier [ "dhaxal" identifier ] "{"
{ function_def }
"}" .
new_expr = "cusub" identifier "(" [ arguments ] ")" .
import_stmt = "keen" string .
expression_stmt = expression .
expression = logical .
logical = comparison { ( "&&" | "||" ) comparison } .
comparison = additive { ( "==" | "!=" | ">" | "<" | ">=" | "<=" ) additive } .
additive = multiplicative { ( "+" | "-" ) multiplicative } .
multiplicative = unary { ( "*" | "/" | "%" ) unary } .
unary = [ "!" | "+" | "-" ] postfix .
postfix = primary { member | method_call | subscript } .
primary = literal
| identifier
| call
| list_literal
| object_literal
| new_expr
| function_expr
| "(" expression ")" .
call = identifier "(" [ arguments ] ")" .
method_call = member "(" [ arguments ] ")" .
member = "." ( identifier | "kuceli" ) .
subscript = "[" expression "]" .
arguments = expression { "," expression } .
list_literal = "[" [ arguments ] "]" .
object_literal = "{" [ object_entry { "," object_entry } ] "}" .
object_entry = ( identifier | string ) ":" expression .
literal = number | string | "run" | "been" | "maran" .