
实验五 LR 分析器
一、实验目的与任务
设计一个
LR
分析器,实现对表达式语言的分析,加深对
LR
语法分析方法
的基本思想的理解,掌握
LR
分析器设计与实现的基本方法。
二、实验要求
建立文法及其
LR
分析表表示的数据结构,设计并实现一个
LALR(1)
的分析
器,对源程序经词法分析后生成的二元式代码流进行分析,如果输入串是文
法定义的句子则输出
“
是
”
,否则输出
“
否
”
。
三、实验原理
3.1
文法描述及其
LALR(1)
分析表
描述表达式语言的文法
G
如下:
S → E
E → E+T
E → T
T → T*F
T → F
F → (E)
F → ID
该文法的
LALR(1)
分析表如下:
分析表
状态
动作 Action 表(Yy_action)
转移 Goto 表(Yy_goto)
#
ID
+
*
(
)
S
E
T
F
0
-
S1
-
-
S2
-
-
3
4
5
1
R6
-
R6
R6
-
R6
-
-
-
-
2
-
S1
-
-
S2
-
-
6
4
5
3
A
-
S7
-
-
-
-
-
-
-
4
R2
-
R2
S8
-
R2
-
-
-
-
5
R4
-
R4
R4
-
R4
-
-
-
-
6
-
-
S7
-
-
S9
-
-
-
-
7
-
S1
-
-
S2
-
-
-
10
5
8
-
S1
-
-
S2
-
-
-
-
11
9
R5
-
R5
R5
-
R5
-
-
-
-
10
R1
-
R1
S8
-
R1
-
-
-
-
11
R3
-
R3
R3
-
R3
-
-
-
-
SN = 移进并转移到状态 N A = accept 接受
RN = 按第 N 条产生式进行规约 - = error 转移
3.2 LR 分析器总控程序框架
push(0);