编译原理发展史

编译原理发展史
编译原理发展史

编译原理历史与发展

姓名:费张烨学号:09923206 指导老师:朱文华

基于形式语言理论中的有关概念来讨论编译实现问题。即

编译原理=形式语言理论+编译技术

编译原理是计算机专业的一门重要专业课,旨在介绍编译程序构造的一般原理和基本方法。内容包括语言和文法、词法分析、语法分析、语法制导翻译、中间代码生成、存储管理、代码优化和目标代码生成。编译原理是计算机专业设置的一门重要的专业课程。虽然只有少数人从事编译方面的工作,但是这门课在理论、技术、方法上都对学生提供了系统而有效的训练,有利于提高软件人员的素质和能力。

编译器是将一种语言翻译为另一种语言的计算机程序。编译器将源程序(source language)编写的程序作为输入,而产生用目标语言(target language )编写的等价程序。通常地,源程序为高级语言(high-level language ),如C或C + + ,而目标语言则是目标机器的目标代码(object code,有时也称作机器代码(machine code )),也就是写在计算机机器指令中的用于运行的代码。这一过程可以表示为:

源程序→编译器→目标程序

编译技术的历史

在20世纪40年代,由于冯·诺伊曼在存储-程序计算机方面的先锋作用,编写一串代码或程序已成必要,这样计算机就可以执行所需的计算。开始时,这些程序都是用机器语言(machine language )编写的。机器语言就是表示机器实

际操作的数字代码,例如:C7 06 0000 0002 表示在IBM PC 上使用的Intel 8x86处理器将数字2移至地址0 0 0 0 (16进制)的指令。

但编写这样的代码是十分费时和乏味的,这种代码形式很快就被汇编语言(assembly language )代替了。在汇编语言中,都是以符号形式给出指令和存储地址的。例如,汇编语言指令MOV X,2 就与前面的机器指令等价(假设符号存储地址X是0 0 0 0 )。汇编程序(assembler )将汇编语言的符号代码和存储地址翻译成与机器语言相对应的数字代码。

汇编语言大大提高了编程的速度和准确度,人们至今仍在使用着它,在编码需要极快的速度和极高的简洁程度时尤为如此。但是,汇编语言也有许多缺点:编写起来也不容易,阅读和理解很难;而且汇编语言的编写严格依赖于特定的机器,所以为一台计算机编写的代码在应用于另一台计算机时必须完全重写。

发展编程技术的下一个重要步骤就是以一个更类似于数学定义或自然语言的简洁形式来编写程序的操作,它应与任何机器都无关,而且也可由一个程序翻译为可执行的代码。例如,前面的汇编语言代码可以写成一个简洁的与机器无关的形式x = 2。

上世纪50年代,IBM的John Backus带领一个研究小组对FORTRAN语言及其编译器进行开发。但由于当时人们对编译理论了解不多,开发工作变得既复杂又艰苦。与此同时,Noam Chomsky开始了他对自然语言结构的研究。他的发现最终使得编译器的结构异常简单,甚至还带有了一些自动化。Chomsky的研究导致了根据语言文法的难易程度以及识别它们所需要的算法来对语言分类。正如现在所称的Chomsky架构(Chomsky Hierarchy),它包括了文法的四个层次:0型文法、1型文法、2型文法和3型文法,且其中的每一个都是其前者的特殊情况。2型文法(或上下文无关文法)被证明是程序设计语言中最有用的,而且今天它已代表着程序设计语言结构的标准方式。分析问题(parsing problem,用于上下

文无关文法识别的有效算法)的研究是在60年代和70年代,它相当完善的解决了这个问题。现在它已是编译原理中的一个标准部分。

有限状态自动机(Finite Automaton)和正则表达式(Regular Expression)同上下文无关文法紧密相关,它们与Chomsky的3型文法相对应。对它们的研究与Chomsky的研究几乎同时开始,并且引出了表示程序设计语言的单词的符号方式。

人们接着又深化了生成有效目标代码的方法,这就是最初的编译器,它们被一直使用至今。人们通常将其称为优化技术(Optimization Technique),但因其从未真正地得到过被优化了的目标代码而仅仅改进了它的有效性,因此实际上应称作代码改进技术(Code Improvement Technique)。

当分析问题变得好懂起来时,人们就在开发程序上花费了很大的功夫来研究这一部分的编译器自动构造。这些程序最初被称为编译器的编译器(Compiler-compiler),但更确切地应称为分析程序生成器(Parser Generator),这是因为它们仅仅能够自动处理编译的一部分。这些程序中最著名的是Yacc(Yet Another Compiler-compiler),它是由Steve Johnson在1975年为Unix系统编写的。类似的,有限状态自动机的研究也发展了一种称为扫描程序生成器(Scanner Generator)的工具,Lex(与Yacc同时,由Mike Lesk为Unix系统开发)是这其中的佼佼者。

在70年代后期和80年代早期,大量的项目都贯注于编译器其它部分的生成自动化,这其中就包括了代码生成。这些尝试并未取得多少成功,这大概是因为操作太复杂而人们又对其不甚了解。

编译器设计最近的发展包括:首先,编译器包括了更加复杂算法的应用程序它用于推断或简化程序中的信息;这又与更为复杂的程序设计语言的发展结合在一起。其中典型的有用于函数语言编译的Hindley-Milner类型检查的统一算法。其次,编译器已越来越成为基于窗口的交互开发环境(Interactive Development Environment,IDE)的一部分,它包括了编辑器、连接程序、调试程序以及项目管理程序。这样的IDE标准并没有多少,但是对标准的窗口环境进行开发已成为方向。另一方面,尽管近年来在编译原理领域进行了大量的研究,但是基本的编译器设计原理在近20年中都没有多大的改变,它现在正迅速地成为计算机科学课程中的中心环节。

在九十年代,作为GNU项目或其它开放源代码项目的一部分,许多免费编译器和编译器开发工具被开发出来。这些工具可用来编译所有的计算机程序语言。它们中的一些项目被认为是高质量的,而且对现代编译理论感性趣的人可以很容易的得到它们的免费源代码。

大约在1999年,SGI公布了他们的一个工业化的并行化优化编译器Pro64的源代码,后被全世界多个编译器研究小组用来做研究平台,并命名为Open64。Open64的设计结构好,分析优化全面,是编译器高级研究的理想平台。

