语法分析-LR(1)的python实现[已经得到分析表的情况下]

LR(1):从左分析,从右推导,超前查看一个单词

由于研究了半天为懂表是怎么自动建出来的,连方法都没懂,于是同LL1直接手动建立表了,哈哈哈哈我就是这么菜。

分析表分为action表和goto表,同样为二维表

第一个key为状态(int),第二个key为终结字符(action)/非终结字符(goto)

action的表项为ri或si,ri表示按第i个产生式规约,si表示移进,即把输入符号和i入栈

acc表示完成

goto表项为状态(int)

 

对于给定的文法G,输入流w 和表action、goto

先初始化字符指针ip为0 字符为w[0] ,栈的值为"$"和状态0

进行如下循环:

while 1:

 s为栈顶元素

如果 action[s,a]存在:

       如果第一个字符为s[即为si]:

             a和i入栈

             ip指向下一个字符

             a为ip指向的字符

      如果第一个字符为r[即为ri]:

            表示对第i个产生式进行规约

            栈回退第i个产生式右端(->右)长度的二倍

            t为回退后栈顶元素

            第i个产生式左端A(A-

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值