-
Notifications
You must be signed in to change notification settings - Fork 6
Expand file tree
/
Copy pathBNF
More file actions
63 lines (60 loc) · 3.49 KB
/
BNF
File metadata and controls
63 lines (60 loc) · 3.49 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
// program :global_compound_statement
// global_compound_statement:statement_local|func_def|class_def
// class_def: KEY_CLASS variable {INHERIT variable} assignment_statement|class_func_def LBRCS RBRCS
// class_func_def: func variable LPAREN empty|expr(,expr)* RPAREN LBRCS statement_local RBRCS
// func_def: func variable LPAREN empty|expr(,expr)* RPAREN LBRCS statement_local RBRCS
// assignment_statement :variable(,variable)* (ASSIGN|PLUS_EQ|MINUS_EQ|MULTI_EQ|DIV_EQ|MOD_EQ) expr(,expr)*
// statement_local: expr|empty|break_statement|continue_statement|return_statement|if_statement|foreach_statement|assignment_statement|for_statement
// foreach_statement: KEY_FOREACH variable COMMA variable ASSIGN expr LBRCS statement_local RBRCS
// break_statement: KEY_BREAK
// continue_statement: KEY_CONTINUE
// if_statement: KEY_IF {assignment_statement SEMICOLON} expr LBRCS statement_local RBRCS (KEY_ELIF {assignment_statement SEMICOLON} expr LBRCS statement_local RBRCS)* {KEY_ELSE {assignment_statement SEMICOLON} expr LBRCS statement_local RBRCS}
// return_statement: KEY_RETURN expr(,expr)|empty
// for_statement: KEY_FOR (expr)|(assignment_statement|empty SEMICOLON expr|empty SEMICOLON expr|empty) LBRCS statement_local RBRCS
// expr :tuple(COMMA tuple)*
// tuple :or(OR or)*
// or :and(AND and)*
// and :compare((GREAT|LESS|GEQ|LEQ|EQUAL|NOT_EQ)compare)*
// compare :{NOT}not
// not :{VIRGULE}bitor
// bitor :xor (XOR xor)*
// xor :bitand(REF bitand)*
// bitand :shift (LSHIFT|RSHIFT shift)*
// shift :term((PLUS|MINUS)term)*
// term :negpos((MUL|DIV|MOD)negpos)*
// negpos :{PLUS|MINUS}factor
// factor :(REVERSE)reverse
// reverse :selfaddsub(PLUS_PLUS|MINUS_MINUS)
// selfaddsub :attribute(QUOTE attribute)*
// attribute :index (LBRK expr RBRK)*
// attribute :index(LBRK expr:expr RBRK)*
// index :func_call(LPRNTH empty|tuple(,tuple)* RPRNTH)*
// func_call :{LBRK} list (COMMA list)* {LBRK}
// list :{LBRCS} tuple:tuple (COMMA tuple:tuple )* {LBRCS}|dict
// dict :variable|INTEGER|STRING|DOUBLE|BOOLEAN|NULL|LPRNTH expr RPRNTH
// variable :ID
// empty :
表达式 expr
, 元组 tuple
|| 布尔“或” or
&& 布尔“与” and
<,<=,>,>=,!=,== 比较 compare
! 布尔“非” not
| 按位或 bitor
^ 按位异或 xor
& 按位与 bitand
<<,>> 移位 shift
+,- 加法与减法 term
*,/,% 乘法、除法与取余 front_op
-------------------------前置运算符-------------------------
+x,-x 正负号 back_op
~x 按位翻转 back_op
=========================前置运算符=========================
x--,x++ 自增,自减 base_tp
x.attribute 属性参考 base_tp
x[index] 下标 base_tp
x[index:index] 寻址段 base_tp
f(arguments...) 函数调用 base_tp
[expression,...] 列表显示 list
{key:datum,...} 字典显示 dict
(variable) 绑定 bind