‘壹’ 编译原理的实质
计算机程序编译原理的实质就是把程序员员容易理解的高级语言程序代码流翻译成计算机可执行的机器指令代码流。可以使用“一断、二比、三译”形象说明实质。
1、断。按照语言的语法规则扫描断词,结合文法词典把程序字符串流分解成为计算机语言能够识别的基本单元(标识词、运算符)。
2、比。从程序流中找出扩展标识词的定义,建立标识词结构,放入文法词典,服务于新的定义和函数程序代码的编译。程序语句、表达式里面使用的标识可以从词典中比较找到。
3、译。把函数程序文本字符串流中的算术表达式、赋值语句、控制语句翻译成为计算机机器语言二进制代码流。
4、组装函数翻译后的二进制代码流,明确数据空间地址和大小,生成计算机裸机或操作系统可以执行目标代码。
‘贰’ C语言编译原理是什么
编译共分为四个阶段:预处理阶段、编译阶段、汇编阶段、链接阶段。
1、预处理阶段:
主要工作是将头文件插入到所写的代码中,生成扩展名为“.i”的文件替换原来的扩展名为“.c”的文件,但是原来的文件仍然保留,只是执行过程中的实际文件发生了改变。(这里所说的替换并不是指原来的文件被删除)
2、汇编阶段:
插入汇编语言程序,将代码翻译成汇编语言。编译器首先要检查代码的规范性、是否有语法错误等,以确定代码的实际要做的工作,在检查无误后,编译器把代码翻译成汇编语言,同时将扩展名为“.i”的文件翻译成扩展名为“.s”的文件。
3、编译阶段:
将汇编语言翻译成机器语言指令,并将指令打包封存成可重定位目标程序的格式,将扩展名为“.s”的文件翻译成扩展名为“.o”的二进制文件。
4、链接阶段:
在示例代码中,改代码文件调用了标准库中printf函数。而printf函数的实际存储位置是一个单独编译的目标文件(编译的结果也是扩展名为“.o”的文件),所以此时主函数调用的时候,需要将该文件(即printf函数所在的编译文件)与hello world文件整合到一起,此时链接器就可以大显神通了,将两个文件合并后生成一个可执行目标文件。
‘叁’ 编译原理(C\C#)
分数少 看着一大片 觉得没有意思
‘肆’ 为什么handle会被翻译成句柄
可能是当年的大佬觉得计算机语言也是“语句”,控制语句对象,则可称之为句柄。之前的一些翻译害死一批善良的人。例如神句“金银天然不是货币,但货币天然是金银”,问题是TMD很多考题还喜欢用这句话。明明就是ZB的翻译。如果翻译成“金银原本并不被当作货币,但货币诞生时就是金银充当的”你就会非常清楚他在讲什么。MLGZZ,装逼害死人!!
‘伍’ 编译原理中的拉链和回填到底什么意思
回填技术是指控制语句中布尔表达式翻译成四元式序列时,有的转移地址不能在产生这些四元式的同时得知,需要在适当的时候回填这个地址。 拉链技术是指为了记录需要回填地址的四元式,把需要回填E•ture的四元式拉成一条链,称为“真链”;把需...
‘陆’ 编译原理 把下面程序段翻译成四元式序列
四元式类似于三地址指令:波兰式。
0:(=,M,—,A); 简单赋值表达式翻译:a = m;
1:(=,N,—,B); B=N;
2:(<,A,B,4) ; 控制语句翻译 :IF A<B GOTO 4;
3:(jump,—,—,6); 直接转移语句;JUMP TO 6;
4:(=,N,—,T); T=N;
5:(jump,—,—,7) jump to 7;
6:(=,M,—,T) T=M;
7:(=,T,—,C). C=T;
‘柒’ 求南航计算机应用技术专业考研专业课和参考书
专业课有:
业务课一 --> 301数学一
业务课二 --> 422数据结构与操作系统
专业课加试 --> 543计算机组成原理与编译原理
§数据结构与操作系统 参考书目:
《数据结构》严蔚敏,清华大学出版社;《计算机操作系统》汤子瀛,西安电子科技大学出版社。
--------------------------------------------------------------------------------
§数据结构与操作系统 考试大纲:
数据结构部分一、数据结构基本概念,算法和简单的算法分析二、顺序表和链表的存储与基本操作;静态链表;循环链表;双向链表;三、栈和队列的定义及其应用;栈和队列的顺序和链式存储;四、字符串的定义、存储和操作;字符串的模式匹配;五、数组的顺序存储表示;广义表的定义和存储结构,矩阵的压缩存储;六、二叉树的定义、性质和存储结构;遍历二叉树;树的定义和存储结构;霍夫曼编码;七、图的基本概念及其存储表示:邻接矩阵、邻接表;图的遍历与连通性;最小生成树;拓扑排序;关键路径;最短路径;八、查找:顺序表查找;有序表查找;索引顺序表查找;二叉排序树;B-树;哈希表的构造和冲突处理方法; 九、插入排序;交换排序;选择排序;归并排序;基数排序;外排序的基本过程;操作系统部分一、操作系统的基本概念二、进程管理:进程的引入,进程的定义,进程状态及其转换,PCB及其组织,原语,进程控制原语,进程同步,经典进程同步问题,进程通信,线程。三、调度的概念,队列模型,调度算法及其评价,死锁的定义、产生的原因、产生的必要条件、处理死锁的方法四、内存管理:链接与装入,对换,连续内存分配方法,离散内存分配方法,虚拟内存分配方法,内存保护与共享五、设备管理:I/O体系结构,控制方法,I/O分配中的数据结构和分配方法,通道,设备独立性及其实现方法,缓冲管理,设备处理等六、磁盘与文件系统:磁盘的基本概念、调度、性能改善和容错,物理文件组织,外存分配方法和文件存储空间的管理,逻辑文件组织,目录及其管理,文件共享和保护七、操作系统接口类型,系统调用概念和实现方法
§计算机组成原理与编译原理 参考书目:
《计算机组成原理》奉远桢编,电子工业出版社;《编译原理》陈火旺编,国防工业出版社;《编译原理》陈火旺编,国防工业出版社。
--------------------------------------------------------------------------------
§计算机组成原理与编译原理 考试大纲:
计算机组成原理部分第一章 概述 计算机各部件的作用和层次结构第二章 数据的表示 一、数值数据的表示二、非数值数据的表示 1.逻辑数据 2.中西文字符和多媒体信息三、校验码第三章 运算器与运算方法 1.算术和逻辑运算的实现 2.标志位 3.运算器结构第四章存储系统一、存储器分类、性能指标二、半导体存储器三、高速缓存和虚拟存储器四、磁表面和光存储器第五章 指令系统一、指令格式二、寻址方式和堆栈三、指令系统举例第六章 中央处理机组织 一、CPU的结构与功能二、CPU控制流程和时序三、组合逻辑控制器设计四、微程序控制器设计第七章 输入输出组织一、I/O接口二、程序控制传送和程序中断三、DMA、通道和I/O处理机 编译原理部分第一章:了解有关编译程序的基本概念、结构第二章:掌握语言的定义与文法描述的基本概念、术语与文法改造方法; 第三章:掌握有限自动机、正规式的概念、算法;正规式与有限自动机、正规文法的相互转换。 第四章:掌握LL(1)分析方法;算符文法;LR(K)分析方法。第五章:掌握属性文法的概念;S—属性文法、L—属性文法的定义、翻译模式以及计算继承属性、综合属性的方法。第六章:掌握赋值语句与布尔表达式的翻译;控制语句的翻译;过程调用与类型检查。第七章:运行存储组织;静态与动态存储管理与实现。第八章:掌握优化概念与局部优化、数据流方程与循环优化方法。
参见:http://www.graate.nuaa.e.cn/zsjz/zydetail.asp?zydm=081203计算机应用技术&yxdm=004信息科学与技术学院
‘捌’ 南航计算机科学与技术专业复试科目541离散数学和编译原理
京航空航天大学541离散数学与编译原理2012年考研大纲:
《离散数学(第三版)》耿素云、屈婉玲、张立昂编,清华大学出版社 2004年;
《编译原理》陈火旺编,国防工业出版社,2000年,第三版。
离散数学部分
1. 命题逻辑与一阶逻辑
1.1. 联结词、量词、谓词
1.2. 命题逻辑范式
1.3. 合式公式、解释、等值式
1.4. 推理理论
2. 集合与关系
2.1. 集合的运算与性质
2.2. 关系的运算、性质与闭包
2.3. 等价关系与偏序关系
2.4. 函数的运算与性质
3. 代数系统
3.1. 代数系统及其同态与同构
3.2. 半群与群
3.3. 格与布尔代数
4. 图与树
4.1. 图的定义与表示
4.2. 图的连通性、欧拉图、哈密尔顿图
4.3. 二部图、平面图
4.4. 树、生成树与根树
编译原理部分
第一章:了解有关编译程序的基本概念、结构
第二章:掌握语言的定义与文法描述的基本概念、术语与文法改造方法;
第三章:掌握有限自动机、正规式的概念、算法;正规式与有限自动机、正规文法的相互转换。
第四章:掌握LL(1)分析方法;算符文法;LR(K)分析方法。
第五章:掌握属性文法的概念;S―属性文法、L―属性文法的定义、翻译模式以及计算继承属性、综合属性的方法。
第六章:掌握赋值语句与布尔表达式的翻译;控制语句的翻译;过程调用与类型检查。
第七章:运行存储组织;静态与动态存储管理与实现。
第八章:掌握优化概念与局部优化、数据流方程与循环优化方法。
‘玖’ 编译原理全部的名词解释
书上有别那么懒!。。。。
编译过程的六个阶段:词法分析,语法分析,语义分析,中间代码生成,代码优化,目标代码生成
解释程序:把某种语言的源程序转换成等价的另一种语言程序——目标语言程序,然后再执行目标程序。解释方式是接受某高级语言的一个语句输入,进行解释并控制计算机执行,马上得到这句的执行结果,然后再接受下一句。
编译程序:就是指这样一种程序,通过它能够将用高级语言编写的源程序转换成与之在逻辑上等价的低级语言形式的目标程序(机器语言程序或汇编语言程序)。
解释程序和编译程序的根本区别:是否生成目标代码
句子的二义性(这里的二义性是指语法结构上的。):文法G[S]的一个句子如果能找到两种不同的最左推导(或最右推导),或者存在两棵不同的语法树,则称这个句子是二义性的。
文法的二义性:一个文法如果包含二义性的句子,则这个文法是二义文法,否则是无二义文法。
LL(1)的含义:(LL(1)文法是无二义的; LL(1)文法不含左递归)
第1个L:从左到右扫描输入串 第2个L:生成的是最左推导
1 :向右看1个输入符号便可决定选择哪个产生式
某些非LL(1)文法到LL(1)文法的等价变换: 1. 提取公因子 2. 消除左递归
文法符号的属性:单词的含义,即与文法符号相关的一些信息。如,类型、值、存储地址等。
一个属性文法(attribute grammar)是一个三元组A=(G, V, F)
G:上下文无关文法。
V:属性的有穷集。每个属性与文法的一个终结符或非终结符相连。属性与变量一样,可以进行计算和传递。
F:关于属性的断言或谓词(一组属性的计算规则)的有穷集。断言或语义规则与一个产生式相联,只引用该产生式左端或右端的终结符或非终结符相联的属性。
综合属性:若产生式左部的单非终结符A的属性值由右部各非终结符的属性值决定,则A的属性称为综合属
继承属性:若产生式右部符号B的属性值是根据左部非终结符的属性值或者右部其它符号的属性值决定的,则B的属性为继承属性。
(1)非终结符既可有综合属性也可有继承属性,但文法开始符号没有继承属性。
(2) 终结符只有综合属性,没有继承属性,它们由词法程序提供。
在计算时: 综合属性沿属性语法树向上传递;继承属性沿属性语法树向下传递。
语法制导翻译:是指在语法分析过程中,完成附加在所使用的产生式上的语义规则描述的动作。
语法制导翻译实现:对单词符号串进行语法分析,构造语法分析树,然后根据需要构造属性依赖图,遍历语法树并在语法树的各结点处按语义规则进行计算。
中间代码(中间语言)
1、是复杂性介于源程序语言和机器语言的一种表示形式。
2、一般,快速编译程序直接生成目标代码。
3、为了使编译程序结构在逻辑上更为简单明确,常采用中间代码,这样可以将与机器相关的某些实现细节置于代码生成阶段仔细处理,并且可以在中间代码一级进行优化工作,使得代码优化比较容易实现。
何谓中间代码:源程序的一种内部表示,不依赖目标机的结构,易于代码的机械生成。
为何要转换成中间代码:(1)逻辑结构清楚;利于不同目标机上实现同一种语言。
(2)便于移植,便于修改,便于进行与机器无关的优化。
中间代码的几种形式:逆波兰记号 ,三元式和树形表示 ,四元式
符号表的一般形式:一张符号表的的组成包括两项,即名字栏和信息栏。
信息栏包含许多子栏和标志位,用来记录相应名字和种种不同属性,名字栏也称主栏。主栏的内容称为关键字(key word)。
符号表的功能:(1)收集符号属性 (2) 上下文语义的合法性检查的依据: 检查标识符属性在上下文中的一致性和合法性。(3)作为目标代码生成阶段地址分配的依据
符号的主要属性及作用:
1. 符号名 2. 符号的类型 (整型、实型、字符串型等))3. 符号的存储类别(公共、私有)
4. 符号的作用域及可视性 (全局、局部) 5. 符号变量的存储分配信息 (静态存储区、动态存储区)
存储分配方案策略:静态存储分配;动态存储分配:栈式、 堆式。
静态存储分配
1、基本策略
在编译时就安排好目标程序运行时的全部数据空间,并能确定每个数据项的单元地址。
2、适用的分配对象:子程序的目标代码段;全局数据目标(全局变量)
3、静态存储分配的要求:不允许递归调用,不含有可变数组。
FORTRAN程序是段结构,不允许递归,数据名大小、性质固定。 是典型的静态分配
动态存储分配
1、如果一个程序设计语言允许递归过程、可变数组或允许用户自由申请和释放空间,那么,就需要采用动态存储管理技术。
2、两种动态存储分配方式:栈式,堆式
栈式动态存储分配
分配策略:将整个程序的数据空间设计为一个栈。
【例】在具有递归结构的语言程序中,每当调用一个过程时,它所需的数据空间就分配在栈顶,每当过程工作结束时就释放这部分空间。
过程所需的数据空间包括两部分
一部分是生存期在本过程这次活动中的数据对象。如局部变量、参数单元、临时变量等;
另一部分则是用以管理过程活动的记录信息(连接数据)。
活动记录(AR)
一个过程的一次执行所需要的信息使用一个连续的存储区来管理,这个区 (块)叫做一个活动记录。
构成
1、临时工作单元;2、局部变量;3、机器状态信息;4、存取链;
5、控制链;6、实参;7、返回地址
什么是代码优化
所谓优化,就是对代码进行等价变换,使得变换后的代码运行结果与变换前代码运行结果相同,而运行速度加快或占用存储空间减少。
优化原则:等价原则:经过优化后不应改变程序运行的结果。
有效原则:使优化后所产生的目标代码运行时间较短,占用的存储空间较小。
合算原则:以尽可能低的代价取得较好的优化效果。
常见的优化技术
(1) 删除多余运算(删除公共子表达式) (2) 代码外提 +删除归纳变量+ (3)强度削弱; (4)变换循环控制条件 (5)合并已知量与复写传播 (6)删除无用赋值
基本块定义
程序中只有一个入口和一个出口的一段顺序执行的语句序列,称为程序的一个基本块。
给我分数啊。。。