编译原理实验—LR(1)分析法

一、实验内容

以LR(1)为代表的LR(K)分析方法是严格的从左向右扫描,和自底向上的语法分析方法,具体包括LR(0),LR(1),SLR(1),LALR(1)四类。不同于自上而下的LL(1)分析法,LR(K)分析过程基本有三大步:写出自动机(即 LR(0)或 LR(1)项集族,后面都称作自动机) -> 构造文法分析表-> 进行文法分析过程。第一步中的自动机有两种: LR(0)自动机和 LR(1)自动机。LR(0) 和 SLR文法分析用的是 LR(0)自动机,LR(1)和 LALR文法分析用的是 LR(1)自动机。而LR(1)自动机构造方法和LR(0)自动机的构造方法相同,只是多增加了向前搜索符号。

  1. 已知本次实验考虑文法如下:

(1)E->E+T

(2)E->E—T

(3)E->T

(4)T->T*F

(5)T->T/F

(6)T->F 

(7)F->(E)

(8)F->i

  1. 首先拓广文法,加入(0)S->E
  2. 然后需要构造 LR(1)自动机,就是加入了一个圆点,圆点后的符号是即将处理的符号,如果圆点后是非终结符时,则要写出该终结符为产生式左部的所有产生式。反复以上过程,直到不再扩大。给它们编号并写出读入下一个符号(即圆点后的符号)会跳转到哪。LR(1)分析中的特色之一是考虑“展望符”,即当前状态可能遇到的下一个输入符号。这个符号将影响分析器的动作决策,特别是对于归约动作至关重要。确定的项目集、LR(1)自动机及LR(1)分析表分别如下图所示。

其中:为优化分析表的构建,使用LALR(1)实现对LR(1)文法的合理简化,既保留了强大的语法分析能力,又显著减少了状态数量和解析表的复杂性。具体来说,LALR(1)通过合并产生相同核心(即项集的第一分量)但搜索符不同的项集,减少了状态数量。

状态

ACTION

GOTO

+

-

*

/

(

)

i

#

E

T

F

0

S4

S5

1

2

3

1

S6

S7

acc

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值