编译原理常考概念汇总

概述

  1. 词法分析:输入源程序,对构成源程序的字符串进行扫描和分解,识别一个个单词符号
  2. 语法分析:在词法分析的基础上,根据语言的语法规则把单词符号串分解为各类语法单位
  3. 语义分析和中间代码生成:对各类语法单位按语言的语义进行初步翻译
  4. 优化:对前阶段产生的中间代码进行加工变换,以期在最后阶段产生更高效的目标代码
  5. 目标代码生成:把中间代码表换成特定机器上的目标代码

编译前端:主要由与源语言有关但与目标语言无关的那部分组成,包括词法分析、语法分析、语义分析、中间代码生成,以及与目标代码无关的优化工作

编译后端:主要与目标机有关的哪些部分,如与目标机有关的优化工作以及目标代码的生成

:对源程序或源程序的中间结果从头到尾扫描一次,并作有关的加工处理,生成新的中间结果或目标程序、

上下文无关文法:它所定义的语法单位是完全独立于这种语法单位可能出现的环境

G=(V_N,V_T,P,S):

属性文法

属性

综合属性:自下而上传递信息,一个结点的综合属性的值由其子节点的属性确定

继承属性:自上而下传递信息,一个结点的继承属性由其父结点和兄弟结点的属性确定

S属性文法:只含综合属性的文法

L属性文法:对于每个产生式A -> X1X2…Xn其中的每个属性要么是综合属性要么是Xj的一个继承属性,且仅依赖于X1…Xj-1的属性或者A的继承属性

属性文法和翻译模式的区别

`属性文法:可以看作是关于语言翻译的高级规范说明,其中隐藏了实现细节,使用户能够从明确的翻译顺序的工作中解脱出来

翻译模式:给出了语义规则进行计算的次序,从而使某些实现表现出来

符号表

什么是符号表以及符号表的作用

符号表是用来记录编译过程中各种信息的表格

符号表的作用:

  1. 登记编译过程中输入和输出信息
  2. 在语义分析过程中用于语义检查和中间代码产生
  3. 作为目标代码生成阶段地址分配的依据

符号表的表项常包括那些部分?各描述什么

符号表的表项常包括两大栏,即名字栏和信息栏

名字栏也叫主栏,存放名字的标识符,称为关键字;信息栏包含许多子栏和标志位,用来记录相应名字的不同属性

符号表的组织方式有哪些?它的组织取决于那些因素?

符号表的组织方式分为直接组织和间接组织方式

直接组织方式中各项按固定长度顺序存放;

间接组织方式中,符号表的主栏存放标识符的一个指示器和一个整数,而标识符的字符串则存放在一个字符串数组中。

符号表的组织主要取决于一下几因素:

  1. 表项中的各栏所占存储单元和长度是否固定
  2. 语言中标识符的长度限制
  3. 哪些项有哪些共同值
  4. 对符号表的操作和使用方式

存储分配策略

静态分配存储策略

如果在编译时能确定数据空间的大小,则采用静态分配方法。在编译时可为每个数据项目确定出在运行时刻的存储空间中的位置

动态存储分配策略

如果在编译时不能确定运行时数据空间的大小,则必须采用动态分配的方法。允许递归过程和动态申请释放。

  • 栈式动态分配
  • 堆式动态分配

FORTARN:不允许过程的递归性,每个数据所需的存储空间大小都是常量,并且所有数据名性质完全确定。整个程序所需要的数据空间总量在编译时完全确定

C语言:没有分程序结构,过程不允许嵌套,但允许过程的递归调用

PASCAL:允许用户自由地申请数据空间和退还数据空间,或者不仅有过程而且有进程的程序

你可能感兴趣的:(编译原理,eclipse,spring,cloud,servlet,sentinel,dubbo,django,python)