编译原理的近期发展

随着大规模集成电路、网络通讯和其它数字信息技术的迅速发展,目前嵌入式系统己经广泛地渗透到科学研究、工程设计、军事技术、各类产业和商业文化艺术等各方面,在人们日常生活中的方方面面到处是嵌入式系统设备的身影,如手机、PDA、智能家电以及汽车电子等。随着国内外各种嵌入式产品的进一步开发和推广,嵌入式技术和人们的生活结合越来越紧密,人们日常的工作、学习和生活方式终将不可避免地逐步改变,嵌入式产品正在逐步形成时尚,在当今的信息社会中扮演越来越重要的角色。

嵌入式系统一般指的是非PC系统,它包括完全植入嵌入式硬件内部的为特定应用设计的专用计算机系统,以及相应的硬件。嵌入式系统以应用为中心的,它的软硬件可以根据需求进行裁减,以此来适应目标系统对外形尺寸、功能、可靠性、成本、功耗、外部接口等方面的严格要求。简单地说,嵌入式系统集操作系统、应用软件与硬件于一体,具有软件代码小、高度自动化、响应速度快等特点,因此特别适合要求实时和多任务的应用。

由于嵌入式系统资源有限,一般无法提供编译、汇编、链接等工具,同时也很难提供高级调试功能,因此嵌入式系统的应用软件一般不能直接在嵌入式系统平台上进行开发,而需要在交叉编译环境中开发。也就是说通常是在另外的开发平台上开发的,一般这种开发平台由通用的计算机系统和专用的嵌入式系统软件开发工具组成。

编译实现方式的发展主要分一下五类:手工、机器语言、汇编、系统程序设计语言、自动构造工具lex yacc gcc。推动编译技术发展的因素主要包括:语言范型(计算模式)、计算机体系结构语言范型主要包括:命令式(imperative language) 、应用式(applicative) 、基于规则的(rule-based)、面向对象的(object-oriented)、并

行计算(parallel computing)。

体系结构主要包括:万诺曼机体系结构、并行体系结构、嵌入系统。编译程序执行环境主要包括:批处理、交互环境、嵌入系统环境、并行编译技术、交叉编译。编译程序在一个机器(宿主机)上运行,产生另一个机器(目标机)的汇编语言。嵌入式系统中的应用程序正是借助这样的编译程序生成。

目标处理器MIPSX是MIPS系列芯片的种,属于RISC体系结构,来源于斯坦福大学的MIPS计划。由于该系列CPU不是采用加州大学伯克利分校的RISC窗口技术而是采用消除流水线各级互锁的微处理器MIPS(MicroprocessorWithout Interlocking Pipeline Stage)技术,因此而得名。MIPS是将IBM公司对优化编译程序的研究和加州大学伯克利分校的大规模集成电路的思想结合起来的产品。

由于RISC指令集的简单和整齐,为了达到更好地利用计算机的性能,MIPS 系列芯片中很好地应用了流水线策略。流水线是现代各类微处理器都采用的指令执行技巧,即将若干条指令的取指、译码和执行过程部分重叠在流水线中同时执行。以前在CISC计算机中,由于指令多而复杂,处理每条指令的所需时间不固定,当后面指令需要前条指令的结果时,往往造成指令互锁,因此无法实现流水线。而斯坦福大学的MIPS计划就是在编译的过程中,利用编译程序优化处理器的流水线以求提高处理器流水线的效率。由于采用了硬件连线控制来执行数目不多的简单指令,而且还能重组软件流水线,这样就减少了硬件复杂性。

通过这一个学期的学习,更让我知道了编译技术的重要性和实用性,激发了我的学习兴趣,对其他相关知识的学习打下了基础。编译原理这门课不仅仅在于它本身的理论价值,更在于为我们解决问题提供的思维方式和方法。作为软件工程的基础,我一定会在将来的时间里继续努力钻研这门课程。

费张烨09923206如有侵权请联系告知删除,感谢你们的配合!

编译原理概念_名词解释

编译过程的六个阶段:词法分析,语法分析,语义分析,中间代码生成,代码优化,目标代码生成 解释程序:把某种语言的源程序转换成等价的另一种语言程序——目标语言程序,然后再执行目标程序。 解释方式是接受某高级语言的一个语句输入,进行解释并控制计算机执行,马上得到这句的执 行结果,然后再接受下一句。 编译程序:就是指这样一种程序,通过它能够将用高级语言编写的源程序转换成与之在逻辑上等价的低级语言形式的目标程序(机器语言程序或汇编语言程序)。 解释程序和编译程序的根本区别:是否生成目标代码 句子的二义性(这里的二义性是指语法结构上的。):文法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)作为目标代码生成阶段地址分配的依据

哈工大机械原理课程设计

Harbin Institute of Technology 机械原理课程设计说明书 课程名称:机械原理 设计题目:产品包装生产线(方案1) 院系:机电学院 班级: 设计者: 学号: 指导教师: 设计时间:

一、绪论 机械原理课程设计是在我们学习了机械原理之后的实践项目,通过老师和书本的传授,我们了解了机构的结构,掌握了机构的简化方式与运动规律,理论知识需要与实践相结合,这便是课程设计的重要性。我们每个人都需要独立完成一个简单机构的设计,计算各机构的尺寸,同时还需要编写符合规范的设计说明书,正确绘制相关图纸。 通过这个项目,我们应学会如何收集与分析资料,如何正确阅读与书写说明书,如何利用现代化的设备辅助工作。这种真正动手动脑的设计有效的增强我们对该课程的理解与领会,同时培养了我们的创新能力,为以后机械设计课程打下了坚实的基础。 二、设计题目 产品包装生产线使用功能描述 图中所示,输送线1上为小包装产品,其尺寸为长?宽?高=600?200?200,小包装产品送至A处达到2包时,被送到下一个工位进行包装。原动机转速为1430rpm,每分钟向下一工位可以分别输送14,22,30件小包装产品。 产品包装生产线(方案一)功能简图 三、设计机械系统运动循环图 由设计题目可以看出,推动产品在输送线1上运动的是执行构件1,在A处把产品推到下一工位的是执行构件2,这两个执行构件的运动协调关系如图所示。 ?1?1 执行构件一 执行构件二 ?01?02 运动循环图

