编译原理总结(个人向)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
LR分析法本质是把已分析过的字符串转化为状态(分析过的所有字符),不断读取新的字符以完成状态的转换
这个思想好tm妙啊卧槽
在分析的时候,字符和状态同时进栈,看到句柄的时候字符和状态同时出栈,出几个字符出几个状态(一个字符对应着一个状态的转换)

静态链这个东西是用来访问非局部变量的时候用的

调用规则总结(C++为例)
里层随便调用外层,因为里层函数分析时,外层函数在符号表里肯定是存在的

同一个函数中,同级的后分析的可以调用前面分析的,反之则不行,不同的函数中,同级不能互相调用,前者原因是后分析的时候可以在符号表里查到前面分析的那个函数,反之查不到,因为还没开始分析后面的东西

同一个函数中,第n层可以调用第n+1层中声明过的函数,未声明过的函数则不能调用

CAL L A中的L就是管静态链的,这里的层差的意义和变量层差的意义一样,都是你调用过程时所在层数与定义过程时的层数的层的差值。
层差为0说明时第n层调用第n+1层的函数了,因为第n层的所在层数是n,第n+1层定义过程的层数也是n
其他情况下层差不为0,有可能是同层调用/递归调用,这样层差就是1,如果用了上一层定义的函数的话那么层差就是2,依次类推~

静态链是此过程直接外层过程的起始地址,对于每一个过程,其静态链的值是直接外层过程的基地址的值,这个过程只能用自己/外层过程的变量/常量/过程。就算你是在上层过程用了底层过程,你也拿不到上层函数定义过的变量(在底层过程中),除非传参。

LL(1)条件:
1.文法不含左递归
2.对于每一个终结符,若其有多个产生式,产生式的候选首符集两两不相交
3.对于每一个非终结符,若其First集合里有空字,则其First集和Follow集不相交(若First集合里有空字,且两者有交集,则当这个非终结符取空字的时候,若下一个字符属于两者交集,那么无法判断这个字符是这个非终结符产生的,还是下一个非终结符产生的)。

素短语:至少含有一个终结符,且自身不包含任何更小素短语的一种短语
(注意至少含有一个终结符),句柄可不含终结符

在构造DAG的时候,在第四步删除无用赋值中,注意删除的是附加标识符,也就是说如果那个节点上如果有两个及以上的东西,就可以把重复的那个心安理得的删掉,如果只有一个,你删了的话之后重写代码的话就没办法去拿这个节点了(这里和给的算法有冲突,以这个为准

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值