编译原理期末刷题总结
编译原理考前背诵
编译原理刷题总结。考前防止遗忘。
编译
- 编译程序是一种翻译程序
- 程序转换的方法有编译和解释
- 为某种语言构造一个编译程序,必须掌握三方面的内容为:源语言、目标语言、编译方法
- 对于编译程序而言、输入数据是源程序、输出结果是目标代码。
- 源程序中的两类错误为语义错误和代码错误。
- 编译程序对于C语言程序进行语义分析时可以确定变量是否定义或声明,
- 词法分析器不能发现括号不匹配。语法分析器可以发现源程序的语法错误。
- 通常一个编译程序不仅包含词法分析、语法分析、语义分析、中间代码生产、代码优化、目标代码生产等五个部分,还应包含**【表格管理和出错管理】。**
- 定义一个程序的意义的是**【语义规则】**
- 词法分析器又称扫描器,词法分析器的任务是识别单词,扫描器的最小语法单元是单词。
- 代码生产阶段的主要任务是把中间代码变换成依赖具体机器的目标代码。
- 编译器常用的语法分析方法是自底向上和自顶向下两种
- 采用自下而上构造语法分析时不需要消除文法的左递归,自上而下不必消除右递归。
- 运行时存储方案分为两大类,即静态存储分配方案和动态存储方案。
- 动态分配内存的方法有堆式和栈式,动态申请需要用堆。
- 程序所需的数据空间在程序运行前就可以确定,称为静态存储管理技术
- 静态分配允许程序出现静态变量
- 在编译方法中、动态存储分配的含义是 在运行阶段为源程序中的数组变量参数等进行分配。
- 定义一个程序的意义的是语义规则
- 高级语言语言所用的词法规则是正规式
**
**
语言文法
- 语言是句子的集合
- 推导产生的为句型,最终推导的为句子,
- 文法 G产生的句子的全体是文法描述的语言
- 一个句型中成为句柄的是该句型的最左直接短语
- 若文法G定义的语言是无限集、则文法必然是递归的。
- 一个文法所表述的语言是惟一的。
- 一个属性文法包含一个上下文无关文法和一系列语义规则。
- 一个上下文无关文法G包括四个组成部分,一组非终结符号、一组终结符号、一个开始符号、以及一组产生式
- 正规文法是左线性文法和右线性文法的统称。
- 文法G产生的非终结符的全体是该文法描述的语言
- 文法G所描述的语言是由文法的开始符号推出所有终结串的集合。
- 如果文法G是无二义的,则它的任何剧组α有最左推导和最右推导对应的语法树必定相同。
- 产生正规语言的文法为3型
- 二义文法是上下文无关法。
- 两个有限自动机等价是指他们的所识别的语言相等
- 文法符合的语义属性有本质属性和综合属性(综合属性和继承属性)
- 终结符具有综合属性
- 非终结符具有综合属性,也可以有继承属性。
- 文法中终结符和非终结符的交集是空集。
- 名字是具有确切的语义属性。
- 语法分析中FIRST和FELLOW都是终结符集合
规约代码
- 变量应当即持有左值又持有右值
- 在规范规约中、刻画可规约串的是**句柄 **
- 自底向上的分析中,总是采用最左归约的方式,因此把最左归约称为规范归约,而最右推导相应地称为规范推导(规范规约也可指最右推导的逆过程)
- 常用的中间代码形式为:三元式、四元式、逆波兰式(无语法树)
- 在LR分析法中,分析栈中存放的状态是识别规范句型活前缀的DFA状态
- 最简DFA的特点是1.没有多余的状态,2.只有一个中间态。
语法分析
- 语法分析中算符优先分析适用于表达式的分析。
- LR(0) < SLR(1)<LALR(1)<LR(1) 其中LALR 规约规约, SLR为移进规约,规约规约。移进移进时不产生冲突。
- 一个LR(1)文法合并同心集后若不是LALR(1)则可能产生归约归约冲突
- LR核心分析表由ACTION和GOTO表组成
- ACTION是以终结符和结束符$作为列坐标。
- GOTO是以非终结符作为列坐标
- 自上而下不包括移进。自下而上不包括展开。
- 自顶向下的语法分析中分析的关键是选择候选式。自底向上的关键是寻找句柄。自上而下的语法分析中应从文法开始符号开始
翻译
- 在控制流翻译中,布尔表达式被翻译为由跳转指令构成的跳转代码 正确
- 在跳转代码中逻辑运算符被翻译为跳转指令。