图中?1 是执行构件1的工作周期,?01 是执行构件2的工作周期,?02是执行构件2的动作周期。因此,执行构件1是做连续往复运动,执行构件2是间歇运动,执行构件2的工作周期?01 是执行构件1的工作周期T1的2倍。执行构件2的动作周期?02则只有执行构件1的工作周期T1的二分之一左右。 四、 设计机械系统运动功能系统图 根据分析,驱动执行构件1工作的执行机构应该具有的运动功能如图所示。运动功能单元把一个连续的单向传动转换为连续的往复运动,主动件每转动一周,从动件(执行构件1)往复运动一次,主动件转速分别为14,22,30rpm 14,22,30rpm 执行机构1的运动功能 由于电动机的转速为1430rpm ,为了在执行机构1的主动件上分别得到14、22、30rpm 的转速,则由电动机到执行机构1之间的总传动比i z 有3种,分别为 i z1= 141430 =102.14 i z2=221430=65.00 i z3=30 1430=47.67 总传动比由定传动比i c 和变传动比i v 两部分构成,即 i z1=i c i v1 i z2=i c i v2 i z3=i c i v3 3种总传动比中i z1最大,i z3最小。由于定传动比i c 是常数,因此,3种变传动比中i v1最大,i v3最小。为满足最大传动比不超过4,选择i v1 =4 。 定传动比为 i c = v1 z1i i =4102.14=25.54 变传动比为 i v2= c z2i i =54.2565=2.55 i v3= c z3i i =54 .2547.67=1.87 传动系统的有级变速功能单元如图所示。 i=4,2.55,1.87 有级变速运动功能单元

编译原理与技术01

编译原理与技术模拟试题一 一、填空题(20分) 1.1编译程序的工作过程可划分为词法分析、语法分析、语义分析、中间代码生成、代码优化、目标代码生成等 阶段,一般在语义分析阶段对表达式中运算对象的类型进行检查。 1.2 递归下降法和预测分析法是自上而下的语法分析方法。 1.3常用日的存储分配策略有静态存储分配和动态存储分配,其中,动态存储分配策略包括栈分配和堆分配。 1.4移进、归约是自下而上或LR 分析中的典型操作。 1.5对于数组M[1..6, 1..8],如果每个元素占k个存储单元,且起始地址为a,则以行为主序存放时元素M[4,4]的地址是__ a+27*k __,以列为主序存放时元素M[4,4]的地址是__ a+21k __。 二、单选题(20分) 2.1词法分析器不能 D 。 A. 识别出数值常量 B. 过滤源程序中的注释 C. 扫描源程序并识别记号 D. 发现括号不匹配 2.2给定文法A→bA|ca, C 是该文法的句子。 A. bba B. cab C. bca D. cba 2.3一个句型中的最左 B 称为该句型的句柄。 A. 短语 B. 直接短语 C. 非终结符号 D. 终结符号 2.4已知文法G[S]:S→A1A→A1|S0|0。与G等价的正规式是 C 。 A. 0(0|1)* B. 1*|0*1 C. 0(1|10)*1 D. 1(10|01)*0 2.5源程序是句子的集合, B 可以较好地反映句子的结构。 A. 线性表 B. 树 C. 完全图 D. 堆栈 2.6与逆波兰式ab+c*d+对应的中缀表达式是 B 。 A. a+b+c*d B. (a+b)* c+d C. (a+b)* (c+d) D. a+b*c+d 2.7识别上下文无关语言的自动机是 A 。 A. 下推自动机 B. NFA C. DFA D. 图灵机 2.8 B 是与规范归约(最左归约)互逆的一个过程。 A. 最左推导 B. 最右推导 C. 词法分析 D. 语义分析 2.9文法G产生的 A 的全体是该文法描述的语言, A. 句子 B. 短语 C. 终结符 D. 非终结符 2.10在表达式x:=y+1中, A 作为左值出现(其中,“:=”表示赋值)。 A. x B. y C. 1 D. y+1 三、简答题(30分) 3.1 (5分)请分别写出传值调用、引用调用方式下,下面代码的输出结果。 program main(input,output) procedure f(a,b) begin a := b - a; b := a * b + 1; end; begin x := 5; y := 10; f(y,x); print(x,y); end.

编译原理课程设计---C语言编译器的实现

扬州大学编译原理课程设计 学号:091202122 姓名: 专业:计算机科学与技术 课程:编译原理 指导教师:陈宏建

目录 一.程序简介与分析---------------------------------------------------------3 二.程序适用范围-----------------------------------------------------------3 三.词法分析---------------------------------------------------------------3 四.语法分析---------------------------------------------------------------4 五.语义分析和中间代码生成------------------------------------------------10 六.代码生成--------------------------------------------------------------12 七.流程图----------------------------------------------------------------13 八.实现------------------------------------------------------------------14 九.程序运行结果----------------------------------------------------------14 十.总结------------------------------------------------------------------18 十一.附录(源程序)--------------------------------------------------------18

编译原理与实践第三章答案

The exercises of Chapter Three 3.2 Given the grammar A →AA|(A)|ε a. Describe the language it generates; b. Show that it is ambiguous. [Solution]: a. Generates a string of balanced parenthesis, including the empty string. b. parse trees of ():3.3 Given the grammar exp → exp addop term | term addop → + | - term → term mulop factor| factor mulop → * factor → ( exp ) | number Write down leftmost derivations, parse trees, and abstract syntax trees for the following expression: a. 3+4*5-6 b. 3*(4-5+6) c. 3-(4+5*6) [Solution]: a.The leftmost derivations for the expression 3+4*5-6: Exp => exp addop term =>exp addop term addop term =>term addop term addop term=> factor addop term addop term =>3 addop term addop term => 3 + term addop term =>3+term mulop factor addop term =>3+factor mulop factor addop term A ()εA A A A A ()εε

编译原理及实现课后习题答案(1)

