编译前端
:主要由与源语言有关但与目标语言无关的那部分组成,包括词法分析、语法分析、语义分析、中间代码生成,以及与目标代码无关的优化工作
编译后端
:主要与目标机有关的哪些部分,如与目标机有关的优化工作以及目标代码的生成
遍
:对源程序或源程序的中间结果从头到尾扫描一次,并作有关的加工处理,生成新的中间结果或目标程序、
上下文无关文法
:它所定义的语法单位是完全独立于这种语法单位可能出现的环境
G=(V_N,V_T,P,S):
综合属性
:自下而上传递信息,一个结点的综合属性的值由其子节点的属性确定
继承属性
:自上而下传递信息,一个结点的继承属性由其父结点和兄弟结点的属性确定
S属性文法
:只含综合属性的文法
L属性文法
:对于每个产生式A -> X1X2…Xn其中的每个属性要么是综合属性要么是Xj的一个继承属性,且仅依赖于X1…Xj-1的属性或者A的继承属性
`属性文法:可以看作是关于语言翻译的高级规范说明,其中隐藏了实现细节,使用户能够从明确的翻译顺序的工作中解脱出来
翻译模式
:给出了语义规则进行计算的次序,从而使某些实现表现出来
符号表是用来记录编译过程中各种信息的表格
符号表的作用:
符号表的表项常包括两大栏,即名字栏和信息栏
名字栏也叫主栏,存放名字的标识符,称为关键字;信息栏包含许多子栏和标志位,用来记录相应名字的不同属性
符号表的组织方式分为直接
组织和间接
组织方式
直接组织方式中各项按固定长度顺序存放;
间接组织方式中,符号表的主栏存放标识符的一个指示器和一个整数,而标识符的字符串则存放在一个字符串数组中。
符号表的组织主要取决于一下几因素:
如果在编译时能确定数据空间的大小,则采用静态分配方法。在编译时可为每个数据项目确定出在运行时刻的存储空间中的位置
如果在编译时不能确定运行时数据空间的大小,则必须采用动态分配的方法。允许递归过程和动态申请释放。
FORTARN:不允许过程的递归性,每个数据所需的存储空间大小都是常量,并且所有数据名性质完全确定。整个程序所需要的数据空间总量在编译时完全确定
C语言:没有分程序结构,过程不允许嵌套,但允许过程的递归调用
PASCAL:允许用户自由地申请数据空间和退还数据空间,或者不仅有过程而且有进程的程序