编译综合属性
⑴ VHDL 编译,阐述和 综合 之间的关系
编译、精细化、综合是数字系统设计中的概念,而VHDL只是数字系统设计中的一种硬件描述语言。
所谓编译(Compile)是借用软件系统中的概念,在数字系统设计中,是指包含多个环节的一个完整过程。这些环节主要有:分析(Analysis)、精细化(Elabortion)、综合(Synthesis)、适配(Fitter)、汇编(Assembler)等。分析——检查语法;精细化——建立数据库、为综合进行初始化;综合——将高层次描述转化为低层次描述并优化代码、适配——布局和布线、汇编——产生配置数据。
⑵ 编译原理全部的名词解释
书上有别那么懒!。。。。
编译过程的六个阶段:词法分析,语法分析,语义分析,中间代码生成,代码优化,目标代码生成
解释程序:把某种语言的源程序转换成等价的另一种语言程序——目标语言程序,然后再执行目标程序。解释方式是接受某高级语言的一个语句输入,进行解释并控制计算机执行,马上得到这句的执行结果,然后再接受下一句。
编译程序:就是指这样一种程序,通过它能够将用高级语言编写的源程序转换成与之在逻辑上等价的低级语言形式的目标程序(机器语言程序或汇编语言程序)。
解释程序和编译程序的根本区别:是否生成目标代码
句子的二义性(这里的二义性是指语法结构上的。):文法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)删除无用赋值
基本块定义
程序中只有一个入口和一个出口的一段顺序执行的语句序列,称为程序的一个基本块。
给我分数啊。。。
⑶ 计算机编译原理什么是NFA
ε只能出现在NFA中,当然不是为了方便直观,而是连通NFA和DFA的桥梁。编译原理讲授的不是如何绘制NFA或者DFA,二是告诉读者怎样能够自动实现NFA或DFA的构造。在实际应用中ε可以帮助计算机转换NFA为DFA,而在属性文法和语法制导阶段,它也是沟通综合属性与继承属性、执行语义动作不可或缺的一部分。另外ε的使用可以大大简化文法产生式的构造难度。我记得最初使用ε是为了使得文法体系(字母表)更加完善,但是在实际应用中却变得应用广泛(此观点不一定正确)。最后想说的是,在编译中,ε也带来了不小的麻烦,否则也就不会有诸如“去空产生式”这样的算法了:)
⑷ 编译程序包括哪几个主要组成部分
编译过程分为分析和综合两个部分,并进一步划分为词法分析、语法分析、语义分析、代码优化、存储分配和代码生成等六个相继的逻辑步骤。这六个步骤只表示编译程序各部分之间的逻辑联系,而不是时间关系。
编译过程既可以按照这六个逻辑步骤顺序地执行,也可以按照平行互锁方式去执行。在确定编译程序的具体结构时,常常分若干遍实现。对于源程序或中间语言程序,从头到尾扫视一次并实现所规定的工作称作一遍。每一遍可以完成一个或相连几个逻辑步骤的工作。
(4)编译综合属性扩展阅读:
对于c编译程序来说,其语言的特点如下:
1、c语言是一种结构化语言。它层次清晰,便于按模块化方式组织程序,易于调试和维护,而且表现能力和处理能力极强。
2、c语言具有丰富的运算符和数据类型,便于实现各类复杂的数据结构。它还可以直接访问内存的物理地址,进行位(bit)一级的操作。
3、由于c语言实现了对硬件的编程操作,因此集高级语言和低级语言的功能于一体。它既可用于系统软件的开发,也适合于应用软件的开发。
4、此外,c语言还具有效率高、可移植性强等特点。因此它广泛地移植到了各类各型计算机上,从而形成了多种版本。
⑸ 综合属性和继承属性有何区别
综合属性和继承属性区别是继承属性是从上而下传递信息,综合属性自下而上传递信息。终结符号只有综合属性,非终结符号既有综合属性也可有继承属性。
属性与变量一样,可以进行计算和传递。可以类比我们平时写代码时候一些成员变量。属性又分为综合属性和继承属性。
综合属性注意:
1、对属性的处理有计算、传递信息等,属性处理的过程也就是语义处理过程。
2、当然,处理时必须遵循一定的规则。为此,为每个文法规则式都定义一组属性的计算规则,称为语义规则。
⑹ 表达式翻译用到的是综合属性还是继承属性
都要用到啊。综合属性和继承属性是按计算方向区分的,不是用一个就能搞定的。你说的翻译,肯定两个都用到;如果只是求值,可以只用综合属性(要除去最后一步把求出的值存储)。
⑺ 编译程序有哪些主要构成成分它们各自的主要功能是什么
编译过程分为分析和综合两个部分,并进一步划分为词法分析、语法分析、语义分析、代码优化、存储分配和代码生成等六个相继的逻辑步骤。这六个步骤只表示编译程序各部分之间的逻辑联系,而不是时间关系。
编译过程既可以按照这六个逻辑步骤顺序地执行,也可以按照平行互锁方式去执行。在确定编译程序的具体结构时,常常分若干遍实现。对于源程序或中间语言程序,从头到尾扫视一次并实现所规定的工作称作一遍。每一遍可以完成一个或相连几个逻辑步骤的工作。
例如,可以把词法分析作为第一遍;语法分析和语义分析作为第二遍;代码优化和存储分配作为第三遍;代码生成作为第四遍。
反之,为了适应较小的存储空间或提高目标程序质量,也可以把一个逻辑步骤的工作分为几遍去执行。例如,代码优化可划分为代码优化准备工作和实际代码优化两遍进行。
(7)编译综合属性扩展阅读
从左至右逐个字符地对源程序进行扫描,产生一个个的单词符号,把作为字符串的源程序改造成为单词符号串的中间程序。执行词法分析的程序称为词法分析程序或扫描器。
源程序中的单词符号经扫描器分析,一般产生二元式:单词种别;单词自身的值。单词种别通常用整数编码,如果一个种别只含一个单词符号,那么对这个单词符号,种别编码就完全代表它自身的值了。若一个种别含有许多个单词符号,那么,对于它的每个单词符号,除了给出种别编码以外,还应给出自身的值。
词法分析器一般来说有两种方法构造:手工构造和自动生成。手工构造可使用状态图进行工作,自动生成使用确定的有限自动机来实现。
编译程序的语法分析器以单词符号作为输入,分析单词符号串是否形成符合语法规则的语法单位,如表达式、赋值、循环等,最后看是否构成一个符合要求的程序,按该语言使用的语法规则分析检查每条语句是否有正确的逻辑结构,程序是最终的一个语法单位。编译程序的语法规则可用上下文无关文法来刻画。
⑻ 编译的词法分析中,ε有何用,仅仅是为了画NFA图方便吗为什么DFA图中没有ε
ε只能出现在NFA中,当然不是为了方便直观,而是连通NFA和DFA的桥梁。编译原理讲授的不是如何绘制NFA或者DFA,二是告诉读者怎样能够自动实现NFA或DFA的构造。在实际应用中ε可以帮助计算机转换NFA为DFA,而在属性文法和语法制导阶段,它也是沟通综合属性与继承属性、执行语义动作不可或缺的一部分。另外ε的使用可以大大简化文法产生式的构造难度。我记得最初使用ε是为了使得文法体系(字母表)更加完善,但是在实际应用中却变得应用广泛(此观点不一定正确)。
最后想说的是,在编译中,ε也带来了不小的麻烦,否则也就不会有诸如“去空产生式”这样的算法了:)
⑼ 很多编译程序采用的基于属性文法的语义处理过程称为什么
首先,我们给出语义属性的定义。
定义 5.1一文法符号X∈VN∪VT的语义性质称为该文法符号的语义属性(Semantic Attributes),简称为属性。我们用A(X)表示X的所有属性的集合。每个属性表示X的一个特定性质,并可任意指定其取值范围。下面,我们将用X.a表示A(X)中的属性a。
由定义5.1可知,文法符号的属性就是它的语义性质。属性可表征诸如数、符号串、类型、存储空间和其它需表征的实体。就终结符号而言,它至少有一种属性,即词文。当然,它还可能具有其它属性,例如,对3.2.1中所定义的无符号数,单词“123”就是它的词文;而其数值和类型(整型)是它的另外两个属性。一般来说,终结符号的属性是其内在性质;当然也有些属性将从其它符号的属性中获取。例如,变量标识符的类型属性,将从类型定义语句中获取,也就是说,它是通过语法树从其它符号的属性中获取的。对非终结符号而言,其属性之值均须从其它符号的属性经计算而得,或者说,是由其它符号的属性定义的。
可见,各个文法符号的属性之间,可能存在某种依赖关系,这种依赖关系可用属性规则(语义规则)来定义。
定义 5.2设p:X0→X1X2…Xn∈P是文法G的一个产生式,则与p相关联的属性规则集合
定义 5.3对每个产生式p:X0→X1X2…Xn∈P,设属性定义性出现的集合为
AF(p)={Xi.a|Xi.a=f(Xk1.ak1,Xk2.ak2,…,Xkm.akm)∈R(p),而0≤kj≤n}
若Xi是产生式左部的非终结符号(即i=0),则称属性Xi.a是综合属性(Synthesized Attributes);若Xi出现在产生式的右部(即1≤i≤n),则称Xi.a是继承属性(Inherited Attributes)。
如果在一棵语法树中将每个结点均视为由若干个域组成的记录(或结构),则可将其中的一些域用来存放相应文法符号诸属性之值,并可用属性来为这些域命名。通常我们将每个结点都标注相应属性值的语法树称为加注语法树(Annotated Syntax Tree)或染色树(Decorted Syntax Tree)。于是,由定义5.3可知:在加注语法树中,一个文法符号X在相应结点的综合属性之值,由其子结点的属性和(或)X的其它属性,通过相关属性规则经计算而得,故综合属性的求值在语法树中是按自下而上的方式进行的;X的继承属性之值则由X的父结点和(或)其它兄弟结点来定义,故继承属性的求值将按自上而下的方式进行。
在引入属性的概念之后,我们就可以定义属性文法了。
定义 5.4属性文法AG是一个形如
AG=(G,A,R,B)
的四元组,其中:G=(VN,VT,P,S)是已简化的前后文无关文法;A=∪X∈VA(X)是属性的有限集合;R=∪p∈PR(p)是属性定义规则的有限集;而B=∪p∈PB(p)是条件的有限集合,B(p)用于描述使规则R(p)有效的条件(请注意,并非每条规则R(p)都必须有条件B(p)。若B(p)缺省,则意味着无条件使用该规则);且同时满足:
(1) 对G中任意两个不同的文法符号X和Y而言,属性集合A(X)和A(Y)不相交,即
A(X)∩A(Y)=(X≠Y)
(2) 在G的任意一个语法树中,对文法符号X的每一次出现,可用于计算X的每个属性Xa(Xa∈A(X))之值的规则至多有一条。
由定义5.4可知,属性文法实际上就是对前后文无关文法的一种拓广。另外,定义还表明,每个产生式中的任一文法符号的属性计算规则只能是惟一的,且任一文法符号的综合属性集与继承属性集不相交,即
AS(X)∩AI(X)=
其中:
AS(X)={X.a|p:X→α∈P,X.a∈AF(p)}
AI(X)={X.a|q:Y→μXυ∈P,X.a∈AF(q)}
下面,我们以一个简单赋值语句的文法为例,来说明属性文法的应用。为便于理解,我们用一英语单词(或词组)而不再像前几章那样用字母表示文法符号。并且约定,用大写字母开头的符号为非终结符号,而用小写字母开头的符号为终结符号。
⑽ c程序写好要编译和综合是啥意思
书写出来的是源程序,也就是.c和.h文件。 肉眼可读。
最终运行的是可执行文件,也就是二进制文件。 windows上是.exe文件。
从源文件到可执行文件要经过编译和链接,你说的综合应该就是链接。
编译是每个.c文件编译成对应的目标文件(.o, .obj, .tco这类的,不同工具扩展名有所不同)
链接是把这些目标文件整合成可执行文件。