2.1 设字母表A={a},符号串x=aaa,写出下列符号串及其长度:x0,xx,x5以及A+和A*. x0=(aaa)0=ε| x0|=0 xx=aaaaaa |xx|=6 x5=aaaaaaaaaaaaaaa | x5|=15 A+ =A1∪A2∪…. ∪A n∪…={a,aa,aaa,aaaa,aaaaa…} A* = A0 ∪A1 ∪A2∪…. ∪ A n ∪…={ε,a,aa,aaa,aaaa,aaaaa…} 2.2 令∑={a,b,c},又令x=abc,y=b,z=aab,写出如下符号串及它们的长度:xy,xyz,(xy)3 xy=abcb |xy|=4 xyz=abcbaab |xyz|=7 (xy)3=(abcb)3 =abcbabcbabcb | (xy)3 |=12 2.3设有文法G[S]:S∷=SS*|SS+|a,写出符号串aa+a*规范推导,并构造语 法树。 S => SS* => Sa* => SS+a* => Sa+a* => aa+a*

2.4 已知文法G[Z]:Z∷=U0∣V1 、U∷=Z1∣1 、V∷=Z0∣0 ,请写出全部由此文法描述的只含有四个符号的句子。 Z=>U0=>Z10=>U010=>1010 Z=>U0=>Z10=>V110=>0110 Z=>V1=>Z01=>U001=>1001 Z=>V1=>Z01=>V101=>0101 2.5 已知文法G[S]:S∷=AB A∷=aA︱εB∷=bBc︱bc , 写出该文法描述的语言。 A∷=aA︱ε描述的语言: {a n|n>=0} B∷=bBc︱bc描述的语言:{b n c n|n>=1} L(G[S])={a n b m c m|n>=0,m>=1} 2.6 已知文法E∷=T∣E+T∣E-T 、T∷=F∣T*F∣T/F 、F∷=(E)∣i,写出该文法的开始符号、终结符号集合V T、非终结符号集合V N。 开始符号:E V t={+, - , * , / ,(, ), i} V n={E , F , T} 2.7 对2.6题的文法,写出句型T+T*F+i的短语、简单短语以及句柄。 短语:T+T*F+i T+T*F Array i i T T*F 简单短语:i T*F T 句柄:T

编译原理-第三版-何炎祥-第三章习题答案

编译原理作业三 T3-1构造自动机A ,使得它能识别形式如±dd*·d*E ±dd 的实数,其中,d ∈{0,1,2,3,4,5,6,7,8,9} T3-4将图所示NFA 确定化和最小化。 解:依据该NFSA 的状态图构造DFSA 如下表所示。 I I x I y [q 0] 0 [q 1] 1 [q 2] 2 [q 1] 1 [q 2,q 3] 3 [q 2] 2 [q 1,q 3] 4 [q 2,q 3] 3 [q 3,q 4] 5 [q 1,q 3] 4 [q 1,q 3] 4 [q 2,q 3,q 4] 6 [q 3] 7 [q 3,q 4] 5 [q 3,q 4] 5 [q 3] 7 [q 2,q 3,q 4] 6 [q 3,q 4] 5 [q 1,q 3] 4 [q 3] 7 [q 3,q 4] 5 [q 3] 7 DFSA 相应的状态图如下图所示: 6 1 2 3 4 5 7 X X y y y X X X X X y y y y S 3 1 4 2 5 6 7 ± d E d d d d ±

对DFSA 进行最小化: 已知K={0,1,2,3,4,5,6,7},K 可分为两个子集 K1={0,1,2,3,4,7}(非终态集) K2={5,6}(终态集) 在K1中,因为状态1只有x 输入,状态2只有y 输入,其他状态均有x ,y 输入,所以可以将K1分割为K11={0,3,4,7} K12={1} K13={2} 在K11中 {0}x=1∈K12 {3,4,7}x={5,6}?K2 故可将K11分割为 K111={0} K111={3,4,7} {3,4,7}x={5,6}?K2 {3,4,7}y={4,7}?K111 因此状态3,4,7是否等价取决于对K2的划分结果 在状态K2={5,6}中 {5,6}x=5∈K2 {5,6}y={4,7}?K111 所以状态5,6等价,所以状态3,4,7等价 所以,将原状态集合划分为{0}、{3,4,7}、{1}、{2}、{5,6} 最小化后的状态图为: S 1 2 3 5 X X X X y y y y

(完整版)编译原理及实现课后习题答案

编译原理及实现课后习题解答 2.1设字母表A={a},符号串x=aaa,写出下列符号串及其长度:x0,xx,x5 以及A+和A*. x0=(aaa)0=ε| x0|=0 xx=aaaaaa |xx|=6 x5=aaaaaaaaaaaaaaa | x5|=15 A+ =A1∪A2∪ …. ∪A n∪…={a,aa,aaa,aaaa,aaaaa…} A* = A0 ∪A1 ∪A2 ∪…. ∪A n ∪…={ε,a,aa,aaa,aaaa,aaaaa…} 2.2令∑={a,b,c},又令x=abc,y=b,z=aab,写出如下符号串及它们的长度:xy,xyz,(xy)3 xy=abcb |xy|=4 xyz=abcbaab |xyz|=7 (xy)3=(abcb)3 =abcbabcbabcb | (xy)3 |=12 2.3设有文法G[S]:S∷=SS*|SS+|a,写出符号串aa+a*规范推导,并构造语 法树。 S => SS* => Sa* => SS+a* => Sa+a* => aa+a*

S S S * S S + a a a 2.4 已知文法G[Z]:Z∷=U0∣V1 、U∷=Z1∣1 、V∷=Z0∣0 ,请写出全部由此文法描述的只含有四个符号的句子。 Z=>U0=>Z10=>U010=>1010 Z=>U0=>Z10=>V110=>0110 Z=>V1=>Z01=>U001=>1001 Z=>V1=>Z01=>V101=>0101 2.5已知文法G[S]:S∷=AB A∷=aA︱εB∷=bBc︱bc , 写出该文法描述的语言。 A∷=aA︱ε描述的语言: {a n|n>=0} B∷=bBc︱bc 描述的语言:{b n c n|n>=1} L(G[S])={a n b m c m|n>=0,m>=1} 2.6已知文法E∷=T∣E+T∣E-T 、T∷=F∣T*F∣T/F 、F∷=(E)∣i,写出该文法的开始符号、终结符号集合V T、非终结符号集合V N。 开始符号:E V t={+, - , * , / ,(, ), i} V n={E , F , T}

