编译原理考点中概念整理


1.编译程序构成:

P6图1.10(回去加上)

2.编译程序和解释程序的区别:

  编译程序是一个语言处理程序,它把一个高级语言程序翻译成某个机器语言的汇编程序或二进制代码程序,这个二进制代码程序在机器上运行以生成结果。

  解释程序接受某个语言的程序并立即运行这个源程序。它的工作模式是一个个的获取、分析并执行源程序语句,一旦第一个语句分析结束,源程序便开始运行并生成结果。

3.词法分析、语法分析、语义分析及其任务:

  词法分析是编译过程的第一个阶段。这个阶段的主要任务是从左到右一个字符一个字符的读入源程序,对构成源程序的字符流进行扫描和分解,从而识别出一个个单词。

  语法分析是编译过程的第二个阶段。语法分析的任务是在词法分析的基础上将单词序列分解成各类语法短语。语法分析所依据的是语言的语法规则,即描述程序结构的规则。通过语法分析确定整个输入串是否构成一个语法上正确的程序。

  语义分析是审查源程序有无语义错误,为代码生成阶段收集类型信息。

4.文法 句型 句子 短语

  文法:以有穷的集合刻画无穷的集合的一个工具。是一类描述规则的语言。

  句型:G[S]是一个文法,如果符号串x是从识别符号推导出来的,则称x是文法G[S]的句型。

  句子:若句型x仅由终结符组成,则称x为G[S]的句子。

  短语:给定一个句型,其分析树的边缘成为该句型的一个短语。

5.文法的类型:

  0型文法:A→B,A中至少含有一个非终结符。也成为短语文法。“0型语言都是递归可枚举的,反之递归可枚举集必定是0型语言。”

  1型文法:A→B,|B|>=|A|(B→空除外)也称为上下文有关的。

  2型文法:A→B,A是一个非终结符。也称为上下文无关的。

  3型文法:A→aB|a (右线性) A→Ba|ao(左线性)。也成为正规文法。

6.可归前缀 活前缀:

  可归前缀:对于一个合法的句子而言,每次规约后得到的都是由已规约部分和输入剩余部分合起来构成文法的规范句型,而用哪个产生式继续规约仅取决于当前句型的前部,规范句型的这种前部称作可归前缀。

  活前缀:把在规范句型中形成可归前缀之前包括可归前缀在内的所有前缀都成为活前缀。

7.综合属性 继承属性:

  综合属性:对关联于产生式A→a的语义动作 b:=f(c1,c2,...,ck),如果b是A的某个属性,则称b是A的一个综合属性。

  继承属性:对关联于产生式A→a的语义动作 b:=f(c1,c2,...,ck),如果b是产生式右部某个文法符号X的某个属性,则称b是X的一个继承属性。

8.符号表作用:

  符号表自创建后便开始被用于收集符号(标识符)的属性信息,不同阶段会有不同的信息。

  在语义分析中,符号表所登记的内容是进行上下文语义合法性检查的依据。

  在目标代码生成阶段,符号表是对符号名进行地址分配的依据。

9.静态语义分析任务:

  编译器在静态语义分析阶段收集程序结构(控制结构和数据结构)相关的语义信息,在此过程中同时进行静态语义检查。若程序可以顺利通过静态语义检查,则部分语义信息会进一步用于中间或目标代码生成。

  静态语义检查包括:控制流检查、唯一性检查、名字的上下文相关性检查、类型检查

10.存储分配策略:

  静态存储分配:在编译期间为对象分配存储空间。要求在编译期间就可确定数据对象的大小,同时还可以确定数据对象的数目。

  栈式存储分配:运行栈数据空间的存储和管理方式。它将数据对象的运行时存储按照栈的方式来管理,常用于有效实现可动态嵌套的程序结构。因为是动态分配,所以运行的时候才能确定数据对象的存储分配结果。(当数据对象的生存期与创建他的过程/函数执行期无关时不适合进行栈式存储分配。)

  堆式存储分配:可以在任意时刻以任意次序从数据段的堆区分配和分配数据对象的运行时存储空间。 

11.过程活动记录:

  过程活动记录是指运行栈上的栈帧,他在函数/过程调用时被创建,在函数/过程运行过程中被访问和修改,在函数/过程返回时被撤销。栈帧包含局部变量、函数实参、临时值(用于表达式计算的中间单元)等数据信息以及必要的控制信息。

12.Display表:

  记录各嵌套层当前过程的活动记录在运行栈上的起始位置(基地址)。

 

 

 

 

 

 

 

  

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM