《编译原理知识点汇集(共6页).doc》由会员分享,可在线阅读,更多相关《编译原理知识点汇集(共6页).doc(6页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、精选优质文档-倾情为你奉上第1章:1、名词:解释器/解释程序 interpreter;编译器/编译程序 compiler;翻译器/翻译程序 translator。三者的区别与联系。虚拟机(如JAVA虚拟机JVM、Tiny语言虚拟机)是哪种程序?(1)解释器(也称为解析程序)则是只在执行程序时,才一条一条的解释成机器语言给计算机来执行,所以运行速度是不如编译后的程序运行的快的.(2)编译器(也称为编译程序)是把源程序的每一条语句都编译成机器语言,并保存成二进制文件,这样运行时计算机可以直接以机器语言来运行此程序,速度很快;(3)翻译器(也称为翻译程序)是一种系统程序,它将编写的程序翻译成另外一种
2、的一般来说等价的程序,主要包括和,也被认为是翻译程序。程序的最初形式称为源程序或者源代码,翻译后的形式被称为或者目标代码。大多数翻译程序是将高级语言编写的程序翻译为机器语言形式的可执行程序。但是也有些翻译程序将源程序翻译成其他高级语言或者字节码等中间形式。(4)解释器翻译源程序时不生成独立的目标程序,而编译器则将源程序翻译成独立的目标程序。解释器是另外种形式的语言处理器,它相当于不生成上面的目标程序,直接将输入“放到”源程序中,然后经过解释器,就得到了输出。通常情况下,编译过程比解释过程更快,但解释器能够有更好的错误诊断,因为解释器是逐句进行解释的。编.0译器和解释器可以结合起来进行处理,Ja
3、va语言处理器就是其中的代表,其过程是源程序经过翻译器处理后得到中间程序,也被称作字节码(bytecode),然后和输入共同加入到虚拟机(virtual machine)的前端,得到输出,其前一部分用到编译器,后一部分用到解释器,这样做的好处是一个机器解释的代码可以应用在另外的机器上,甚至可以延伸到网络上。2、编译过程图示 P5 图1-1第3章:1、Chomsky语言文法分类,程序语言的语法是哪一类,词法是哪一类,其产生式有什么特点。(教材3.6.3,但归纳得不好,参看课件)下面4种文法构成的语言类成为乔姆斯基层次(Chomskyhierarchy)(1)0型文法:(非限制的) (2)1型文法
4、:(上下文无关文法) (3)2型文法:(上下文无关文法) (4)3型文法:(正则文法) 2、名词:上下文无关文法的文法、语言、文法二义性、语言先天二义性、分析树、最左推导、最右推导。(1)上下文无关文法:在计算机科学中,若一个G = (N, , P, S) 的产生式规则都取如下的形式:V - w,则称之为上下文无关的,其中 VN ,w(N)* 。上下文无关文法取名为“上下文无关”的原因就是因为字符 V 总可以被字串 w 自由替换,而无需考虑字符 V 出现的上下文。一个形式语言是上下文无关的,如果它是由上下文无关文法生成的条目上下文无关语言。(2)语言:或称为记号的正规串集,上下文无关文法规则确
5、定了为由规则定义的结构的记号符号符合语法的串集(3)文法二义性:指可生成带有两个不同分析树的串的文法称为二义性文法。二义性问题不可判定:不存在一个算法,它能在有限步骤内,确切判定任给的一个文法是否为二义的;二义存在性证明是只要找到一个句子,该句子对应两个不同的语法树,即证明该文法是二义的。解决二义性的基本方法:设置一个规则,该规则可在每个二义性的情况下指出哪一个分析树(语法树)是正确的;将文法改变成一个强制正确分析树的构造格式。(4)语言先天二义性:如果产生上下文无关语言的每一个文法都是二义的,则说此语言是先天二义的。(5)分析树(语法树)(6)最左推导:是指它的每一步中最左的非终结符都要被替
6、换的推导。(7)最右推导:是指它的每一步中最右的非终结符都要被替换的推导。第4章:1、递归下降语法分析程序构造过程;对给定的一个上下文无关文法:(1)改写成EBNF;(4.1.2的两个例子,注意对有左公因子和直接左递归的产生式如何改写)(2)根据EBNF直接编写函数。重复类型:使用while循环编程如改写成EBNF的例子:EEA|B改为EBA编程:E() B(); while(token) /token是A的起始终结符 A(); 选择类型:使用if语句 如改写为EBNF的例子:EA|AB 改为EAB,中括号代表0或1次可选 编程:E() A(); if(token) /token是B能导出的起
7、始终结符 B(); 第6章:语义分析1、程序语言中的语义分析一般包括哪些内容? 答:变量定义和类型检查。其中变量定义中需要检查变量是否符合先定义后使用和变量的语义检查;在类型检查中:包括赋值语句、表达式、数组下标越界检查、函数调用(参数传递)的检查等。2、名词:属性文法(上下文无关文法中增加文法符号的语义属性,以及语义规则);静态属性;动态属性;继承属性;合成属性 (1)属性文法:是在上下文无关文法的基础上为每个文法符号(终结符或非终结符)配备若干个相关的“值“(成为属性)。这些属性代表与文法符号相关的信息,例如它的类型、值、代码序列、符号表内容等。属性和变量一样,可以进行计算和传递。(2)继
8、承属性、合成属性: 合成属性用于“自下而上“传递信息。在语法树中,一个结点的合成属性的值由其子结点的属性值确定。通常使用自底向上的方法在每个结点处使用语义最终计算合成属性的值。继承属性用于“自上而下”传递信息。在语法树中,一个结点的继承属性由此结点的父结点和或兄弟结点的某些属性确定。用继承属性来表示程序语言结构中的上下文依赖关系很方便。 (3)静态属性、动态属性: 属性的计算及将计算机与正在讨论的语言结构联系的过程称作属性的联编。在执行之前联编的属性称作静态的;而只在执行期间联编的属性是动态的。第7章:1、运行环境分类:完全静态环境、基于栈的、完全动态环境。 (1)完全静态环境:是最简单的运行
9、时环境类型,它的所有数据都是静态的,且执行程序期间在存储器中保持固定。这样的环境可用来实现没有指针或动态分配,且过程不可递归调用的语言。在这样的环境中,保留每个活动记录的簿记信息开销相对较小,而且也不需要再活动记录中保存有关环境的额外信息(而不是返回地址) (2)基于栈的运行环境:必须以一个基于栈的风格来分配活动的记录,即当进行一个新的过程调用(活动记录压入)时,每个新的活动记录都分配在栈的顶部,而当调用退出时则再次解除分配(活动记录弹出)。活动记录的栈,也叫运行时栈或调用栈就随着程序执行时发生的调用链生长或缩小。每个过程每次在调用栈上可以有若干个不同的活动记录,每个都代表一个不同的调用。这样的环境要求的簿记和变量访问的技术比完全静态环境要求复杂。特别地,活动记录中必须有额外的簿记信息。而且调用序列还包括设置和保存这个额外信息所需的步骤。2、基于栈的运行时环境图示:P267下面的图。3、能定义递归函数的语言,其运行环境一定至少是基于栈的。每个函数的一次调用,栈里会多一个函数的活动记录,来记录函数的一次运行的信息。4、Tiny语言程序的运行环境是完全静态环境。专心-专注-专业
限制150内