哈工大机械原理大作业_凸轮机构设计(第3题)

机械原理大作业二 课程名称:机械原理 设计题目:凸轮设计 院系:机电学院 班级: 1208103 完成者: xxxxxxx 学号: 11208103xx 指导教师:林琳 设计时间: 2014.5.2

工业大学 凸轮设计 一、设计题目 如图所示直动从动件盘形凸轮,其原始参数见表,据此设计该凸轮。 二、凸轮推杆升程、回程运动方程及其线图 1 、凸轮推杆升程运动方程(6 50π?≤ ≤) 升程采用正弦加速度运动规律,故将已知条件mm h 50=,6 50π =Φ带入正弦加速度运动规律的升程段方程式中得: ??? ?? ???? ??-=512sin 215650?ππ?S ;

?? ? ?????? ??-= 512cos 1601ππωv ; ?? ? ??= 512sin 1442 1?π ωa ; 2、凸轮推杆推程远休止角运动方程( π?π ≤≤6 5) mm h s 50==; 0==a v ; 3、凸轮推杆回程运动方程(9 14π ?π≤≤) 回程采用余弦加速度运动规律,故将已知条件mm h 50=,9 5'0π= Φ,6 s π = Φ带入余弦加速度运动规律的回程段方程式中得: ?? ? ???-+=)(59cos 125π?s ; ()π?ω--=59 sin 451v ; ()π?ω-=59 cos 81-a 21; 4、凸轮推杆回程近休止角运动方程(π?π 29 14≤≤) 0===a v s ; 5、凸轮推杆位移、速度、加速度线图 根据以上所列的运动方程,利用matlab 绘制出位移、速度、加速度线图。 ①位移线图 编程如下: %用t 代替转角 t=0:0.01:5*pi/6; s=50*((6*t)/(5*pi)-1/(2*pi)*sin(12*t/5)); hold on plot(t,s); t=5*pi/6:0.01:pi; s=50; hold on plot(t,s); t=pi:0.01:14*pi/9; s=25*(1+cos(9*(t-pi)/5));

编译原理第3章 习题解答

第3章习题解答 1.构造正规式1(0|1)*101相应的DFA. [答案] 先构造NFA ============================================================== 2.将下图确定化:

[答案] 重新命名,令VQ为A、QU为B、VZ为C、V为D、QUZ为E、Z为F。 ================================================================ 3.把下图最小化: [答案] (1)初始分划得Π0:终态组{0},非终态组{1,2,3,4,5}

对非终态组进行审查: {1,2,3,4,5}a {0,1,3,5} 而{0,1,3,5}既不属于{0},也不属于{1,2,3,4,5} ∵{4} a {0},所以得新分划 (2)Π1:{0},{4},{1,2,3,5} 对{1,2,3,5}进行审查: ∵{1,5} b {4} {2,3} b {1,2,3,5},故得新分划 (3)Π2:{0},{4},{1, 5},{2,3} {1, 5} a {1, 5} {2,3} a {1,3},故状态2和状态3不等价,得新分划 (3)Π3:{0},{2},{3},{4},{1, 5} 这是最后分划了 (4)最小DFA : ======================================= 4.构造一个DFA ,它接收Σ={0,1}上所有满足如下条件的字符串:每个1都有0直接跟在右边。并给出该语言的正规式和正规文法。 [答案] 按题意相应的正规表达式是0*(100*)*0* 构造相应的DFA ,首先构造NFA 为 用子集法确定化 可最小化,终态组为G1={C, D},非终态组为G2={S, A, B} 对于G2分析:f(S,0)=A, f(A,0)=A, 后继状态均属于G2 而f(B,0)=C, 后继状态属于G1 将G2分割成G21={S ,A}, G22={B}

编译原理知识点汇总

编译原理的复习提纲 1.编译原理=形式语言+编译技术 2.汇编程序: 把汇编语言程序翻译成等价的机器语言程序 3.编译程序: 把高级语言程序翻译成等价的低级语言程序 4.解释执行方式: 解释程序,逐个语句地模拟执行 翻译执行方式: 翻译程序,把程序设计语言程序翻译成等价的目标程序 5.计算机程序的编译过程类似,一般分为五个阶段: 词法分析、语法分析、语义分析及中间代码生成、代码优化、目标代码生成 词法分析的任务: 扫描源程序的字符串,识别出的最小的语法单位(标识符或无正负号数等) 语法分析是: 在词法分析的基础上的,语法分析不考虑语义。语法分析读入词法分析程序识别出的符号,根据给定的语法规则,识别出各个语法结构。 语义分析的任务是检查程序语义的正确性,解释程序结构的含义,语义分析包括检查变量是否有定义,变量在使用前是否具有值,数值是否溢出等。

