第一篇:编译原理课程设计文档格式规范
一、课程设计内容:(两个题目任选一个)
1、题目一:
根据指导教师的要求设计一个C语言子集的编译器,要求有友好的图形界面,能
够实现编译的词法分析,语法分析和语义分析功能,并具备一定的错误处理能力,给出总的出错报告,编译最终形成四元式的中间代码形式。
四元式的格式参照书上,如果你采用另外的中间代码形式,请在报告中说明 语法分析和语义分析方法不限 编程工具不限。如果实现了代码优化或者是目标代码生成(目标代码采用汇编形式),则在原来得
分基础上加分
2、题目二,自选,但必须在第7周周五之前将你所要编译的语言文法提交指导教师
二、课程设计文档格式规范:(用A4纸打印)
1、封面(题目,班级,姓名,指导教师,得分,日期)
2、文档正文
1)设计任务或设计要求:包括你要编译的语言和你的设计目标,要给出你所编译的源语言的文法。
2)需求分析
3)系统设计
4)详细设计(源代码要另外拷贝到光盘上,所以在这里不需要附加源代码)
5)操作说明
6)测试报告(至少给出3个例子程序以及运行结果)
3、小结
注意:
如果你采用的是面向过程的程序设计,请给出功能模块图,数据流图,程序控制流程图,
以及全局变量说明,主要数据结构说明,函数说明,函数调用关系说明。如果你采用的是面向对象程序设计,请给出类图,usercase图,等。源程序请使用良好的注释习惯。
三、课程设计时间安排
本次设计从第4周——第15周,共12周第4周:布置任务,准备
第5-6周:确定文法,选定编程工具,确定分析方法,需求分析,系统设计
第7-13周:词法,语法,语义的详细编码
第14周:整体调试程序,加上图形界面,通过后书写文档
第15周:收文档和源代码,打分
注意:
从第7周开始,每周四上午第一大节到302机房(每个班两周检查一次,单数周计科061,双数周计科062),检查进度,严格考勤,不来者按旷课,扣平时成绩得分,来了但没有按规定完成任务,扣平时成绩得分。
四、C语言子集
算术运算符:+-*/
关系运算: ><>=<=!====
逻辑运算 && ||!
赋值运算=
数字0 1 2 3 4 5 6 7 8 9
字符a…..zA…..Z
标示符的命名规则:由字母和下划线组成,打头的只能是字母,区分大小写,不能和关键字重复。
注释:单行注释//多行注释/**/
数据类型有整型int ,字符型char
符合数据类型有数组int a[6]
程序由一个主函数组成<主函数> → void main(){<复合语句>}
<复合语句> → <常量说明部分><变量定义部分><语句序列>
<常量说明部分> → const< 常量定义>{,<常量定义>};
<常量定义> → int <标示符>=<整数>{,int <标示符>=<整数>} |
char <标示符>=<字符>{,char <标示符>=<字符>} |
变量定义:int a;
int a,b;
int a=3,b;
<语句序列> → <语句>;<语句序列>
语句有赋值语句 <标示符>=<表达式>
读语句:scanf(“<标示符>”)
写语句:printf(<字符串>);
条件语句:if(条件){}else{}
If(条件){}
循环语句: while(条件){}
For(i=1;i<=10;i++){}
第二篇:编译原理课程-教学计划
编译原理教学大纲2001,9
周次课内学时课内安排(讲授内容)建议课外安排备注
12编译原理概述阅读PL/0程序文本
24介绍PL/0编译程序阅读PL/0程序文本
32词法分析程序自动构造阅读PL/0程序文本
(正规式,有穷自动机)
44(2)词法分析程序自动构造练习题
Lex(Flex)介绍,布置PP1实践题一PP1
52文法和语言练习题
64自顶向下语法分析练习题提交PP1LL(1)文法
72自底向上语法分析练习题
LR文法
84LR分析练习题
期中考试
92Yacc介绍,布置PP2实践题一PP2
104习题课
语法分析方法比较提交PP2 112语法制导翻译,布置PP3实践题一PP3
124语法制导翻译
运行时存储组织提交PP3 132运行时存储组织练习题144代码优化, 布置PP4实践题一PP4
152代码生成164实践题目总结答辩
习题课
附1 实践题目(从中选一)
实践题一 Deacf编译程序的设计和实现.实践题二Pl/0编译程序扩充,用Lex和 Yacc实现一个小解释器.实践题三 java实现的Mini-Triangle编译程序.(限少数同学选,在第四周作选题报告)附2 课程评分
1课堂小测验,作业抽查 10%期中考试20%
3实践题一 40% 实践题二20% 实践题三 50%
4期末考试 完成实践题一 30% 完成实践题二50% 完成实践题三 20%
第三篇:《编译原理》课程培训心得体会
《编译原理》课程培训心得体会
天津科技大学 吴江红
首先感谢全国高校教师网络培训中心为我们这些工作在教学第一线的教师提供一个提高自己教学水平、方法和能力的机会,使得我们学习到更好的方法能更好地为学生服务。经过本次培训之后,我个人觉得可以通过以下几个方面提高教学质量。
1、认清编译原理,明确学习意义,激发学生的热情 帮助学生认清编译原理的作用和地位。给学生介绍清楚可以通过编译原理的学习,有助于学生快速理解、定位和解决在程序编译、测试与运行中出现的问题。帮助学生克服畏难心理,提高学生的兴趣。编译原理中的原理除了可以用于分析编译器以外,还对诸如人工智能、并行处理技术等课程的学习具有指导作用。本门课程学习对其它课程的学习和今后很多领域的理论研究具有深远的意义,如计算机软件技术领域、计算机系统结构领域、人工智能系统的机器学习领域、并行处理技术等领域。
2、优化教学内容,搞好课堂教学
可以采用以人本主义学习理论为基础,充分发挥学生的学习主动性,注重启发式教学,注重提高学生的素质、培养学生的创新能力。使得学生对编译原理课程的兴趣提高,能主动学习,理解、体会前辈们在解决相应问题时是如何考虑的,同学们自己又是如何考虑的。
编译系统中的一些概念很抽象,学生无法理解,就只会死记硬背,当然更无兴趣可言。在讲解的过程中,可以选用学生最熟悉的一些实例,通过类比使抽象的概念更容易被理解。我本人觉着对于工学学科的同学来说,不用在数学定义上花费太多时间,因为他们对数学符号不敏感,而应该尽量多安排例子,使得同学们能把数学符号代表的含义通过例子理解清楚,以及知道如何使用。
有效地利用教学辅助手段,增强课堂教学效果。由于本课程涉及形式语言、有穷自动机等抽象内容,学生在学习过程中接受起来较困难。为了提高学生的学习兴趣、增强课堂教学效果,可以将教学过程中一些需要教师在黑板上动态演示的过程做成CAI课件,既可在课堂上演示,也可在课后由学生自己观摩,有助于加深学生对所学知识的理解。
同时可在课堂上和习题中,多准备了一些从实际程序的编译和运行时碰到的问题中抽象出来的例子,供学生用所学的知识去分析、理解、并加以解决。通过采用这种实例教学方式,既能够对前期课程起到复习巩固的作用,又能让学生切实体会到本课程的实际价值,从而有力地激发了学生学习编译原理和技术的积极性。
3、选取合适的教材
把理论知识具体化、通俗化,教材在教学过程中起关键作用。一本好的教材不仅对老师教的过程很重要,同时在学生进行预习和复习时也是相当重要的。我们可以选择蒋宗礼教授编写的编译原理教材来达到我们的目标。
4、精心设计实验教学内容
编译原理课程对实践的要求比较高,所以实验课是培养学生实践能力的重要环节,是巩固和验证所学理论知识,培养学生分析问题、解决问题能力的重要环节。因此为了能达到好的实验效果,极大地促进学生对原理的理解,可以通过认真设计合适的实验内容、采用适当的实验形式以及教师的耐心指导等途径。
第四篇:编译原理课程报告(共)
编译原理课程报告
学院: 信息工程学院专业: 软件工程 姓名: 赖杰学号: 09927212 指导老师: 朱文华完成时间: 2012.5.19
编译原理是计算机专业的一门重要专业课,旨在介绍编译程序构造的一般原理和基本方法,在计算机本科教学中占有十分重要的地位。
编译程序是现代计算机系统的基本组成部分之一,而且多数计算机系统都配有不止一个高级语言的编译程序,对有些高级语言甚至配置了几个不同性能的编译程序。从功能上讲,一个编译程序就是一个语言翻译程序。语言翻译程序把一种源语言书写的程序翻译成另一种目标语言的等价程序,所以总的说编译程序是一种翻译程序,其源程序是高级语言,目标语言程序是低级语言。
编译程序完成从源程序到目标程序的翻译工作,是一个复杂的整体的过程。从概念上来讲,一个编译程序的整个工作过程是划分成几个阶段进行的,每个阶段将源程序的一种表示形式转换成另一种表示形式,各个阶段进行的操作在逻辑上是紧密连接在一起的。一般一个编译过程是词法分析、语法分析、语义分析、中间代码生成、代码优化和目标代码生成。
编写编译器的原理和技术具有十分普遍的意义,以至于在每个计算机工作者的职业生涯中,本书中的原理和技术都会反复用到。在这本书中,向我们介绍了文法的概念,在讲词法分析的章节中讲述了构造一个有穷自动机的方法,以及如何将一个不确定的有穷自动机转化成确定的有穷自动机和有穷自动机的最小化等方法。
该门课中主要讲述的是两种分析方法,即自上而下分析的方法和自下而上分析的方法。自上而下分析法是从文法的开始符号出发,反复使用各种产生式,寻找“匹配”于输入符号串的推导。自下而上的分析方法是从输入符号串开始,逐步进行“归约”到文法的开始符号。
1.自上而下的分析法主要的就是LL(1)文法,首先要判断某个文法是否是
LL(1)文法,如果是就可以按照LL(1)文法分析的方法去判断某一个输入串是否为该文法的句子。LL(1)f分析方法是,首先根据判断是否为LL(1)文法求出每一个非终结符的SELECTE集合来构造该文法的预测分析表,然后根据预测分析表去分析输入串得出结果;如果不是LL(1)文法,比如说文法产生式中含有左递归和相同的因子,就要消去左递归或公共因子,再根据每一个非终结符的SELECT集合来判断是否为LL(1)文法。利用LL(1)文法分析一个输入串是不是某一个文法的句子,根据预测分析表是比较直观的,而且分析的效率也是比较高的。
2.自下而上的分析方法主要是算符优先分析方法。算符优先分析的基本思
想是只规定算符之间的优先关系,也就是只考虑终结符之间的优先关系,由于算符优先分析不考虑非终结符之间的优先关系,在归约的过程中只要找到可归约串就归约,没有考虑非终结符之间的优先关系,所以说算符优先归约不是规范规约。算符优先分析首先是要构造算符
优先关系矩阵;然后就是分析输入串,根据关系矩阵进行移进或归约操作;最后分析得出判断的结果。
3.算符优先分析是有缺点的,由于算符优先分析方法在分析的过程中不知
道如何确定句柄。下面要说的就是LR(0)文法,这种方法能够根据当前分析栈中的符号串就可以惟一的确定分析器的动作是移进还是归约,并且是用哪一个产生式。根据规则写出LR(0)的分析的项目集,再由项目集构造LR(0)的分析表,其次根据分析栈的元素和状态,查看分析表,找出相关的句柄,是归约还是移进,最后就是分析得出结果了。SLR(0)文法是以LR(0)文法为基础的文法,是为了解决程序设计语言的文法不能够满足LR(0)文法条件的另一种文法分析的方法,大致的与LR(0)的分析过程相似,只是在项目集的组合上有些区别。
该课程理论性与实践性都很强,我在学习时普遍感到内容非常抽象,不易理解,内容多且繁琐,难以完整、全面地掌握编译原理的有关知识,更不用说灵活运用编译原理知识从事相关设计或应用于其他领域。虽然只有少数人从事编译方面的工作,但是这门课在理论、技术、方法上都对我提供了系统而有效的训练,有利于提高软件人员的素质和能力。
在我学习编译原理以前,都认为编译原理只能应用在写程序语言的编译器上,觉得用处不大,学习兴趣不高。而在后来的学习中,我逐渐认识到计算机专业的学生,除了要会编写程序语言之外,还应该了解它是如何被计算机所识别,这才是真正并且透彻地学习软件。另外,编译器中每一个模块的编写,都能对我的编程能力的提高有很大帮助。在今后若从事软件工程,这门课程也能够对编写程序有所帮助。
为了能够系统掌握这门专业课,我把编译原理分为以下几个模块:①语言和文法;②词法分析;③语法分析;④语义分析和中间代码生成;⑤代码优化和目标代码生成。
在学习的开始,我需要掌握什么是编译,编译分为哪些阶段,编译程序和解释程序的区别等等。在做好了这些方面的准备后,开始了系统的学习。
语言和文法部分的知识包括文法基本概念及文法的二义性。基本概念有文法定义、推导、句型、句子等等。二义性文法是通过画语法树的方法来证明。
词法分析中的重点是有穷自动机DFA的生成以及DFA和正规式与正规文法的关系。还要熟练掌握NFA转换为DFA的方法及DFA的化简。
语法分析包括自上而下和自下而上分析。自上而下分析着重掌握LL(1)文法,自下而上分析重点掌握算符优先文法和LR(0)、SLR(1)文法。
语义分析重点是其功能,中间代码生成和语法制导翻译定义与方法。
最后,优化分为局部优化和循环优化,重点理解一些关键词,如基本块、流图等,要学会自己画出程序流图。用DAG图进行局部优化是重点。
在学习文法时,对文法的组成,用法都较为明了,而在真正做题时却感到十分吃力。例如给出了一个语言,要求写出它的上下文无关文法,就感到十分棘手,所以今后在这方面要加大练习量,以熟练掌握。
而在之后的词法分析和语法分析中,我感到在看基本原理时十分困难,通常要长时间钻研才能够有所了解,而一旦掌握了基本原理,做题时就感到十分顺畅了。例如,在刚接触到LR(0)文法时,我用了大量的时间去学习它的原理,掌
握之后,在列LR(0)分析表和写分析过程时,只要思路清晰,就会比较顺畅,而且不会犯错。
通过这学期的对编译原理课程的学习,这么课程让我学会了如何去编译程序的一个理论知识,知道编译程序是通过怎样的方法把程序员编写的源程序翻译成计算机能够执行的机器语言的,我觉得主要的是大大加深了我对程序设计的理解,也对计算机的理论和软件编译有了深一步的理解。这学期的编译原理的实验使我知道了编译程序的工作的基本过程及其各阶段的基本任务,了解了 编译程序流程框图,编译程序的生成过程、构造工具及其相关的技术对课本上的知识有了更深的理解,可以说这是将书本上的理论知识的应用,是对理论知识的更深一步的理解和掌握。
第五篇:机械原理课程设计规范[推荐]
机械原理课程设计规范
1.内容要求
(1)绘制正确的机构简图。
(2)使用正确的技术数据进行必要的分析、计算和校核。
(3)进行逻辑清晰、层次完整、语言流畅的说明和论述。
(4)使用必要的CAD/CAE技术进行数值分析或模拟。
2.字数要求
机械原理课程设计说明书字数不少于15000字,相关图幅可作为正文插图或正文后附图。
说明书每页按850字折算;纸张为A4纸,21cm×29.7cm;页面边距设置为上3cm、下2 cm、左4 cm、右2 cm;左侧装订。
3.格式要求(按装订顺序。指导教师评价表、答辩评价表与课程设计说明书直接装订在一起。)
(1)封面页:格式见1—封面。
(2)签名页:格式见2——签名页。
(3)目录页:格式见3——目录。
(4)正文部分:格式见4——课程设计说明书的正文格式。
(5)参考文献:格式见5——参考文献。
(6)个人总结:格式见6——个人总结。
(7)附录、附图页(必要时):格式见7——说明书附录、附图。
(8)指导教师评价表:格式见8——指导教师评价表。
(9)答辩评价表:格式见9——答辩评价表。
4.质量要求
(1)机械原理课程设计的质量要求参见“指导教师评价表”和“答辩评价表”。
(2)指导教师质量评价分值小于48分,为课程设计质量不及格;答辩质量评价分值小于12分,为答辩不及格。课程设计质量不及格的或答辩不及格的,不予课程设计修改和二次答辩,须重修课程设计并参加下届学生的课程设计。
(3)须有必要的CAD/CAE技术应用。