-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathGRAMMAR_2NF.txt
More file actions
57 lines (57 loc) · 2.42 KB
/
GRAMMAR_2NF.txt
File metadata and controls
57 lines (57 loc) · 2.42 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
//<程序> -> 《头文件》《程序》| 《using》《程序》|《变量常量声明》《程序》|《函数》《程序》|《类/结构体》《程序》|《程序1》
//头文件、类与结构体这里不实现
S -> US | IS | FS | P
//<程序1> -> 《头文件》| 《using》|《变量常量声明》|《函数》|《类/结构体》
P -> U | I | F | C | Y
//<程序2> -> 《变量常量声明》|《函数》
C -> I | F
//《头文件》-> #(include)《头文件名》
//H -> #aN
//《头文件名》 -> "《名》" | <《名》>
//N -> "j" | <j>
//《using》 -> (using)(namespace) 《命名空间》;| (using)《标识符》=《类型》;
U -> uls; | ut=g;
//《命名空间名》 如std,用s表示
//字母不够,不给字母了
//标识符,用t表示
//B -> t
//《类型》 -> (int|bool|complex|char|double|float|void)
//T -> g
//int i = 0;
//const int i;
//《变量常量声明》->(const)《变量常量类型说明1》|《变量常量类型说明1》
I -> cJ | J
//《变量常量类型说明1》->《类型》《标识符》;|《类型》《标识符》=《标识符/常量》;|《类型》《标识符》=《运算结果》;
J -> gt; | gt=t; | gt=d; | gt=O;| t=d;
//《运算结果》->《运算参数》【+-*/】《运算参数》
O -> RQR
//运算符
Q -> m | p
//运算参数
R -> d | t
//《运算2》->《identifer》【+= -= *= /=】《Identifier/常量》
V -> tWR;
//W -> += | -= | *= | /=
W -> y
//《函数》->《返回值》《函数名(identifier)》(《类型声明》){《程序》}????????
F -> gt()Y | gt();
//for(;;){}
//《for》->for(《语句》;《语句》;《语句》)《单条语句》|{《多条语句》}
K -> n(G;G;G)Y | n(G;G;G)I | n(G;G;G);
//《while》->while(《单条语句》){《多条语句》}
L -> w(G)Y | w(G)I | w(G);
//《do while》->do{<多条语句>}while(《单条语句》);
D -> fYw(G); | fIw(G);
//《空语句》-> ;
//《单语句不带;》
G -> gt=d | gt=t | tWR | trR
//《if》->if(<语句>){}else if{}else{}
M -> i(G)YeMeY|i(G)YeM|i(G)Y|i(G)IeMeI|i(G)IeM|i(G)I | i(G)YeY | i(G)IeI | i(G);
//《跳转语句》-> break;|continue;|return|return <identifier/Constant>
X -> o; | q; | qR;
//《代码块》-> {《语句》}
Y -> {A} | {}
//《多语句》 -> 《for》 | 《while》 | 《do while》 | 《》
//注意:for、while等应属单语句,但是此处作为多语句来处理。
A -> KA | LA | DA | XA | YA |IA | CA | MA | VA | T
T -> K | L | D | X | Y | I | C | M | V