语法分析完成之后,编译程序通常就依据语言的语义规则,利用语法制导技术把源程序翻译成某种中间代码。所谓中间代码是一种定义明确、便于处理、独立于计算机硬件的记号系统,可以认为是一种抽象机的程序 代码优化的主要任务是对前一阶段产生的中间代码进行等价变换,以便产生速度快、空间小的目标代码 编译的最后一个阶段是目标代码生成,其主要任务是把中间代码翻译成特定的机器指令或汇编程序 编译程序结构包括五个基本功能模块和两个辅助模块 6.编译划分成前端和后端。 编译前端的工作包括词法分析、语法分析、语义分析。编译前端只依赖于源程序,独立于目标计算机。前端进行分析 编译后端的工作主要是目标代码的生成和优化后端进行综合。独立于源程序,完全依赖于目标机器和中间代码。 把编译程序分为前端和后端的优点是: 可以优化配置不同的编译程序组合,实现编译重用,保持语言与机器的独立性。 7.汇编器把汇编语言代码翻译成一个特定的机器指令序列 第二章 1.符号,字母表,符号串,符号串的长度计算P18,子符号串的含义,符号串的简单运算XY,Xn, 2.符号串集合的概念,符号串集合的乘积运算,方幂运算,闭包与正闭包的概念P19,P20A0 ={ε} 3.重写规则,简称规则。非xx(V

编译原理发展史

编译原理历史与发展 姓名:费张烨学号:09923206 指导老师:朱文华 基于形式语言理论中的有关概念来讨论编译实现问题。即 编译原理=形式语言理论+编译技术 编译原理是计算机专业的一门重要专业课,旨在介绍编译程序构造的一般原理和基本方法。内容包括语言和文法、词法分析、语法分析、语法制导翻译、中间代码生成、存储管理、代码优化和目标代码生成。编译原理是计算机专业设置的一门重要的专业课程。虽然只有少数人从事编译方面的工作,但是这门课在理论、技术、方法上都对学生提供了系统而有效的训练,有利于提高软件人员的素质和能力。 编译器是将一种语言翻译为另一种语言的计算机程序。编译器将源程序(source language)编写的程序作为输入,而产生用目标语言(target language )编写的等价程序。通常地,源程序为高级语言(high-level language ),如C或C + + ,而目标语言则是目标机器的目标代码(object code,有时也称作机器代码(machine code )),也就是写在计算机机器指令中的用于运行的代码。这一过程可以表示为: 源程序→编译器→目标程序 编译技术的历史 在20世纪40年代,由于冯·诺伊曼在存储-程序计算机方面的先锋作用,编写一串代码或程序已成必要,这样计算机就可以执行所需的计算。开始时,这些程序都是用机器语言(machine language )编写的。机器语言就是表示机器实

际操作的数字代码,例如:C7 06 0000 0002 表示在IBM PC 上使用的Intel 8x86处理器将数字2移至地址0 0 0 0 (16进制)的指令。

哈工大机械原理试卷

一.填空题(本大题共7小题,每空1分, 共15分) 1. 按照两连架杆可否作整周回转,平面连杆机构分为 、 和 。 2. 平面连杆机构的 角越大,机构的传力性能越好。 3. 运动副按接触形式的不同,分为 和 。 4.直齿圆柱齿轮正确啮合条件是两齿轮的 和 分别相等。 5. 凸轮从动件按其端部的形状可分为 从动件、 从动件和 从动件动件。 6. 机构具有确定运动的条件是: 。 7.通过将铰链四杆机构的转动副之一转化为移动副时,则可得到具有移动副的 机构、 机构、摇块机构和 机构。 二.选择题(本大题共15小题,每小题1分,共15分) 1. 要实现两相交轴之间的传动,可采用 传动。 A .直齿圆柱齿轮 B .斜齿圆柱齿轮 C .直齿锥齿轮 D .蜗杆蜗轮 2. 我国标准规定,对于标准直齿圆柱齿轮,其ha*= 。 A .1 B .0.25 C .0.2 D .0.8 3. 在机械传动中,若要得到大的传动比,则应采用 传动。 A. 圆锥齿轮 B. 圆柱齿轮 C. 蜗杆 D. 螺旋齿轮 4. 当四杆机构处于死点位置时,机构的压力角为 。 A .0° B .90° C .45° D .15° 5. 一般情况凸轮机构是由凸轮、从动件和机架三个基本构件组成的 机构。 A .转动副 B .移动副 C .高副 D .空间副 6. 齿轮的渐开线形状取决于它的 直径。 A .齿顶圆 B .分度圆 C .基圆 D .齿根圆 7. 对于滚子从动件盘形凸轮机构,滚子半径 理论轮廓曲线外凸部分的最小曲率半径。 A .必须小于 B .必须大于 C .可以等于 D .与构件尺寸无关 8. 渐开线直齿圆柱齿轮中,齿距p ,法向齿距n p ,基圆齿距b p 三者之间的关系为 。 A.p p p n b <= B.p p p n b << C.p p p n b >> D. p p p n b => 9. 轻工机械中常需从动件作单向间歇运动,下列机构中不能实现该要求的是 。 A.棘轮机构 B.凸轮机构 C.槽轮机构 D.摆动导杆机构 10. 生产工艺要求某机构将输入的匀速单向转动,转变为按正弦规律变化的移动输出,一种可供选择的机构是 。

编译原理和技术期末考试复习题

2.1 考虑文法G[S],其产生式如下: S→(L)|a L→L,S|S (1)试指出此文法的终结符号、非终结符号。 终结符号为:{(,),a,,,} 非终结符号为:{S,L} 开始符号为:S (2)给出下列各句子的分析树: ① ②(a,(a,a))③ (a,((a,a),(a,a))) (a,a) (3)构造下列各句子的一个最左推导: ① (a,a) S (L) (L,S) (S,S) (a,S) (a,a) ② (a,(a,a)) S (L) (L,S) (S,S) (a,S) (a,(L) (a,(L,S)) (a,(S,S)) (a,(a,S)) (a,(a,a)) ③ (a,((a,a),(a,a))) S (L) (L,S) (S,S) (a,S) (a,(L)) (a,(L,S)) (a,(S,S)) (a,((L),S)) (a,((L,S),S)) (a,((S,S),S)) (a,((a,S),S)) (a,((a,a),S)) (a,((a,a),(L))) (a,((a,a),(L,S))) (a,((a,a),(S,S))) (a,((a,a),(a,S))) (a,((a,a),(a,a))) (4)构造下列各句子的一个最右推导: ①(a,a) S (L) (L,S) (L,a) (S,a) (a,a) ②(a,(a,a)) S (L) (L,S) (L,(L)) (L,(L,S)) (L,(L,a)) (L,(S,a)) (L,(a,a)) (S,(a,a)) (a,(a,a) ③(a,((a,a),(a,a)) S (L) (L,S) (L,(L)) (L,(L,S)) (L,(L,(L))) (L,(L,(L,S))) (L,(L,(L,a))) (L,(L,(S,a))) (L,(L,(a,a))) (L,(S,(a,a))) (L,((L),(a,a))) (L,((L,S),(a,a))) (L,((L,a),(a,a))) (L,((S,a),(a,a))) (L,((a,a),(a,a))) (S,((a,a),(a,a))) (a,((a,a),(a,a))) (5)这个文法生成的语言是什么? L(G[S]) = (α1,α2,...,αn)或a 其中αi(1≤i≤n),即L(G[S])是一个以a为原子的纯表,但不包括空表。 2.2 考虑文法G[S] S→aSbS|bSaS|ε (1)试说明此文法是二义性的。可以从对于句子abab有两个不同的最左推导来说明。 S aSbS abS abaSbS ababS abab S aSbS abSaSbS abaSbS ababS abab 所以此文法是二义性的。 (2)对于句子abab构造两个不同的最右推导。 S aSbS aSbaSbS aSbaSb aSbab abab S aSbS aSb abSaSb abSab abab (3)对于句子abab构造两棵不同的分析树。

编译原理第二版课后习答案

《编译原理》课后习题答案第一章 第 1 章引论 第 1 题 解释下列术语: (1)编译程序 (2)源程序 (3)目标程序 (4)编译程序的前端 (5)后端 (6)遍 答案: (1)编译程序:如果源语言为高级语言,目标语言为某台计算机上的汇编语言或机器语言,则此翻译程序称为编译程序。 (2)源程序:源语言编写的程序称为源程序。 (3)目标程序:目标语言书写的程序称为目标程序。 (4)编译程序的前端:它由这样一些阶段组成:这些阶段的工作主要依赖于源语言而与目标机无关。通常前端包括词法分析、语法分析、语义分析和中间代码生成这些阶 段,某些优化工作也可在前端做,也包括与前端每个阶段相关的出错处理工作和符 号表管理等工作。 (5)后端:指那些依赖于目标机而一般不依赖源语言,只与中间代码有关的那些阶段,即目标代码生成,以及相关出错处理和符号表操作。 (6)遍:是对源程序或其等价的中间语言程序从头到尾扫视并完成规定任务的过程。 第 2 题 一个典型的编译程序通常由哪些部分组成?各部分的主要功能是什么?并画出编译程 序的总体结构图。 答案: 一个典型的编译程序通常包含 8 个组成部分,它们是词法分析程序、语法分析程序、语义分析程序、中间代码生成程序、中间代码优化程序、目标代码生成程序、表格管理程序和错误处理程序。其各部分的主要功能简述如下。 词法分析程序:输人源程序,拼单词、检查单词和分析单词,输出单词的机表达形式。 语法分析程序:检查源程序中存在的形式语法错误,输出错误处理信息。 语义分析程序:进行语义检查和分析语义信息,并把分析的结果保存到各类语义信息表中。 中间代码生成程序:按照语义规则,将语法分析程序分析出的语法单位转换成一定形式 的中间语言代码,如三元式或四元式。 中间代码优化程序:为了产生高质量的目标代码,对中间代码进行等价变换处理。 目标代码生成程序:将优化后的中间代码程序转换成目标代码程序。 表格管理程序:负责建立、填写和查找等一系列表格工作。表格的作用是记录源程序的 各类信息和编译各阶段的进展情况,编译的每个阶段所需信息多数都从表格中读取,产生的中间结果都记录在相应的表格中。可以说整个编译过程就是造表、查表的工作过程。需要指出的是,这里的“表格管理程序”并不意味着它就是一个独立的表格管理模块,而是指编译程序具有的表格管理功能。 错误处理程序:处理和校正源程序中存在的词法、语法和语义错误。当编译程序发现源

哈工大机械原理大作业

H a r b i n I n s t i t u t e o f T e c h n o l o g y 机械原理大作业一 课程名称:机械原理 设计题目:连杆机构运动分析 院系:机电学院 班级:1208105 分析者:殷琪 学号: 指导教师:丁刚 设计时间: 哈尔滨工业大学 设计说明书 1 、题目 如图所示机构,一只机构各构件的尺寸为AB=100mm,BC=,CE=,BE=,CD=,AD=,AF=7AB,DF=,∠BCE=139?。构件1的角速度为ω1=10rad/s,试求构件2上点E的轨迹及构件5的角位移、角速度和角加速度,并对计算结果进行分析。 2、机构结构分析

该机构由6个构件组成,4和5之间通过移动副连接,其他各构件之间通过转动副连接,主动件为杆1,杆2、3、4、5为从动件,2和3组成Ⅱ级RRR 基本杆组,4和5组成Ⅱ级RPR 基本杆组。 如图建立坐标系 3、各基本杆组的运动分析数学模型 1) 位置分析 2) 速度和加速度分析 将上式对时间t 求导,可得速度方程: 将上式对时间t 求导,可得加速度方程: RRR Ⅱ级杆组的运动分析 如下图所示 当已知RRR 杆组中两杆长L BC 、L CD 和两外副B 、D 的位置和运动时,求内副C 的位置、两杆的角位置、角运动以及E 点的运动。 1) 位置方程 由移项消去j ?后可求得i ?: 式中, 可求得j ?: E 点坐标方程: 其中 2) 速度方程 两杆角速度方程为 式中, 点E 速度方程为 3) 加速度方程 两杆角加速度为 式中, 点E 加速度方程为 RPR Ⅱ级杆组的运动分析 (1) 位移方程 (2)速度方程 其中 (3)加速度方程 4、 计算编程 利用MATLAB 软件进行编程,程序如下: % 点B 和AB 杆运动状态分析 >>r=pi/180; w 1=10; e 1=0; l 1=100; Xa=0; Ya=0;

