编译原理论文(精选8篇)
报告完成日期 2018.5.30
一. 组内分工与贡献介绍
二. 系统功能概述;
我们使用了自动生成系统来完成我们的实验内容。我们设计的系统在完成了实验基本要求的前提下,进行了一部分的扩展。增加了声明变量类型、类型赋值判定和声明的变量被引用时作用域的判断。从而使得我们的实验结果呈现的更加清晰和易懂。
三. 分系统报告;
一、词法分析子系统
词法的正规式:
标识符
<字母>(<字母>|<数字字符>)* 十进制整数
0 |(1|2|3|4|5|6|7|8|9)(0|1|2|3|4|5|6|7|8|9)* 八进制整数 0(1|2|3|4|5|6|7)(0|1|2|3|4|5|6|7)* 十六进制整数 0x(0|1|2|3|4|5|6|7|8|9|a|b|c|d|e|f)(0|1|2|3|4|5|6|7|8|9|a|b|c|d|e|f)* 运算符和分隔符 +| * | / | > | < | = |(|)| <=|>=|==; 对于标识符和关键字: A5—〉 B5C5 B5—〉a | b |⋯⋯| y | z C5—〉(a | b |⋯⋯| y | z |0|1|2|3|4|5|6|7|8|9)C5|ε 综上正规文法为: S—〉I1|I2|I3|A4|A5 I1—〉0|A1 A1—〉B1C1|ε C1—〉E1D1|ε D1—〉E1C1|ε
E1—〉0|1|2|3|4|5|6|7|8|9 B1—〉1|2|3|4|5|6|7|8|9 I2—〉0A2 A2—〉0|B2 B2—〉C2D2 D2—〉F2E2|ε E2—〉F2D2|ε
C2—〉1|2|3|4|5|6|7 F2—〉0|1|2|3|4|5|6|7 I3—〉0xA3 A3—〉B3C3 B3—〉0|1|2|3|4|5|6|7|8|9|a|b|c|d|e|f C3—〉(0|1|2|3|4|5|6|7|8|9|a|b|c|d|e|f)|C3|ε
A4—〉+ |-| * | / | > | < | = |(|)| <=|>=|==; A5—〉 B5C5 B5—〉a | b |⋯⋯| y | z C5—〉(a | b |⋯⋯| y | z |0|1|2|3|4|5|6|7|8|9)C5|ε
状态图
流程图:
词法分析程序的主要数据结构与算法
考虑到报告的整洁性和整体观感,此处我们仅展示主要的程序代码和算法,具体的全部代码将在整体的压缩包中一并呈现
另外我们考虑到后续实验中,如果在bison语法树生成的时候推不出目标的产生式时,我们设计了报错提示,在这个词的位置出现错误提示,将记录切割出来的词在code.txt中保存,并记录他们的位置。
以下是我们的主要代码:
进制的识别:
结果展示:
二、语法分析子系统
根据选择的语法分析方法进行描述
我们使用了递归子程序发,并且对原有的产生式进行了改写,改写后的结果如下: P→LP1|L L→S
S→id=E|{P}|if C then S | if C then S
1else S2 | while C do S1 C→E1C’
C’→>E2| E→int8E’| int10E’| int16E’| idE’|T E’→+T|-T||+TE’|-TE’ T→int8T’| int10T’| int16T’| idT’|F T’→*F|/F|*FT’|/FT’ F→(E)|int8|int10|int16|id 简化的语法图: S的语法图: C的语法图: E的语法图: T的语法图: F的语法图: 流程图: 语法分析子系统的主要数据结构与算法 我们采用了自动生成技术,同样在这里也是展示主要的核心功能代码,全部的代码展示在压缩包中: 我们在设计时,实现了产生式对应的字符串同时标识产生式定义的int值 辅助程序: 生成语法树的程序: 1.树节点: 2.创建新节点 3.创建实数类型新节点 4.创建标识符类型新节点 5.输出语法树 三、三地址码生成器 算法的基本思想: 我们增加了声明变量类型、类型赋值判定和声明的变量被引用时作用域的判断。从而使得我们的实验结果呈现的更加清晰和易懂。 在报错的时候,我们会呈现类型、作用域和赋值三种的问题的报错信息。 流程图: 算法展示: 四、实验体会 这次实验其实总的来说是让我们更加清晰的理解到了我们所学的内容。有时候我们上课听讲,课下复习写作业的时候,其实看似掌握了所学内容,但实际上并没有亲身体会的操作很难让我们深刻的理解其中的相关意义。通过这次实验,我们能够从根源处了解到了我们所学的内容,并且基于我们理解之后的输出。比如词法分析不能采用空格来区分单词,因为存在加减乘除等运算符和分隔符,使用空格来区分可能会造成错误的分解。又比如我们再在程序设计中,常常体会到效率的重要性。影响词法分析的效率的主要因素是各个状态的分支如何规划。如果每个进来的单词都能在最短的时间和最少的匹配次数内找到其入口,则效率将得到很大程度上的提高。所以由此我们产生了声明变量类型、赋值和作用域的想法,将其放在最后来进行判断,这样可以提高整体的执行效率。 另外,这次小组成员彼此不在一个班级,这样从某一方面来说,也加强了我们互相快速熟识并团结协作的能力,有了这种体验,我想我们在今后的生活中,面对这种情况的时候,将会变得更加有经验。 五、源程序 词法分析器: 输入结果: 输出结果: 语义分析结果: 输入: 第二组数据的输入: 输出: 三地址码的输入: 第二组数据的输入: 由于编译程序的庞大和复杂性, 编译原理课程内容包含了很多特殊的算法和思想, 如自上而下语法分析的LL (1) 分析算法、自下而上的LR (1) 语法分析算法、词法分析的NFA向DFA转化的子集法, 化简DFA的分割算法、FIRST和FOLLOW集合计算法等。该课程还高度依赖于学生在低年级所学的专业基础课程, 如程序设计语言、数据结构等, 对学生而言, 在一开始进入课程学习时就必须掌握一定程度的相关专业知识, 也要求对学习的难度有一定的思想准备及具备化解困难能力。而学生看到这样的困难往往就由于基础知识薄弱而产生畏难心理, 加上对编译知识技术学习必要性缺乏认知, 也会逐步失去学习兴趣, 走上厌学的道路。 理论教学和实践脱轨, 也是编译教学的普遍现象。因为编译理论的复杂抽象, 学生在花了很大力气理解和吸收理论知识之后, 往往感觉到用于实践更为困难。编译算法的跟踪执行过程, 无法像数据结构的算法学习一样简单, 因为很多中间结果根本无法输出。而教学课时所限, 对完整编译器的设计各个环节之间接口的介绍, 一些算法的具体编程设计, 老师无法在课内一一讲述, 学生也模模糊糊。实践内容的难度, 也让学生对无法在短期课内学习中真正融会贯通掌握编译技术。 二、教学方法改革思路 1、科学引导, 明确教学目标, 提升学习兴趣 教师通过精心备课, 针对编译程序的各个功能环节, 引导学生积极发现内在的联系和规律, 帮助学生建立起对编译程序的宏观认识, 抓住知识体系的主线, 教师再逐一将个环节的重点难点问题指出。学生在已掌握知识的基础上思考如何解决问题, 教师再提示如何改进, 从而启发学生积极思维。学生有了思考的着力点, 自然就产生了学习的兴趣。对于持有学习编译技术无用观念的学生, 教师需明确学习的目标。编译原理与技术, 涉及的操作系统、计算机指令系统等内容, 对于编程技术的提高大有裨益, 它的一些算法和实现技术同时也被某些应用软件设计采用。如:应用与文本编辑器的正规式和有限自动机, 字符串查找中使用有限自动机, 网络应用中使用必经节点算法、网络协议使用文法来定义等等。 2、教学内容优化, 提升课堂教学质量 对于知识点复杂抽象, 内容繁多的编译课程, 教师在备课过程势必要熟悉吃透教材, 对教材内容进行组合优化。 (1) 选择合适的教材与教学手段 被计算机专业人士誉为“龙书”的《Compilers Principles, Techniques and Tools》 (中文译名为《编译原理》, 机械工业出版社出版) , 虽然被很多学者推崇, 但并不适合作为本科学生学习的教材, 因其学科大全式的介绍, 涵盖过多的内容且理解难度更大。国内比较好的编译原理经典教材也有很多, 可根据教师自身教学设计的精选教材。 (2) 优化教学过程 1) 由于C语言是我们学生的基础入门编程语言, 所以授课的程序设计语言均为C语言背景。一般的编译原理教材中, 很少以某类具体程序语言为例, 而以某些字符如:A、B、C代替, 形式化语言。学生在接受知识的时候就出现了偏差, 因为编程和现在所学的符号无法统一。所以选择一门学生有较好基础的语言配合讲解很必要。 而教师也可以将C编程过程中遇到的易错、难学的问题从编译的角度加以分析, 对学生分析和解决问题也会有所启发。而对编译原理的输入了解也能让学生在编程时更注意错误的避免以及优化编程, 强化了编程能力。 2) 抽象内容形象化。对那些学生难理解的抽象概念, 讲解时可举学生最熟悉的一些实例类比, 避免学生的死记硬背。例如, 编译过程包括的词法分析、语法分析、语义分析和中间代码生成、代码优化、目标代码生成五个阶段。记忆这个知识不难, 但是如何理解划分阶段的依据, 我们就可以举翻译英文句子的过程来类比。比如, 翻译“I am a student”成中文, 首先做词法分析, 按英语构词规则, 共四个英语单词, 同时检查单词拼写是否错误。然后根据英语的语法规则做语法分析, 对上一阶段形成的单词进行分析、识别, 检查语法正确性, 判断能否组成一个符合英语语法的句子。接着是语义分析, 分析句子含义, 并用汉语表示出来。最后修饰译文, 综合考虑汉语语法的相关规则和上下文的关系, 修饰初步翻译后的句子, 形成译文“我是一名学生”。 3) 融合原理与技术, 于各个章节均穿插“PL/0语言编译程序”模型的对应实现过程讲解, 学习技术之后学习实例, 学生更容易掌握知识, 也能初步建立属于自己的知识体系模型。 4) 将大问题缩小, 分解模拟编译技术的实现如词法分析、算符优先分析程序、制导翻译等过程。通过编写一些小的例程, 对程序算法进行详解和细节演示, 学生通过庖丁解牛式的吃透程序, 就能够好的掌握编译程序的设计, 从而自己写出编译程序。 5) 实施多媒体辅助教学形式, 使用课件、SNL、PCMCAI等编译实例等编译原理教学辅助软件, 将抽象问题形象化, 便于学生理解和运用知识点, 在课下也能利用这些课件自动生成各个分析程序, 加深基本原理和实现算法的理解。 建立本课程新的课程教学理念、课程价值、教学技术等尚需时日, 其过程需要不但需要教师付出大量劳动, 与时俱进的跟进新技术的发展, 不断探索和创新, 还需要好的教材、好的课程实验设计。 摘要:编译原理的理论难度和抽象性, 导致教师与学生的教学两难, 但编译原理作为计算机专业非常重要的一门专业基础课程, 掌握和学好编译程序的基本架构、设计原理和技术, 对计算机专业学生学习和掌握软件设计技术和实现技术, 又有着非常重要的意义。如何让学生产生对该门课程的学习兴趣, 消除学生的畏难情绪, 采用何种教学手段合理组织教学过程可以提高学生对知识的吸收度和应用能力, 是本文主要的探讨内容。 关键词:编译原理,教学 参考文献 [1]何炎祥、伍春香:《现代教学理论指导下的“编译原理”教学综合改革》, 《计算机教育》, 2005, (3) :10-13。 [2]陈意云、张昱、郑启龙:《“编译原理”的教学与实际相结合的探讨》, 《教育与现代化》, 2005, (12) :32-36。 关键词:编译原理;网络;作业提交 中图分类号:TP311.52 文献标识码:A 文章编号:1674-7712 (2012) 12-0085-01 一、系统的主要功能分析 《编译原理》课程作业网上提交系统主要为《编译原理》课程提供网上的作业管理功能,主要分为管理员、教师和学生三个部分。 (一)管理员部分的主要功能 1.管理员登录功能:根据管理员权限进入管理员相应的页面。2.公告管理功能:管理员可以对公告进行查看、增加、删除、修改等功能。3.修改密码功能:管理员可以修改密码。4.作业管理功能:实现作业信息的删除、修改、查询的功能。5.教师管理:实现教师信息的增加、删除、修改、查询的功能 (二)教师部分的主要功能 1.教师登录功能:根据教师权限进入教师相应的页面的功能。2.修改个人资料功能:可以修改个人的信息。3.学生管理功能:能够实现学生信息的查看、添加、修改、删除、搜索的功能。4.在线布置作业功能:发布作业信息。5.在线批改作业的功能:在线给出相应的作业的点评和分数 (三)学生部分的主要功能 1.学生登录功能:根据学生权限进入学生相应的页面的功能。2.查看公告的功能:可以查看公告信息。3.修改个人资料的功能:修改个人信息。4.作业信息列表:学生查看、下载老师发布的作业题目。5.上传作业:上传做好的作业。1.4管理员信息表和作业信息表 二、教师模块的设计与实现 (一)教师修改个人信息模块的设计与实现 1.教师修改个人信息的功能描述:功能描述:本模块主要实现的功能是教师能够对自己的信息进行修改。2.教师对自己的信息进行修改的输入、输出:输入:更改的教师的基本信息。输出:个人信息修改成功或者失败的页面。 (二)教师布置作业模块的设计与实现 1.教师布置作业模块的功能设计:功能设计:用户登录确定为教师后,teacherlist.do对数据库进行查询,将查询值绑定给request转发到显示界面上。2.教师布置作业模块的输入输出设计:输入:作业标题、出题教师、作业上传截止日期、作业内容等。输出:作业发布成功或者失败的页面。3.教师批改作业模块的功能描述:功能设计:教师点击批改链接,查询数据库,显示该题答案和题号,做出批改,保存到数据库的correst表中。4.教师批改作业模块的输入输出设计:输入:教师批改作业后所给出的评语和分数。输出:成功批改的页面 三、学生模块的设计与实现 (一)学生查看公告和个人信息模块的设计与实现 功能设计:在用户登录后确认为学生后,跳转到answer.do,查询数据库work表,把查询结果显示到页面上。 (二)学生上传作业模块的设计与实现 1.学生上传作业模块的功能描述:功能设计:学生点击做题链接,进行做题,并把做题结果和题号存入到answer表中,通过addwork添加到数据库。 2.学生上传模块的输入输出设计:输入:上传作业。输出:完成作业 四、结语 《编译原理》课程作业网上提交系统是学校信息化教学环境的基础设施之一,是全面实现素质教育的重要手段,是教育技术装备现代化的主要体现和教育现代化的重要标志之一。 参考文献: [1]孙卫琴,李洪成.Tomcat与Java Web开发技术详解[M].北京:电子工业出版社,2003,6 [2]孙一林,彭波.Java数据库编程实例[M].北京:清华大学出版社,2002,8 [3]飞思科技产品研发中心.JSP应用开发详解[M].北京:电子工业出版社,2003,9 [4]赛奎春.JSP工程应用与项目实践[M].北京:机械工业出版社,2002,8 [5]Kven Genet.SQL Server database development Case Study Analysis.Tsinghua University Press,2006,12 [6]Steven Nath.SQL SERVER 2000 Development and Application,Mechanical Industry Press,July,2003 编译原理课程是计算机专业必修的一门重要的专业基础课程,也是计算机系统软件中非常重要的一个分支,经过多年建设取得了丰硕的教学成果:2003年被评为“吉林大学百门精品课程”之一,2004年被评为吉林省精品课程,2006年被评为教育部—微软精品课程。编译原理实践课程建设作为新世纪教学改革重点项目和编译原理精品课程建设的一个重要组成部分,在教材建设、教学内容和教学方法的改革等方面也取得了较突出的成绩,并发表了多篇学术论文。 一、实验课程目的 编译原理课程是计算机科学与技术专业学生的专业骨干课之一。通过学习这门课程,使学生掌握编译程序的基本原理、方法和实现技术,使学生更好的理解程序语言的内部机制,培养学生初步掌握设计大型系统软件的方法、技术以及设计大型软件的能力。 编译原理实践性教学的设计思想是使学生透彻的理解编译程序的原理和思想,系统全面的掌握编译技术,使学生通过课堂学习,理解编译原理的同时,注重学生实践能力的培养,进一步巩固对知识的理解,通过实际的锻炼,掌握编译技术,进而能够独立的进行编译器的设计。 二、实验内容及要求 编译程序不同于一般的应用程序,是一个十分庞大和复杂的系统软件。一般的应用程序是以数据作为操作对象,而编译程序则是以程序作为操作对象,是一个元级处理程序,它所包含的算法和思想比较特殊,理论性较强,抽象度也较高,因而编译原理课程一直以来都是计算机专业学生比较难于理解和掌握的一门课程。为此我们开设编译原理实践课程。编译原理实践课程的主要实践题目有: 实验一: 词法分析程序开发 实验要求: 1.掌握词法分析程序自动生成工具LEX的使用。 2.掌握各类单词的形式描述。 3.学会用数据中心法实现有限自动机。4.学会用直接转向法实现有限自动机。5.独立完成SNL语言的词法分析器。 实验二: 递归下降语法分析 实验要求: 1.理解递归下降语法分析方法的主要原理。 2.理解递归下降分析法对文法的要求。 3.熟练掌握Predict集合的求法。 4.熟练掌握文法变换算法(消除左递归和消除公共前缀)。实验三: LL(1)语法分析 实验要求: 1.理解LL(1)分析法的主要原理。 2.理解LL(1)分析法对文法的要求。 3.熟练掌握Predict集合的求法。 4.通过编程熟练掌握LL(1)分析法的工作过程。实验四: 符号表管理 实验要求: 1.了解符号表在编译过程中的重要作用。 2.掌握符号表应包含的符号的属性信息。3.了解符号表的组织原则。4.掌握符号表的操作。 5.掌握符号表的可见性问题。 实验五: 语义检查 实验要求: 1.了解语义检查是语义分析的一个重要内容。 2.掌握语义检查的一般内容。 3.学会在语法分析的同时进行语义检查。4.学会将语义分析作为一遍独立的扫描。 实验六: 中间代码生成 实验要求: 1.了解中间代码生成是为优化和移植而进行的。 2.了解几种常见中间代码表示形式掌握符号表应包含的符号的属性信息。 3.会用简单的程序实现中缀式到后缀式的转换。4.会用栈实现复杂表达式的求值。 5.掌握常见程序结构的中间代码结构。 6.掌握由语法树到四元式中间代码的转换方法。 实验七: 中间代码优化 实验要求: 1.能够对中间代码正确划分基本块。 2.理解常量表达式局部优化算法。 3.理解公共表达式局部优化算法。 4.理解循环不变式外提优化算法。实验八: 目标程序生成 实验要求: 1.熟练掌握虚拟机的指令系统。 2.理解并掌握指令选择的方法。 3.理解多寄存器分配的原则和方法。 4.熟练掌握基本语句从四元式中间代码形式到目标代码的翻译原理和方法。 5.独立完成目标代码生成程序。 三、实验教学过程及教学手段 教学过程: 经过近三年的研究、探索与实践,我们在编译原理实践课程的建设方面取得了一定成效。在吉林大学计算机学院首次开设了编译原理实践课程,该课程以学生实际上机实习为主,教师指导为辅,强调启发式教学,注重学生自学能力的培养。学生在实践课程中,通过实际动手编程,将抽象的编译理论知识具体化和形象化,加深了对基本概念和方法的理解和运用,从而全面系统地掌握了编译器的构造过程。 该课程采用教研室自编实践教材《编译程序设计与实现》(高等教育出版社)作为辅导教材,通过对教材中提供的编译实例的透彻解析,加深了学生对编译程序的直观认识,提高了学生对源程序的分析和设计能力。同时,对学生学习、理解和掌握编译原理理论课程也有很大的促进作用。在课程中,学生通过亲自动手实践,把原理性的抽象理论知识具体化和形象化,消化了课堂上、书本中难于理解的概念和方法,全面系统的掌握了编译器的构造过程,激发了学生的学习兴趣,培养了学生进行更深入学习的主动性。在教学方法上,结合多媒体课件,强调启发式教学,培养学生的创新能力和动手实践能力。实践证明,这些教学方式的尝试在实际教学中取得了良好的教学效果。 教学环境: 拥有良好的实践教学环境,已建成3个大型网络化、多媒体微机实验室,共有800台奔IV微机,32台服务器,实验室面积为2040平方米,完全能够满足教学实践要求,通过开放式的实践教学,收到了良好的教学效果。除实践课程中规定的实验之外,还设计了一些难度较大的选作实验题目,激发学生的能动性,提高学生分析问题、解决问题的能力。教学手段: 1.多媒体辅助教学软件-PCMCAI(Principle of Compile Multimedia CAI)在教学过程中,我们发现由于编译原理理论性强,抽象度高,学生不易于理解。针对这一情况,我们研制了编译原理多媒体辅助教学软件-PCMCAI(Principle of Compile Multimedia CAI),该软件以多媒体动画的形式生动形象地描述了编译器的各个阶段的工作过程。借助现代化的教学手段和工具,将抽象的知识具体化,便于学生理解复杂的原理,极大地调动了学生的学习积极性,学习效果有了明显的提高; 2.编译实例库 我们完成了编译实例库的构建,建立实例库的目的是使学生通过编译实例库,可以了解和掌握不同类型语言的编译原理和构造技术,培养学生的主动参与、自主思考和创新能力,扩大学生的知识面。通过实践课程,我们总结和综合了学生中优秀的设计实例,同时,广泛的收集当前国内外最新的素材资料,对编译实例库不断地进行完善。目前,实例库已经初具规模并投入使用,为学生提供了广泛的实践素材和范例,在教学过程中作为一种辅助教学手段,效果良好。 3.网络教学平台:http://softlab.jlu.edu.cn 针对目前学生人数增多,教学资源不足,学生质量参差不齐,教学质量和效率得不到保证的情况,我们充分利用Internet,建立和实施网络课程体系,利用Internet在信息制造、贮存和递送方面的优势,克服资源不足的缺点,同时也为学生提供了完全个性化的学习环境,发挥网络教学优势。目前我们已经开始了这方面的建设,完成了编译原理实例库、课件、习题库等方面的建设,构建了网络课程的框架体系,目前正着手网络课程的进一步完善工作。 四、教材及课件 教材建设: 1.校内教材:《一个教学语言TINY的编译程序教学实例分析教材》(2001年6月)。2.校内教材:《编译程序构造原理与实例分析》(2003年2月)。3.编译原理实践教材:《编译程序的设计与实现》(高等教育出版社,2004年7月)。 教学软件: 1.多媒体辅助教学软件-PCMCAI(Principle of Compile Multimedia CAI)。2.SNL(Small Nested Language)语言实例设计及其编译器构造。3.编译原理实例库(C语言版本)。4.编译原理实例库(Java语言版本)。 五、相关成果 发表论文: 1.《编译原理实践课程设计的探索》,刘磊等,吉林大学新世纪教学改革项目研究成果----创新、改革与实践 第一集 吉林大学出版社。2.《用递归下降方法实现自底向上的分析》,刘磊等,吉林大学学报(信息科学版),2004(3)。 3.《编译原理多媒体辅助教学软件的设计与实现》,刘磊等,吉林大学自然科学学报,2002(2)。 4.《测试语言ATLAS的实现技术》,刘磊等,仪器仪表学报,2004(4)。5.《ATLAS_MPS的设计与实现》,刘磊等,吉林大学学报,2004(4)。6.《编译原理实践课程教学方法研究》,张晶等,全国首届计算机程序设计类课程教学研讨会,2005(9)。7.《“编译原理”课程建设研究》,刘磊等,计算机教育,2006(6)。获得奖励: 1.2004年,《编译原理实践课程建设》,吉林大学教学成果二等奖。2.2006年,《编译程序的设计与实现》一书获吉林大学本科优秀教材。3.2002年,编译原理CAI课件-PCMCAI获被吉林省教育厅评为二等奖,并在第六届全国多媒体教育软件大奖赛上获得优秀奖。 4.《编译原理》课程先后被评为吉林大学精品课程、吉林省精品课程及教育部-微软精品课程。 总之,经过多年的研究、探索与实践,我们在编译原理实践课程的建设方面取得了一定成效。在吉林大学计算机学院首次开设了编译原理实践课程,该课程以学生实际上机实习为主,教师指导为辅,强调启发式教学,注重学生自学能力的培养。学生在实践课程中,通过实际动手编程,将抽象的编译理论知识具体化和形象化,加深了对基本概念和方法的理解和运用,从而全面系统地掌握了编译器的构造过程。该课程采用我们自编实践教材《编译程序设计与实现》作为辅导教材,通过对教材中提供的编译实例的透彻解析,加深了学生对编译程序的直观认识,提高了学生对源程序的分析和设计能力。同时,对学生学习、理解和掌握编译原理理论课程也有很大的促进作用。在教学方法上,结合多媒体课件,强调启发式教学,培养学生的创新能力和动手实践能力。实践证明,这些教学方式的尝试在实际教学中取得了良好的教学效果。 1.名词解释 短语 LL(1)文法 语法分析 无环路有向图(DAG)语法制导翻译 2. Pascal语言无符号数的正规定义如下: num digit+(.digit+)?(E(+|-)? digit+)? 其中digit表示数字,用状态转换图表示接受无符号数的确定有限自动机。 3.下面两个文法中哪一个不是LR(1)文法?对非LR(1)的那个文法。给出那个有移进-归约冲突的规范的LR(1)项目集。 S aAc S aAc A bbA | b A bAb | b 4.构造下面文法的LL(1)分析表。 D TL T int | real L id R R , id R | 5. C语言是一种类型语言,但它不是强类型语言,因为编译时的类型检查不能保证所接受的程序没有运行时的类型错误。例如,编译时的类型检查一般不能保证运行时没有数组越界。请你再举一个这样的例子说明C语言不是强类型语言。 6.把表达式 -(a+b)*(c+d)+(a+b+c)翻译成三元式。 7.为下面文法添加语义规则(或叫动作子程序),输出S产生的二进制数的值,如输入是101时,输出5。 S S S S B | B B 0 | 1 8.一个C语言的函数如下: func(c,l)char c;long l;{ func(c,l);} 在X86/Linux机器上编译生成的汇编代码如下: .file “parameter.c”.version “01.01” gcc2_compiled.:.text .align 4.globl func .type func,@function func: pushl %ebp —— 将老的基地址指针压栈 movl %esp,%ebp —— 将当前栈顶指针作为基地址指针 subl $4,%esp —— 分配空间 movl 8(%ebp),%eax movb %al,-1(%ebp) movl 12(%ebp),%eax pushl %eax movsbl-1(%ebp),%eax pushl %eax call func addl $8,%esp.L1: leave —— 和下一条指令一起完成恢复老的基地址指针,将栈顶 ret —— 指针恢复到调用前参数压栈后的位置,并返回调用者 .Lfe1:.size func,.Lfe1-func.ident “GCC:(GNU)egcs-2.91.66 19990314/Linux(egcs-1.1.2 release)”(a)请指出对应源程序第5行的函数调用func(c,l)的汇编指令是哪几条。 (b)请说明字符型参数和长整型参数在参数传递和存储分配方面有什么区别。(小于长整型size的整型参数的处理方式和字符型参数的处理方式是一样的。) 9.程序的文法如下: P D D D;D | id : T | proc id;D;S (1)写一个语法制导定义,打印该程序一共声明了多少个id。 (2)写一个翻译方案,打印该程序每个变量id的嵌套深度。 《编译原理》试题B 1.名词解释 句柄 LR(1)文法 无环路有向图(DAG)语法制导翻译 局部优化 2.某操作系统下合法的文件名为 device:name.extension 其中第一部分(device:)和第三部分(.extension)可缺省,device, name和extension都是字母串,长度不限,但至少为1,画出识别这种文件名的确定有限自动机。 3.下面两个文法中哪一个不是LR(1)文法?对非LR(1)的那个文法。给出那个有移进-归约冲突的规范的LR(1)项目集。 S aAc S aAc A bbA | b A bAb | b 4.程序的文法如下: P D D D;D | id : T | proc id;D;S (1)写一个语法制导定义,打印该程序一共声明了多少个id。 (2)写一个翻译方案,打印该程序每个变量id的嵌套深度。 5.在PASCAL语言中,简单类型的变量的声明例举如下: m, n : integer p, q, r : real 为这样的声明写一个LR(1)文法(为简单起见,变量标识符都用id表示),并根据你的文法写一个语法制导定义(或叫做为你的文法加上语义动作),它将变量的类型填入符号表。 6.下面程序在SUN工作站上运行时陷入死循环,试说明原因。如果将第8行的long *p改成short *p,并且将第23行long k 改成short k后,loop中的循环体执行一次便停止了。试说明原因。 main(){ addr();loop();} long *p;loop(){ long i,j; j=0;for(i=0;i<10;i++){ (*p)--; j++;} } addr(){ long k; k=0;p=&k;} 7.一个C语言函数如下: main(){ int i,j,k;i=5;j=1;while(j<100){ k=i+1;j=j+k;} } 经优化编译后,生成的代码如下: .file “optimize.c” gcc2_compiled.: ___gnu_compiled_c:.text.align 2.globl _func.type _func,@function _func: pushl %ebp movl %esp,%ebp movl $1,%eax movl $6,%edx.align 2,0x90 L4: addl %edx,%eax cmpl $99,%eax jle L4 leave ret Lfe1:.size _func,Lfe1-_func 试说明编译器对这个程序作了哪些种类的优化(只需要说复写传播、删除公共子表达式等,不需要说怎样完成这些优化的)。 8.为下面文法添加语义规则(或叫动作子程序),输出S产生的二进制数的值,如输入是101时,输出5。 S S S S B | B B 0 | 1 9.构造下面文法的LL(1)分析表。 课程名称: 课程编号: 适用专业: 总 学 分: 总 周 时: 主 撰 人: 撰写日期: 一、目的与任务 通过程序设计上机调试程序实现算法,学习编译程序调试技巧和设计编译程序的一般原则,加深对词法分析、语法分析、语义分析和中间代码生成等编译阶段及实用编译系统的认识,初步掌握编译程序构造的基本原理与技术, 从形式语言理论的角度, 进一步认识与理解程序设计语言。通过编译程序的编写和调试能力的训练,激发学生进一步思考问题,培养学生的学习兴趣和创新能力。并进一步培养学生的抽象思维能力,进一步巩固《编译原理》课程所学知识。 本次课程设计的时间为2周,目的是通过实际的题目如:词法分析、语法分析、代码优化等,使学生了解和掌握编译程序的工作原理,同时培养学生用相关的程序设计语言进行程序设计,实现编译的功能,从而提高学生的综合能力。 二、教学基本要求 1.设计和调试过程要规范化 需求分析:将题目中要求的功能进行叙述分析,并且设计解决此问题的数据存储结构,(有些题目已经指定了数据存储的,按照指定的设计),设计或叙述解决此问题的算法,描述算法可以使用自然语言、伪代码、或函数的方式。 给出实现功能的一组或多组测试数据(测试文法),程序调试后,将按照此测试数据进行测试的结果列出来。 如果程序不能正常运行或运行过程中出现了不满足算法思想的情况,写出出现这一情况的原因或改进行的方法。 源程序要按照写程序的规则来编写。要结构清晰,重点函数的重点变量,重点功能部分要加上清晰的程序注释。 程序能够运行,要有基本的容错功能。尽量避免出现操作错误时出现死循环。2.课程设计实习报告的书写格式 编译原理 436105 软件工程 2W 2012.6 审 核 人: ① 设计题目 ②运行环境(软、硬件环境)③算法设计的思想 ④算法设计分析 ⑤主要函数 ⑥源代码 ⑦运行结果分析 ⑧收获及体会 3.实施方式 本次课程设计分成9个题目,都有一定的工作量,涵盖本课程内容和实际应用相关的主要技术,学生可以自由组队选择其中一个实现。课程设计题目见“主要内容”。 根据老师给定的9个题目进行分析设计,本次课程设计采取分组的办法进行,3-4人为一组,要求每组学生在规定时间内独立完成。4.答辩:课题的论述、测试及问题回答 三、课程设计内容 1、词法分析器的构造: 人们理解一个程序,起码是在单词级别上来思考。同样,在编绎一个程序时,也是在单词级别上来分析和翻译源程序。词法分析是编绎的基础,执行词法分析的程序即为词法分析器,它的任务是对输入或给定的源程序,从左至右逐个字符进行扫描,产生一个个单词符号,把作为字符串的源程序改造成单词符号串的中间程序。设计目的与任务: 通过本课程设计教学所要求达到的目的是:对词法分析工作流程进行总体设计和详细设计,最终用C语言来设计一个简单词法分析器,实现对源程序的词法分析功能,对输入程序去除注释,并以二元式形式输出程序中所有单词。 2、正则表达式到NFA 在编译系统中,词法分析阶段是整个编译系统的基础。对于单词的识别,有限自动机FA是一种十分有效的工具。有限自动机由其映射f是否为单值而分为确定的有限自动机DFA和非确定的有限自动机NFA。在非确定的有限自动机NFA中,由于某些状态的转移需从若干个可能的后续状态中进行选择,故一个NFA对符号串的识别就必然是一个试探的过程。这种不确定性给识别过程带来的反复,无疑会影响到FA的工作效率。而DFA引擎在任意时刻必定处于某个确定的状态,它搜索是无需象NFA一样必须记录所有的可能路径(trace multiple possible routes through the NFA),这也是DFA运行效率高于NFA的原因。而已经证明DFA是NFA的一个特例,即对于每一个NFA M存在一个DFA M’’,使得L(M)=L(M’’)。 设计目的与任务 通过本课程设计教学所要求达到的目的是:充分理解和掌握NFA,DFA以及NFA确定化过程的相关概念和知识,编程实现对输入的任意正规式转换成NFA的形式输出。 3、NFA的确定化 有限自动机理论是描述词法规则的基本理论。一条词法规则表示一个正规表达式(又叫正规式),而一个正规式又可化为一个DFA(确定有穷自动机),这个有限自动机可用来识别词法规则所定义的所有单词符号。把程序设计语言的所有词法规则都构造出相应的有限自动机,就得到一个词法分析器。然后,再转换为计算机可识别的程序就能自动实现词法的分析和检查。在实际应用中,用NFA(不确定有穷自动机)识别词法存在不确定和状态的冗余,因而,就要将NFA(不确定有穷自动机)转换为DFA(确定有穷自动机),消除了不可到达和不确定。设计目的与任务 通过本课程设计教学所要求达到的目的是:掌握从NFA到DFA的转换,以及用子集法把NFA转换成DFA理论,编程实现将NFA(不确定有穷自动机)转换为DFA(确定有穷自动机)。 4、DFA的最小化 确定性有限自动机(DFA ,Deterministic Finite Automata)的最小化仍是有限自动机应用及实现方面的重要问题之一。DFA的最小化可以揭示状态之间的内在联系,便于其存储实现,便于建立用DFA描述的任务模型,一些理论问题也与最小化思想有关。DFA的最小化是指,构造一个与之等价且状态数最小的DFA,即等价最小DFA。许多文献给出了一个最小化算法,算法的思想是,构造状态集的一个划分,再将这个划分中的每个子集作为新的状态,从而得到等价最小DFA。 DFA的最小化可以揭示状态之间的内在联系,便于其存储实现,便于建立用DFA描述的任务模型,一些理论问题也与最小化思想有关。 5、语法分析之LL(1)文法 通过该课程设计了解了程序语言的自上而下的语法分析过程,提高了编程能力,能使我们了解编程语言更多的细节 设计目的与任务(1)读入文法(2)求出first(), follow()(3)判断是否为LL(1)文法 (4)若是,构造分析表; (5)输入一个字符串看是否是文法的一个句子。 6、算符优先文法 一个文法,如果它的任一产生式的右边都不含有两个相继(并列)的非终结符,即不 含有如下形式的产生式的右部: „QR„ 则我们称该文法为算符文法。 假设文法中的任意两个终结符之间最多只有一个优先关系,则该文法称为算符优先文法。 该课程设计按照求,(P),(P)各两条规则,求出各非终结符的集。然后按照算符优先算法求出各终结符的算符优先关系,填写算符优先表,并将其输出。 7、LR(0)分析表的构造 LR分析技术是一种有效的自下而上分析技术,是一种规范归约,其中L表示从左到右扫描输入串,R表示构造一个最右推导的逆过程。这种方法可以适用于很大一类上下无关文法的语法分析。LR方法的基本思想是:在规范归约过程中,一方面记住已经移进和归约出的整个符号串,即记住“历史”;另一方面根据所用的产生式推测未来可能碰到的输入符号,即对未来进行“展望”。当一串貌似句柄的符号串呈现于分析栈的顶端时,我们希望能够根据所记载的“历史”和“展望”以及“现实”的输入符号等三方面的材料,来确定栈顶的符号传是否构成相对某一产生式的句柄。 LR分析器的核心部分是一张分析表。这张分析表包括两部分,一是“动作”(ACTION)表,另一是“状态转换”(GOTO)表。对于一个文法,如果能用一个每步顶多向前检查K个输入符号的LR分析器进行分析,则这个文法就称为LR(K)文法。本文研究的LR(0)文法即K=0时的文法。 设计目的与任务 本课程设计所设计目的与任务是:通过C语言程序实现LR(0)分析表的构造,熟练掌握LR(0)分析表的构造方法,即利用拓广文法和构造项目集规范族的方法。了解LR(0)分析器的工作原理,并能利用LR(0)分析表对输入串进行分析。 8、逆波兰表达式生成算法 虽然源程序可以直接翻译为目标语言代码,但许多编译程序采用了独立于机器的、复杂性介于源语言和机器翻译语言之间的中间语言:后缀式(逆波兰表达式)等。这样做的好处是: (1)便于进行与机器无关的代码优化工作;(2)使编译程序改变目标机更容易; (3)使编译程序的结构在逻辑上更为简单明确。以中间语言为界面,编译前端和后端的接口更清晰。设计目的与任务 将非后缀式用来表示的算术表达式转换为用逆波兰式来表示的算术表达式,并能运行查看结果。 9、表达式的中间代码生成 源程序可以直接翻译为目标语言代码,但是许多编译程序却采用了独立于机器的、复杂性介于源语言和机器语言之间的中间语言。这样我们可以做下面工作: (1):便于进行与机器无关的代码优化工作;(2):使编译程序以改变目标机更容易;(3):使编译程序的结构在逻辑上更为简单明确; 而以中间语言为界面,编译前端和后端的接口更清晰,表达式可以用四个域分别称为OP、ORG1、ORG2及RESULT来表示。 四、时间安排 《编译原理课程设计》安排在第三学期进行,时间2周(17-18周)。 五、组织管理 1.由院、系指派经验丰富的专业教师担任指导教师。 2.课程设计实行指导教师负责制,由指导教师全面负责课程设计的指导与管理工作。 六、成绩考核与评定 学生课程设计结束后写出总结报告,对设计的内容和效果进行总结,按照学生在设计期间的表现,指导老师对每位学生写出评语和鉴定,系课程设计领导小组组织答辩,最后确定每位学生课程设计成绩,课程设计成绩分为优、良、中、及格和不及格五个等级。课程设计成绩为平时表现30%、设计报告50%、答辩20%。评分标准: ① 优秀:目的明确,态度端正,模范遵守学校的各项纪律。工作认真,积极 主动,吃苦耐劳,能出色的完成设计任务。撰写了高质量的总结报告。答辩准确流利。 ② 良好:目的明确,态度端正,能遵守学校的各项纪律,工作比较积极主动。能较好地完成设计任务,成绩较突出,表现良好;撰写了质量比较高的实习报告。答辩较准确流利。 ③ 及格:目的明确,态度基本端正,能遵守学校纪律,在督促下能开展工作 并完成一定的设计任务,无大的违纪违规现象;撰写了实习报告。通过了答辩。 ④ 不及格:实习态度端正,不能遵守实习单位的纪律,不服从领导,自由散漫,工作消极被动,不能完成实习任务,实习期间有失职、旷工、打架、酗酒等大的过失。或无实习报告,没有通过答辩。 2.成绩评定 依据上述考核内容,最后采用优(>90分)、良(80~89分)、中(70~79分)及格(60~69分)、不及格(<60分)五级记分制评定学生课程设计成绩。 七、主要参考资料 教材: 《编译原理及实践》冯博琴等译,机械工业出版社 教学参考书 1、《程序设计语言与编译》龚天富、侯文永编,电子工业出版社。 2、《编译原理》吕映芝、张素琴、蒋维杜主编,清华大学出版社,1998年 3、《编译原理》胡伦骏、徐兰芳、刘建农编,电子工业出版社2002年 4、《编译原理》(第二版)蒋立源、康慕宁主编,西北工业大学出版社,2002年 5、《编译原理习题精选》陈意云、张昱著,中国科技大学出版社,2002年 6、《编译原理习题与解析》 伍春香著,清华大学出版社,2001年 关键词:编译原理,实践改革,分级教学 《编译原理》是计算机及相关专业的一门专业必修课程,在整个专业教学中占有举足轻重的地位。该课程内容比较抽象,逻辑性强,它涵盖了程序设计、自动机、数据结构、机器实现等多门学科,需要具有足够的计算机基础知识作为它的前驱课程,所以学生普遍反应编译比较难学。 现在计算机专业考研统考取消了《编译原理》的考查,许多同学便认为该门课程不是很重要,上课也都采取无所谓的态度,理论掌握不扎实,进而给实践增加了难度。该门课的理论性、实践性都比较强,学习内容包括了词法分析、语法分析、语义分析与中间代码生成、代码优化及目标代码的生成,其中涉及到的正则文法、有穷自动机理论、上下文无关文法、LR文法、属性文法、回填技术、局部优化等概念都是构造编译器的重要理论基础。其实归根到底编译的重点不在于研究编译程序具体代码的实现,而是对编译的算法、基本原理的理解,编译原理中包含的形式语言的定义、语言的翻译过程、自动机理论等知识都是计算机研究的精髓内容,通过编译系统的理论学习和编程实践,可以增强学生软件的设计开发能力,提高他们的逻辑思维能力和操作动手能力,提升他们的专业水平,使他们获得可持续发展的计算机应用能力。 1 编译原理实践课程现状 为了加深学生对编译原理理论知识的理论,实践环节的设置是必不可少的。在笔者的学校,目前给编译原理课程安排实践内容是8节上机课外加一个课程设计,因为上机课时有限,所以给学生安排的是任务量稍轻的词法分析、语法分析等程序的设计,课程设计则增添了语义分析及编译器的实现等内容。 从以前的实践结果看来,情况不容乐观。学生本身水平就是参差不齐,提交上来的设计作业水平也相差较大,更有甚者,如果不会做的话,直接把其他同学的作业拷贝一份改了名字交上来,这样一来显然失去了实践的意义。如果不是对学生足够了解的话,光凭作业老师是无法判断出谁的水平高、谁又是不劳而获的。能力较强的学生觉得大家提交的作业一样,体现不出自己的优势,可能会打击到他们的积极性,也无法激发他们进行再创造的兴趣。能力稍差的学生则觉得不用付出多少劳动,却能得到差不多的成绩,那为何不继续偷懒下去呢?长此以往,他们的水平只会不进反退,得不到真正的锻炼。 由此,笔者想来,因为每次布置的实验内容都是一样的,对于水平不同的学生来说,显然这是不太合理的。要是照顾的大多数同学的情况,作业难度提不上去,难度大的话不少同学不会做,太简单的话对于一些水平高的学生来说又体现不出他们的实际能力。那可不可以将学生分成几部分,分层次让他们实践不同的实验内容呢? 2 实践改革初探,采用分级实践、分组合作 所谓分级,是将学生按照他们的学习实践能力分为几个等级,上机时可以选择难度不同的实践内容。例如分为三个等级: 1) 这类学生基础知识比较扎实,编程能力较强,自主学习能力强,一般可以快速完成老师分配给他们的任务。对于此类学生,老师可以根据他们的特长设计不同的实践课题,或是让学生自己设计感兴趣的实践内容,只要能充分利用编译的相关原理即可。在实践前期,老师和学生一起探讨实践课题的需求分析、框架设计等等,后期的具体实施则交由学生去完成。同时老师的考核方法也要做相应的调整,不能只看结果不看过程,因为选题难度较之前的加大,学生很有可能在有限时间内无法完成,这样也会产生畏难情绪。作为老师应该打消他们的后顾之忧,只要整个过程学生亲身参与了,付出了相应的劳动,那就应该得到最大的鼓励,评分还是应以中上等为主。具体评价的时候,可以参考实践内容有没有创新,跟现有的类似课题相比有没有改进的地方。这样一来肯定会极大的激发学生的积极性,愿意投入更多的精力到新课题的实施中去。 2) 对于前期课程没有学好,编程水平较差的学生,让他们独立完成一个稍大型的程序不太现实。那我们可以因材施教,让他们去阅读一些程序代码,分析代码的结构,所用到的算法,画出代码的流程图等等,即使没有亲自设计程序,也可以大致读懂程序,为后续的课程实践打下基础。另外也可以从词法分析器或语法分析器中提取出部分内容,让他们设计实现一些简单的函数。对于这部分学生,千万要防止他们出现自暴自弃的情绪,如果只是单纯靠抄袭其他同学的作业来交差,那他们在实践方面永远得不到提高,这对于他们找工作是极其不利的。 3) 此部分学生应该是班级中的大多数了,他们在平时的学习中按部就班,循规蹈矩,对于老师布置的一般任务基本可以独立完成或是少部分求助于其他同学,但基本缺乏创新意识,思考问题不够全面。对于此类学生,应该鼓励他们去实践一些有创新性的实践课题。摒弃以往单纯去实现词法分析、语法分析、语义分析的思路,可以分析设计基于某表达式的计算器,实现某编译的前端等等。从根本上对学生的实践内容进行改革,根据他们的个人能力来决定他们的实践题目。此类学生的考核可以从创新性、题目的难度及完成程度几方面去考察,既要让学生掌握编译原理的相关知识,又不能打击了他们的积极性,让他们对以后的课程实践都失去了兴趣。 还有一种实践模式,就是将好中差学生分在一组,根据实践的难易程度,大家量力而为,将实践内容分解为几部分,不同的学生完成不同的内容,最后大家提交一份完整的设计。这样的分组,有利有弊,利在可以培养学生的团队合作精神,集思广益,大家齐心去完成一个有难度、有创新的课题,考核时采用答辩的机制,每人阐述自己所完成的部分,既公平又使每人都得到了锻炼。不过此法的弊端也是存在的,那就是有的同学浑水摸鱼,什么都不做,最后直接把别人的成果拿为己用,这对于辛苦参与实践的同学是有失公允的。 3 对老师提出新的要求 基于因材施教的原则,在实践部分采取分级的方式是比较合理的一种方法,但同时也对老师提出了较高的要求。首先老师要对学生基本水平具有足够的了解,指导学生进行不同课题的选择,以体现他们的实际水平并激发他们的潜能。但在当前的教育模式下,要让老师认识每一个学生并掌握他们的学习情况基本上是不可能的事情,这就要依靠其他教师或辅导员的力量,争取让学生能选到合适自己的题目。 其次根据不同学生的水平设计不同的实践题目,需要老师对编译原理掌握的更为透彻,需要深入研究教学内容,了解学科的前沿动态,将新思想、新事物加在编译原理的实践当中,以提高学生的学习兴趣并设计出更适合、更能有效体现学生水准的题目。 4 结论 先从“编译”二字谈起 在《列宁全集》中文第二版每一卷书前都专有一页写着这样两句话:“《列宁全集》第二版是根据中国共产党中央委员会的决定,由中共中央马克思恩格斯列宁斯大林著作编译局编译的。”我们深深感到这两句话的分量,感到我们肩负的责任。“编译”二字表示《列宁全集》中文第二版和第一版有自行编译和照搬照译的区别,要求我国马列主义经典著作的编译出版事业向前迈出一大步。 翻译《列宁全集》固然不易,编译就更加艰巨。“编译”和“翻译”一字之差,使中央编译局列宁斯大林著作编译室的同志们孜孜不倦地干了八年的准备工作,外加上局外力量的大力协助。幸运的是,党的十一届三中全会提出的解放思想、实事求是的号召,坚定了我们编译一部中国版的《列宁全集》的信心,明确了实事求是的编译方针。一九八二年五月二十六日中共中央书记处作出编译《列宁全集》第二版的正式决定,极大地鼓舞了我们,使我们自行编译的新版《列宁全集》得以在去年开始出版。大家以高度的政治责任感对待党中央的嘱托,正在日夜苦干,从今年起每年以八卷至十卷的速度付排,力争到一九九○年出齐。 新版《列宁全集》的编译主要表现在如下几个方面: 没有照搬照译苏联出版的五十五卷本的俄文第五版《列宁全集》,而是在这个版本的基础上编辑出六十卷本的全集。我们增收了俄文第五版没有收载的和后来新发现的列宁文献。整部全集分为著作、书信和笔记三大部分,并在各卷书脊上标明类别,把《哲学笔记》和《帝国主义笔记》编入笔记部分。各卷文献的排列、准备材料的处理、技术规格以至某些文献的标题,我们按照中国编辑工作的习惯和读者研究使用的方便,对俄文版本做了一些变动。新版中还加进中国早期出版和发表的译本和译文的插图。为读者使用着想,在目录的前面加上“凡例”,做了一些关于各卷体例的说明。 各卷的前言是我们编写的,比较详细地介绍各卷列宁著作的写作历史背景和主要内容,不联系现实发表议论。旧版每卷前言只有两页,新版的前言每篇都在六页以上。各卷的注释,保留了俄文第五版的一些注释,特别是那些有珍贵资料的注释,又依据新资料补充和改写了一些,根据中国读者的需要增加了一些。所有的注释都力求准确和完备。为了读者的方便,把指出引文出处的注改为当页脚注。新版卷末资料性的注释比旧版多一倍以上。新版新设的人名索引,每个条目都有人物的简要介绍。我们以实事求是的原则对俄文第五版人名索引条目的内容做了增删或订正,查找各种资料,扣住列宁的著述,改写了一些重要条目,尽量如实地反映人物的经历和观点,不在褒贬上多费笔墨。人名索引收录了五千多人名条目。著作部分各卷所附的年表,记述列宁主要的理论活动和实践活动。我们根据新史料逐条核实俄文第五版的年表,做了一些增删。新版年表篇幅比旧版增加两倍以上。 列宁著作的原有译文,都根据最新的原文版本加以仔细校订,补正中文第一版中的错译和俄文第四版删除的地方,许多译文改动很大,有些几乎等于重新翻译。过去中国读者没有见到的列宁文献和苏联新发现的列宁文献,近几年初次译出发表以后,收入新版全集时又加以校订。我们力求列宁著作的新译文更为准确,更为通顺流畅,能够稳定相当长一个时期,改变过去由于译文不够理想而在出单行本和选集时一再改动而造成的那种版本混乱的情况。 人民出版社紧密配合中央编译局的编译工作,在封面装帧、版式字体、插图安排等方面做出极大的努力和出色的创新,使新版《列宁全集》更富有中国的特色。 谈谈新版的准备工作 中央编译局早已立意编译新版《列宁全集》的想法。中文第一版在我国传播和研究列宁主义无疑起过很大的作用,但随着时间的推移,人们愈来愈感到它收载的列宁文献缺漏较多,特别是相当多的十月革命以后的文献没有收录在内,感到它的译文质量不够理想,学习和引用不甚放心,感到它的前言和注释过于简略,缺乏应有的参考资料。为了弥补这些不足,中央编译局列宁斯大林著作编译室(以下简称列斯室)从一九七五年开始编译新版《列宁全集》的准备工作,并得到人民出版社马恩列斯著作编辑室的大力协助。 列斯室编辑组调查了苏联从二十年代到六十年代先后出版的《列宁全集》五个版本,逐一分析了各版的文献收录情况、编辑体例、分卷原则、参考资料(前言、附录、注释、年表和索引等)的编写情况,写出对每个版本的优点和缺点的评论。他们对俄文第五版没有收录的列宁文献和俄文第五版出版后近二十年来苏联新发现的大量列宁文献进行了考证和筛选。他们根据苏联七十年代出版的《列宁年谱》和其他资料判断某些列宁文献的真伪,核实或确定每篇列宁文献的写作时间和发表时间。他们还分析了南斯拉夫编印的四十卷本《列宁全集》塞尔维亚-克罗地亚版,汲取了我国出版的各种名家全集的编辑长处。他们在北京、上海等地档案馆、图书馆、旧书店查阅收集了五百多件中国早期出版和发表列宁著作的早期译本和译文。特别应当提到的是,我们过去曾经把俄文第五版和第四版的文献逐篇逐字以至每个标点符号一一核对,了解俄文第五版的文字校勘、文献增删、标题变动等情况,整理出详细的调查材料。在这些深入细致的调查研究的基础上,编辑组提出重新编译《列宁全集》的总设想、中文第二版对俄文第五版正文部分文献的更动意见、对俄文第五版“准备材料”部分的处理意见、关于“附录”的处理意见、俄文第五版删除俄文第四版收载的列宁文献的情况和中文第二版的处理意见、中文第二版比俄文第五版新增加文献的说明、中文第二版的文献排列和卷次划分问题、中文第二版正文校勘应从俄文第五版的意见等。中央编译局局室两级领导讨论了这些报告,确定了新版的总体设计和编译方针。编辑组据此进行了各卷的具体编辑工作。 与此同时,为使我国读者早日看到尚未译出的列宁文献,中央编译局和人民出版社共同作出规划,由人民出版社组织若干大专院校的俄文教师和译者译出中文第一版没有刊载的列宁文献,编成十七卷《列宁文稿》,现已出版前十卷。前十卷是俄文第五版收载而中文第二版没有收的列宁文献,后七卷是俄文第五版也没有收的文献。 人民出版社组织力量译出俄文第五版人名索引的人名条目和卷末的资料性注释,编成《列宁全集俄文第五版人名索引》和《列宁全集俄文第五版注释》两本工具书,前者已经出版,后者即将出版。人民出版社还组织力量译出苏共中央马克思列宁主义研究院编写的十二卷本《列宁年谱》,已经出版前四卷。这是一部研究列宁的著作和传记的重要资料书,它收录了列宁生平活动的几万条史实,注明了列宁已发表的或未发表的著述和书简的写作和发表时间,记载了列宁编辑和翻译各种书刊的工作、列宁参加的各种会议、列宁与各界人士的会见、列宁签署的各种文件,等等。人民出版社所做的这些工作是新版全集准备工作的一部分,同时也为目前读者学习和研究列宁著作提供了方便。 统一新版全集的各种术语、译名和引文是一件十分烦琐、相当繁重的工作。为了统一译名,列斯室资料组制作了二十多万张译名卡片,并根据通用的译法和各种资料改正过去译得不确切或比较混乱的译法,确定合乎规范的切近原意的统一译法。他们把新版的人名、地名、报刊名以及党派社团、机关团体和各种组织机构的名称经过整理编成《列宁著作译名汇编》,交由湖南人民出版社出版。 编写组整理出两卷以上通用的注释和人物小传的资料,查阅各种辞书和资料以及新的研究成果,制定编写条例,参看俄文第五版的注释和人名索引,编写出初稿,反复讨论,几经易稿,定出一批通用稿,力求紧紧扣住原文,给读者提供翔实的参考资料。编写年表的同志做了大量核对、订正、增补或改写俄文第五版年表的工作。 各个校订组(包括几所高等院校的同志)齐头并进,着手译文的校订,在校订过程中多次讨论新版译文的校订标准,统一校订思想。为了提高新版译文的质量,大家切磋琢磨,有时争论得面红耳赤。一些疑难句子和重要论点的译法提交局或室组织集体讨论,务求得到合意的译法。象《党的组织和党的出版物》这样的重要文章,还请局外专家学者共同研讨译文的修改。校订稿上留下的用各种颜色的笔写下的密密麻麻的修订意见,记录下集体精神劳动的辛劳和认真负责的精神。 【编译原理论文】推荐阅读: 编译原理学习论文02-01 编译原理实验语法分析06-03 大班数学 编译密码06-10 论文:《原电池原理》07-17 中学德育原理论文12-28 网络通信原理论文09-16 机械原理课程设计论文12-20 马克思哲学原理的论文05-31 马克思主义原理论文题目07-22 城市规划原理结课论文07-24编译原理论文 篇2
编译原理论文 篇3
编译原理课程设计简介 篇4
编译原理论文 篇5
《编译原理课程设计》教学大纲 篇6
编译原理实践教学改革初探 篇7
《列宁全集》第二版编译随记 篇8