编译原理总结(个人向)
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的时候,在第四步删除无用赋值中,注意删除的是附加标识符,也就是说如果那个节点上如果有两个及以上的东西,就可以把重复的那个心安理得的删掉,如果只有一个,你删了的话之后重写代码的话就没办法去拿这个节点了(这里和给的算法有冲突,以这个为准
编译原理总结(个人向)相关推荐
- 学了编译原理能否用 Java 写一个编译器或解释器?
16 个回答 默认排序 RednaxelaFX JavaScript.编译原理.编程 等 7 个话题的优秀回答者 282 人赞同了该回答 能.我一开始学编译原理的时候就是用Java写了好多小编译器和 ...
- 对学习编译原理的看法
我认为编译原理这本书是一门与代码做斗争的课程,学习编译原理能够追寻程序设计语言的本质,了解计算机各种语言编译的原理.学习了编译原理能够更加深入的了解计算机各种高级语言使用的原理,能使自己更加容易更加好 ...
- 《OpenMP编译原理及实现技术》摘录
内容摘自<OpenMP编译原理及实现技术>第2章 代码测试环境:Windows7 64bit, VS2010, 4核机. 可以说OpenMP制导指令将C语言扩展为一个并行语言,但OpenM ...
- 编译原理(六)自底向上分析之LR分析法
自底向上分析之LR分析法 说明:以老师PPT为标准,借鉴部分教材内容,AlvinZH学习笔记. 基本概念 1. LR分析:从左到右扫描(L)自底向上进行规约(R),是规范规约,也即最右推导(规范推导) ...
- 编译原理上机实习c语言小子集编译程序的实现报告,编译原理上机实习指导书(2015-11修改).pdf...
<编译原理上机实习>指导书 一.上机实习目的 理解编译程序的构造原理,掌握编译程序的构造方法与技术.通过实习,使学生既加深对 编译原理基础理论的理解,又提高动手能力,特别是提高软件设计能力 ...
- 我看过的编译原理方面的好文章
本文不定期更新,最后更新于2019-7-6 编译原理 编译原理三大经典书籍(龙书 虎书 鲸书) 前端为什么要会正则表达式 - 知乎 一次性搞懂JavaScript正则表达式之引擎 - 掘金 没有AST ...
- 添物 不花钱学计算机及编程(预备篇)— 编译原理
编译原理是将一门语言翻译为另一门语言的学科.如果您只是想当个简单的程序员是可以不用学习的,或者有个了解就可以.但是如果您想更好的发展,就要很好的掌握了. 这门课程最大的特色就是,要自己写代码学习,不能 ...
- 计算机的编译原理pdf,计算机编程基础--编译原理.pdf
第一章 引论(1) 1.1 什么叫编译程序 编译程序:是指这样的程序,它能够把某种 语言的程序转换成另一种语言的程序, 而后者与前者在逻辑上是等价的.如果 源语言是诸如FORTRAN.Pascal.C ...
- 学习编译原理对下面这段java跳不出死循环大概能有较好的解释吧
java 线程问题? public class ThreadTest {public static void main(String[] args){System.out.println(" ...
- 编译原理四种文法的理解补充
如果你是学习,给定一个文法,判断是哪一个文法的话,那这篇不是讲这个,只是一点小小的理解补充. 四种文法如下: 补充: 1.0型文法,即递归可枚举文法相当于图灵机是指: 给定一个文法G,一个句子g,如果 ...
最新文章
- null未定义_PHP的isset()、is_null、empty()使用总结
- HALCON双目重建
- IBM:破解密码并不是量子计算机主要用途,不必为此担心
- 开发日记-20190626 Linux系统管理技术手册(第二版) 第一章习题答案(个人版)
- The 5th Zhejiang Provincial Collegiate Programming Contest------ProblemK:Kinds of Fuwas
- 免费下载|《云原生时代下的App开发》走进阿里云一站式应用研发平台EMAS
- [Java基础]方法引用
- 如何选择合适的数据可视化BI工具
- educoder Scala面向对象编程
- 重构Webpack系列之三 ----出口(output)
- C语言求S(n) = a+aa+aaa+aaaa+...+aa..a之值,其中a是一个数字,n表示a的位数例如:2+22+222+2222+22222(此时n=5),n和a都从键盘输入。...
- cogs1439 货车运输 LCA
- 计算机配置35%卡住不动了,win7配置更新35%不动怎么回事_win7配置windows update完成35卡住不动了如何解决...
- CSS动画效果(animation属性)解析
- 友盟+全面解析ios 卡顿问题
- 全国各省份名义GDP、实际GDP、GDP平减指数(以2008年为基期,2008-2018年)
- 如何选择一家靠谱的IT培训机构?
- C题——Halting Problem(补题)
- 外贸网站推广和分析!
- 【java校招你不知道的那些事儿】java校招不仅仅是春招秋招,具体有哪些阶段,特点是什么