编译原理词法分析器(C语言实现)

词法规定 可识别关键字共6个:int real if then else while 除关键字外,以字母开头,后跟字母或数字的符号串为标识符,超过64个字符出错处理 可识别分隔符共8个:( ) [ ] { } , ; 可识别操作符共11个:+ - * / = == < <= > >= <> 以“//”开头到该行尾部为注释,超过255个字符出错处理 其他字符均当作空白处理 可识别的数值有整数和实数(用正规式描述): digit:0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 整数:digit+ (不能超过255个字符,超过程序崩溃,忘了写这点了) exponent:E ( + | - | ? ) digit+ fraction:. digit+ 实数:digit+ exponent | digit+ fraction ( exponent | ? ) (同上,不能超过255个字符,超过程序崩溃) 程序说明 可以同时拖动多个源文件到程序EXE上,将文件名作为参数传递给程序进行执行,无参时默认分析程序目录下的in.ks文件 在源文件目录输出分析报告“源文件名_WordReport.html”,彩色高亮显示源代码,鼠标置于单词上时,可以查看提示信息 程序界面显示信息及是否输出分析报告可在word.h文件中调整

单词DFA状态图描述 圆形是就绪状态(State 0000),圆角矩形是其它状态,只有状态标号的是中间状态,有文字说明的是终结状态,状态标号前带有“~”的状态为多读了一个字符。 5001 注释 7003 ~3004 除号 图2-1 注释及除号识别状态图 7001~1001 尚未识别标识符 图2-2 标识符识别状态图 70027008 7007 7009 7010 ~2001 整数~2002 实数 图2-3 数值类型单词识别状态图 其它更为简单的单词的状态图没有绘出。

