【编译原理】LR(0)分析表(偏人话)

水印不知道怎么去掉……


 第一步:拓广文法

        把产生式拆出来单独写,

        第一行要用其他符号指向开始符号

 第二步:写出所有项目

        在第一步之上,前中后加点(·

第三步:求项目集规范族

        包括并不限于这3个要点(规则):

        ①某个项目的“·”走过一个符号(非空),下一个状态的开头,写这个项目的“·”后移一位的项目。

        

         ②“·”后面非终结符,将它的“·”头的项目罗列

        

         ③“·”后无东西,终止

        


        (1)E指向左边两个E:如果“·”后面是非终结符,要把这个非终结符指向一开始是“·”的所有项目写在该状态中。规则②

        (2)E指向右边的E:“·”走过了一个符号,这个符号是E。规则①

        (3)a指向a:“·”走过了一个符号,这个符号是a。规则①

        (4)b指向b:“·”走过了一个符号,这个符号是b。规则①

        

         (5)c指向自己:规则①,第二行走过一个c,“又”到了第一行,所以自己指自己。

        

        (6) 规则③

         

 第四步:构造LR(0)分析表

 举几个例子:(看箭头指向)

(1)I0走a到I2:S0走a到S2

(2)I5走c到I5:S5走c到S5

(3)I3走B到I7:S3走B到S7(GOTO写7)

  第五步:字符串分析过程

规则:

产生式为空:状态栈最右字母 和 输入串最左字母查表。

        若查到的的是状态,入状态栈。输入串最左一个进入符号栈。

        若查到的是产生式,1.下一行的产生式填写查到的产生式 2.下一行的符号栈扣除同产生式“→”右端长度的符号,替换为产生式左部字母 3.状态栈扣除同产生式“→”右端长度的数字(状态),填写当前【状态栈右端,符号栈最右端】的查表入状态栈

序号1:查表:0和i ,得S5。

序号2:状态栈入5,输入站退i到符号栈。

        查表:5和*,得r6。F→i

序号3:(1)填入产生式(2)#i变#F(3)05变0,用0和F查表,得3,状态栈03

        查表:3和*查表,得r4。T→F

序号4:(1)填入产生式(2)#F变#T(3)03变0,用0和T查表,得2,状态栈02

        查表:2和*查表,得S7。

序号5:状态栈入7,输入栈退*到符号栈。

        查表:7和i查表,得S5。

        查表:10和+,得r3,T→T*F。

序号8:(1)填入产生式(2)#T*F变#T (3)027(10)去掉3个变0,用0和T查表,得2,状态栈02。

        查表:2和+,得r2。E→T


yypyyds!(

  • 18
    点赞
  • 102
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
LR语法分析器是编译原理中的一种语法分析方法,它可以根据给定的文法规则,对输入的程序代码进行分析和解析。LR语法分析器使用自底向上的分析方法,通过构建一个状态机来识别输入的符号串是否符合给定的文法规则。 LR语法分析器的实现通常使用工具,如Bison(Yacc的GNU版本),它可以根据给定的文法规则自动生成相应的语法分析器。LR语法分析器的工作原理如下: 1. 构建LR分析:根据给定的文法规则,LR语法分析器会构建一个分析,该记录了在不同状态下,对应不同输入符号的移进、规约或接受操作。 2. 状态转移:LR语法分析器通过状态转移来处理输入符号串。它从初始状态开始,根据当前状态和下一个输入符号,查找分析中对应的操作,并执行相应的移进或规约操作。 3. 移进操作:当遇到终结符号时,LR语法分析器会将该符号移入栈中,并读取下一个输入符号。 4. 规约操作:当遇到非终结符号时,LR语法分析器会根据文法规则进行规约操作,将栈中的符号按照规约规则进行替换。 5. 接受操作:当输入符号串被完全分析并符合文法规则时,LR语法分析器会执行接受操作,示输入符号串被成功地分析和解析。 通过使用LR语法分析器,可以对程序代码进行语法分析,并生成相应的抽象语法树(AST)。抽象语法树可以用于后续的语义分析和代码生成等编译过程。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值