-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathproductions_with_explanation.txt
103 lines (81 loc) · 2.6 KB
/
productions_with_explanation.txt
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
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
// 程序开始
P ::= N declare_list
// 外部声明(函数定义和全局符号)
declare_list ::= declare declare_list
declare_list ::= declare
// 函数定义
declare ::= int ID M A function_declare
declare ::= void ID M A function_declare
// 变量定义
declare ::= int ID var_declare
declare ::= int ID array_declare_list
// 数组声明
array_declare_list ::= array_declare array_declare_list
array_declare_list ::= array_declare ;
array_declare ::= [ NUM ]
// 嵌套层级+1
A ::=
// 变量声明(无特殊处理)
var_declare ::= ;
// 函数定义
function_declare ::= ( parameter ) sentence_block
// 形参定义
parameter ::= parameter_list
parameter ::= void
parameter_list ::= param
parameter_list ::= param , parameter_list
param ::= int ID
// 复合语句
sentence_block ::= { inner_declare sentence_list }
// 局部变量
inner_declare ::=
inner_declare ::= inner_var_declare ; inner_declare
inner_var_declare ::= int ID
// 语句
sentence_list ::= sentence M sentence_list
sentence_list ::= sentence
// if,while,return语句
sentence ::= if_sentence
sentence ::= while_sentence
sentence ::= return_sentence
return_sentence ::= return ;
return_sentence ::= return expression ;
// 赋值语句
sentence ::= assign_sentence
assign_sentence ::= ID = expression ;
assign_sentence ::= array = expression ;
while_sentence ::= while M ( expression ) A sentence_block
if_sentence ::= if ( expression ) A sentence_block
if_sentence ::= if ( expression ) A sentence_block N else M A sentence_block
// 回填
N ::=
M ::=
// 通过规则定义优先级
expression ::= add_expression
expression ::= add_expression > add_expression
expression ::= add_expression < add_expression
expression ::= add_expression == add_expression
expression ::= add_expression >= add_expression
expression ::= add_expression <= add_expression
expression ::= add_expression != add_expression
// add_expression:简单变量,简单常量,加减式结果
add_expression ::= item
add_expression ::= item + add_expression
add_expression ::= item - add_expression
// item:简单变量,简单常量,乘除式结果
item ::= factor
item ::= factor * item
item ::= factor / item
// factor:简单变量,简单常量,括号表达式,函数调用
factor ::= NUM
factor ::= ( expression )
factor ::= ID ( argument_list )
factor ::= ID
factor ::= array
array ::= ID index_list
index_list ::= [ expression ] index_list
index_list ::= [ expression ]
// 实参
argument_list ::=
argument_list ::= expression
argument_list ::= expression , argument_list