哈工大机械原理课程—产品包装线方案9

哈工大机械原理课程—产品包装线方案9

H a r b i n I n s t i t u t e o f T e c h n o l o g y 课程设计说明书(论文) 课程名称:机械原理课程设计 设计题目:产品包装生产线(方案9) 院系:机电工程学院 班级: 设计者: 学号: 指导教师:陈明 设计时间:2013.07.01-2013.07.05

哈尔滨工业大学 目录 一.题目要求 (3) 二.题目解答 1.工艺方法分析 (3) 2.运动功能分析及图示 (4) 3.系统运动方案的拟定 (8) 4.系统运动方案设计 (13) 5.运动方案执行构件的运动时序分析 (19) 6.运动循环图 (21)

产品包装生产线(方案9) 1.题目要求 如图1所示,输送线1上为小包装产品,其尺寸为长*宽*高=500*200*200,采取步进式输送方式,将第一包和第二包产品送至托盘A上(托盘A上平面与输送线1的上平面同高),每送一包产品至托盘A上,托盘A下降200mm。当第三包产品送到托盘A上后,托盘A上升405mm、顺时针旋转90°,把产品推入输送线2。然后,托盘A逆时针回转90°、下降5mm恢复至原始位置。原动机转速为1430rpm,产品输送量分三档可调,每分钟向输送线2分别输送6、12、18件小包装产品。 图1功能简图

2.题目解答 (1)工艺方法分析 由题目和功能简图可以看出,推动产品在输送线1上运动的是执行机构1,在A处使产品上升、转位的是执行构件2,在A处把产品推到下一个工位的是执行构件3,三个执行构件的运动协调关系如图所示。 下图中T1为执行构件1的工作周期,T2是执行构件2的工作周期,T3是执行构件3的工作周期,T3’是执行构件3的动作周期。由图2可以看出,执行构件1是作连续往复移动的,而执行构件2则有一个间歇往复运动和一个间歇转动,执行构件3作一个间歇往复运动。三个执行构件的工作周期关系为:3T1= T2= T3。执行构件3的动作周期为其工作周期的1/20。 图2 运动循环图 (2)运动功能分析及运动功能系统图 根据前面的分析可知,驱动执行构件1工作的执行机构应该具有运动功能如

第三章 编译原理

第3章词法分析 本章将基于第二章介绍的几种典型的自动机,用自动机或表的方式实现词法分析器的设计。词法分析器在编译器中的位置与作用如图3.1所示。 图 3.1 词法分析器在编译器中的位置与作用 编译器首先识别出源程序中每个单词,然后再分析每个语句并翻译其意义。识别单词的任务是由词法分析器(也称为扫描器——scanner)完成的。它把识别出来的单词变成机内表示形式交给语法分析器。 3.1.单词的种类与机内表示法 3.1.1.单词的种类 根据单词在高级语言中的作用,可分为以下几种类型: (1)关键字:又称为基本字、语言字。在语言中若规定不允许用关键字作标识符,又称为保留字。如main,while,if,else,?等。 (2)标识符:如变量名、数组名、过程名、函数名等。 (3)常数:分为整型、实型、布尔型、字符型等。 (4)运算符:如算术运算符、逻辑运算符、关系运算符。 (5)界限符:如 ,、;、?、?、?、?、=、[、] 等。 (6)编辑符:如空格符、回车符、换行符、制表符等。

3.1.2.单词的机内表示法 单词的机内表示采用如下的长度统一的二元形式(token字): (单词种别码,单词语义值) 其中, (1)种别码表示单词的种类。 对单词怎样进行编码有多种方法。基本原则是最大限度地把各个单词区别开来。一般的方法是让每种单词对应一个整数码。 (1.1)关键字if、else、while、…,通常是一字一种,并且最好把这些关键字按字典顺序排序,然后按序编号,以便在识别出一个关键字时,可以很容易地查到它的种别码。 (1.2)各类标识符统一做为一种单词。 (1.3)常数有好几种类型,通常按类型编种别码。 (1.4)界限符和运算符通常是按一符一种来编码。 (2)单词语义值可以是下述情况之一: (2.1)语义值是单词本身符号(串)的机内编码(例如ASCII码)。 如果单词是标识符,则它的语义值是标识符自身字符串。由于要求token的长度统一,所以需要对标识符的长度加以限制,如长度在8字符以内。这意味着对较长的标识符需要截断。 对于常数来说,其语义值就是常数本身的二进制数值。 对于关键字、界限符之类的一字一码、一符一码的单词,由于它们的种别码已经唯一地表示了这些单词,因此,它们的语义值就不用给出。 (2.2)语义值是一指示器,它表示标识符(或常数)在符号表(或常数表)中的入口位置。这意味着扫描器需要兼管查填符号表的工作。 对于关键字、界限符的语义值的处理同(2.1)。 为了便于扫描器在构造单词的二元式时能方便地找到该单词的种别码,需要恰当地给程序语言的单词编码,并且用合适的数据结构存贮它们。具体情况可根据编译器的规模参考《数据结构》的有关内容。本讲义在3.3节将给出一种简单的解决方案供参考。 3.2.词法分析器的任务 扫描器的基本任务是从左向右扫描每行源程序的符号,拼成单词,换成统一的内部表示(token),然后送给语法分析程序。具体地说: (1)组织源程序的输入。 (2)按规则拼单词,并转换成二元形式。(单词种别码,单词自身值) (3)删除注解行。 (4)删除空格及无用符号。(如回车符、字符常数的引号等) (5)行记数,列记数(列记数用于定位词法错误) (6)列表打印源程序 (7)发现并定位词法错误 (8)如果需要,还要建立符号表、常数表等表格。 分析的源程序,即词法分析器的输入是如图 3.2所示的一个简单的C语言程序。词法分析器的输出为token串。

相关文档
最新文档