-
Notifications
You must be signed in to change notification settings - Fork 0
/
grammar.bnf
76 lines (48 loc) · 2.15 KB
/
grammar.bnf
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
PROGRAM ::= [{ (DEF_FUNCTION | DEF_STRUCT | DEF_CLASS) }] "main" BLOCK
DEF_FUNCTION ::= "function" IDENTIFIER "(" IDENTIFIERS_LIST ")" BLOCK
DEF_STRUCT ::= "struct" IDENTIFIER "{" IDENTIFIERS_LIST "}"
DEF_CLASS ::= "class" IDENTIFIER "{"
{ (DEF_VARIABLES | DEF_METHOD | DEF_CONSTRUCTOR) }
"}"
DEF_METHOD ::= "method" IDENTIFIER "(" IDENTIFIERS_LIST ")" BLOCK
DEF_CONSTRUCTOR ::= "constructor" "(" IDENTIFIERS_LIST ")" BLOCK
OPERATOR ::= DEF_VARIABLES |
CONDITIONAL_OPERATOR
LOOP_FOR |
EXPRESSION_OPERATOR |
BLOCK |
RETURN_OPERATOR |
EMPTY_OPERATOR
IDENTIFIERS_LIST ::= IDENTIFIER { "," IDENTIFIER }
DEF_VARIABLES ::= "var" DEF_SINGLE_VARIABLE { "," DEF_SINGLE_VARIABLE } ";"
CONDITIONAL_OPERATOR ::= "if" "(" EXPRESSION ")" OPERATOR ["else" OPERATOR]
LOOP_FOR ::= "for" "(" [EXPRESSION] ";" [EXPRESSION] ";" [EXPRESSION] ")" OPERATOR
DEF_SINGLE_VARIABLE ::= IDENTIFIER ["=" EXPRESSION]
EXPRESSION_OPERATOR ::= EXPRESSION ";"
BLOCK ::= "{" OPERATOR { OPERATOR } "}"
RETURN_OPERATOR ::= "return" EXPRESSION ";"
EMPTY_OPERATOR ::= ";"
EXPRESSION ::= CONJUNCTION { "||" CONJUNCTION }
CONJUNCTION ::= BIT_OR { "&&" BIT_OR }
BIT_OR ::= BIT_XOR { "|" BIT_XOR }
BIT_XOR ::= BIT_AND { "^" BIT_AND }
BIT_AND ::= EQUALITY { "&" EQUALITY }
EQUALITY ::= COMPARISON { ("==" | "!=") COMPARISON }
COMPARISON ::= BIT_SHIFTING { (">" | "<" | ">="| "<=") BIT_SHIFTING }
BIT_SHIFTING ::= ADDITION { (">>" | "<<") ADDITION }
ADDITION ::= MULTIPLICATION { ("+" | "-") MULTIPLICATION }
MULTIPLICATION ::= UNARY { "*" | "/" | "%" UNARY }
UNARY ::= [( "~" | "!")] VALUE
VALUE ::= CONST |
"[" [EXPRESSIONS_LIST] "]" [CHAIN] | //new array creation
"new" IDENTIFIER "(" EXPRESSIONS_LIST ")" | //new structure creation
"(" EXPRESSION ")" [CHAIN] |
BLOCK |
IDENTIFIER ("=" EXPRESSION | [CHAIN])
EXPRESSIONS_LIST ::= EXPRESSION { "," EXPRESSION }
CHAIN ::=
'\' "(" IDENTIFIERS_LIST ")" EXPRESSION [CHAIN] | //lambda creation
"(" EXPRESSIONS_LIST ")" [CHAIN] | // function call
"." IDENTIFIER "(" [EXPRESSIONS_LIST] ")" [CHAIN] | //method call
"[" EXPRESSION "]" ("=" EXPRESSION | [CHAIN]) // array indexing
"->" IDENTIFIER ("=" EXPRESSION | [CHAIN]) //property