编译原理教学大纲(范文模版)

时间:2019-05-12 17:30:47下载本文作者:会员上传
简介:写写帮文库小编为你整理了多篇相关的《编译原理教学大纲(范文模版)》,但愿对你工作学习有帮助,当然你在写写帮文库还可以找到更多《编译原理教学大纲(范文模版)》。

第一篇:编译原理教学大纲(范文模版)

编译原理教学大纲

一、课程的性质、地位

本课程是计算机专业的重要专业课之一,是一门理论性和实践性较强的课程。主要介绍程序设计语言编译程序构造的基本原理和基本实现方法。本课程主要讲授形式语言、有限自动机、自上而下和自下而上的语法分析、LR分析方法、属性文法和语法制导翻译、语义分析的代码产生、存储器的动态分配与管理、符号表的组织与管理、优化问题、代码生成等内容。通过本课程学习,使学生对编译的基本概念、原理和方法有完整的和清楚的理解,并能正确地、熟练地运用。

二、课程的目的、任务和要求

该课程的目的是让学生掌握程序设计语言编译程序构造的一般原理、基本设计方法、主要实现技术和一些自动构造工具。通过本课程的学习,使学生较好地掌握编译原理的基本原理和基本技术、编译原理中涉及的基本算法、基本结构和主要实现技术,从而让学生了解将高级程序设计语言源程序翻译成计算机能处理的目标代码语言的整个过程,基本掌握计算机系统软件之一 编译程序的构造原理及相关技术,同时,还可提高学生计算机专业素质,培养学生的抽象思维能力。通过学习,学生可基本掌握计算机系统软件之一 编译程序的构造原理及相关技术,同时,还可提高学生计算机专业素质,培养学生的抽象思维能力。

三、与其它课程的关系

要求学生具有较好的计算机基础知识,对计算机的工作原理有一定了解,前导课程包括:高等数学、线性代数、计算机原理、离散数学、高级程序设计语言、数据结构等课程。

四、课程内容(建议理论课时:62 上机课时:18)第一章 编译程序概论

1、教学目的及要求:

本章介绍编译程序在计算机科学中的地位和作用,介绍编译技术的发展历史,讲解编译程序、解释程序的基本概念,概述编译过程,介绍编译程序的逻辑结构和编译程序的组织形式。要求理解编译程序、解释程序和遍的基本概念;掌握编译过程各阶段的任务和编译程序逻辑结构及其各部分的基本功能。

2、教学内容:

编译程序,编译过程概述,编译程序的结构,编译程序与程序设计环境,编译程序生成,学习构造编译程序。

3、教学重点:

重点:编译程序工作的基本过程及其各阶段的基本任务,编译程序总框。

4、教学难点:

编译的遍。

5、教学时间分配及进度安排:

建议本章教学时数2学时。

6、章节内容

1、什么是编译程序

2、编译过程概述

3、编译程序的结构

4、编译技术和软件工具 第二章 文法和语言

1、教学目的及要求:

本章是编译原理课程的理论基础,要求理解文法、语言、规范推导、规范归约和短语、简单短语、句炳的基本概念;掌握语言的求解方法、文法的二义性与递归性的判断方法及句型的分析方法。

2、教学内容:

形式语言的基本概念,包括符号串的基本概念和术语、文法和语言的形式定义、句型分析、文法和语言的Chomsky分类,二义性。

3、教学重点:

上下文无关文法,语言定义。

4、教学难点:

推导,文法与语言的相互转换。

5、教学时间分配及进度安排:

建议本章教学时数5学时。

6、章节内容

1、文法的直观概念

2、符号和符号串

3、文法和语言的形式定义

4、文法的类型

5、语法树和二义性

6、句型的分析

7、文法中的实用限制 第三章 词法分析

1、教学目的及要求:

本章介绍编译程序的第一个阶段词法分析的设计原理和设计方法,要求掌握正则文法、状态转换图、DFA、NFA、正规式和正规集的基本概念和词法分析设计与编写。

2、教学内容:

词法分析的设计原理和设计方法,源程序输入与词法分析程序输出、正则文法及其状态转换图、确定的有限自动机(DFA)不确定的有限自动机(NFA)正则表达式与正规集。

3、教学重点:

重点:词法分析器的任务与设计,状态转换图。

4、教学难点:

正则文法、正规集、DFA、NFA的相互转化。

5、教学时间分配及进度安排:

建议本章教学时数8学时。

6、章节内容

1、词法分析程序的设计

2、单词的描述工具

3、有穷自动机

4、正规式和有穷自动机的等价性

5、正规文法和有穷自动机间的转换 第四章 语法分析—自上而下分析

1、教学目的及要求:

本章介绍编译程序的第二个阶段语法分析的设计方法和实现原理,包括自上而下分析的无回朔的递归下降分析、LL(1)分析法。要求理解递归下降分析、LL(1)文法的基本概念;掌握无回朔的递归下降分析的设计和实现、LL(1)分析表的构造与分析方法。

2、教学内容:

语法分析器的功能,自上而下语法分析(递归下降分析法,预测分析程序),LL(1)分析法,递归下降分析程序构造,预测分析程序。

3、教学重点:

递归下降子程序,预测分析表构造,LL(1)文法。

4、教学难点:

LL(1)文法预测分析表构造。

5、教学时间分配及进度安排:

建议本章教学时数5学时。

6、章节内容

1、确定的自顶向下分析思想

2、LL(1)文法的判别

3、某些非LL(1)文法到LL(1)文法的等价变换

4、不确定的自顶向下分析思想

5、确定的自顶向下分析方法 第五章 语法分析—自下而上分析

1、教学目的及要求:

要求理解算符优先文法、最左素短语、有效项目的基本概念;掌握算符优先分析方法、LR(0)文法的判断及LR(0)分析表的构造与分析方法、SLR(1)文法的判断与SLR(1)分析方法和LR(1)文法的判断与LR(1)分析方法。

2、教学内容:

自下而上语法分析(算符优先分析法),算符优先分析,LR分析器,LR(0)项目集族和LR(0)分析表的构造,SLR分析表的构造,规范LR分析表的构造。

3、教学重点:

归约,算符优先表构造,LR分析法。

4、教学难点:

归约,LR分析法。

5、教学时间分配及进度安排:

建议本章教学时数12学时。

6、章节内容

1、自底向上分析思想

2、算符优先分析法

3、LR分析法 第六章 属性文法和语法制导翻译

1、教学目的及要求:

本章介绍编译程序的第三个阶段语义分析及中间代码生成的设计原理和实现方法,要求理解语法制导翻译、语义动作的基本概念;掌握算数表达式和赋值语句到中间代码的翻译、布尔表达式和几种控制语句的目标代码结构分析和到四元式的语法制导翻译;说明语句的语法制导翻译。

2、教学内容:

语法制导翻译的基本概念、中间代码的形式,可执行语句和说明语句的语法制导翻译方法。

3、教学重点:

语法制导翻译基本思想,语法制导翻译概述,基于属性文法的处理方法,自下而上分析制导翻译概述。

4、教学难点:

属性文法的处理方法

5、教学时间分配及进度安排:

建议本章教学时数9学时。

6、章节内容

1、属性文法

2、语法制导翻译概论

3、中间代码的形式

4、简单赋值语句的翻译

5、布尔表达式的翻译

6、控制语句的翻译 第七章 符号表

1、教学目的及要求:

本章介绍编译程序的组成部分之一符号表的管理,要求掌握符号表管理的基本方法。

2、教学内容:

符号表的作用、建立、符号表栏目的组织、符号表上的操作。

3、教学重点:

符号表的作用与内容。

4、教学难点:

符号表的内容。

5、教学时间分配及进度安排:

建议本章教学时数3学时。

6、章节内容

1、符号表的作用和地位

2、符号表的主要属性及作用

3、符号表的组织

4、符号表的管理 第八章 运行时存储空间组织

1、教学目的及要求:

本章介绍目标程序运行时的存储组织方式,包括静态存储分配和动态存储分配。要求掌握各种存储组织形式的基本方法。

2、教学内容:

目标程序运行时的活动,运行时存储器的划分,静态存储管理,简单的栈式存储分配的实现,嵌套过程语言的栈式实现,堆式动态存储分配。

3、教学重点:

静态分配策略和动态分配策略基本思想,嵌套过程语言栈式分配,活动记录、运行时栈的组织。

4、教学难点:

嵌套过程语言栈式分配,活动记录、运行时栈的组织。

5、教学时间分配及进度安排:

建议本章教学时数9学时。

6、章节内容

1、数据空间的三种不同使用方法

2、栈式存储分配的实现

3、参数传递

第九章 代码优化

1、教学目的及要求:

本章介绍优化的相关知识,要求掌握局部优化,基本块的DAG表示及其应用,控制流分析和循环查找算法,到达定值与引用定值链,循环优化。

2、教学内容:

主要内容:优化概述,局部优化,基本块的DAG表示及其应用,控制流分析和循环查找算法,到达定值与引用定值链,循环优化。

3、教学重点:

局部优化;DAG的构造与应用。

4、教学难点:

循环查找。

5、教学时间分配及进度安排:

建议本章教学时数6学时。

6、章节内容

1、优化技术简介

2、局部优化

3、控制流分析和循环优化 第十章 代码生成

1、教学目的及要求: 本章介绍编译程序的第五阶段目标代码的生成的设计原理和实现方法,要求掌握四元式到汇编语言的目标代码生成方法。

2、教学内容:

目标机器模型,一个简单代码生成器,寄存器分配,DAG目标代码,窥孔优化。

3、教学重点:

简单代码生成器,寄存器分配策略。

4、教学难点:

寄存器分配策略。

5、教学时间分配及进度安排:

建议本章教学时数3学时。

6、章节内容

1、代码生成概述

2、一个计算机模型

3、一个简单的代码生成器

4、代码生成研究现状

注:使用教材-编译原理(第二版).张素琴,吕映芝,蒋维杜,戴桂兰编著,清华大学出版社,2005.2。参考书:

1)编译原理, 何炎祥, 华中理工大学出版社, 2000.10 2)编译原理, 陈火旺等, 国防工业出版社, 2000.1 3)编译原理, 蒋立源, 西北工业大学出版社, 1999.9

第二篇:《编译原理课程设计》教学大纲

《编译原理课程设计》教学大纲

课程名称: 课程编号: 适用专业: 总 学 分: 总 周 时: 主 撰 人: 撰写日期:

一、目的与任务

通过程序设计上机调试程序实现算法,学习编译程序调试技巧和设计编译程序的一般原则,加深对词法分析、语法分析、语义分析和中间代码生成等编译阶段及实用编译系统的认识,初步掌握编译程序构造的基本原理与技术, 从形式语言理论的角度, 进一步认识与理解程序设计语言。通过编译程序的编写和调试能力的训练,激发学生进一步思考问题,培养学生的学习兴趣和创新能力。并进一步培养学生的抽象思维能力,进一步巩固《编译原理》课程所学知识。

本次课程设计的时间为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年

7、《编译原理实验指导书》自编

第三篇:《编译原理》课程设计教学大纲

《编译原理》课程设计教学大纲

揭金良 2006.10.20 1 目的

通过课程设计,将《编译原理》的相关理论和技术运用到软件开发中,提高学生的应用程序设计能力,提高分析问题、解决问题的能力。内容

利用编译原理的某种思想或方法,设计一个应用程序,实现的具体内容自拟(见下面的选题指导)。要求

进行简单的需求分析、设计说明,写出程序结构框架,阐明设计思路、用到的原理和方法。程序规模适中,着重于内核功能。估计时间

总共时间2.5周(150学时),其中:1.讲课2学时;2.上机48学时调试;3.其余非上机时间由同学自行安排分析、检查问题、绘制流程图、写相关文档,最后集成设计(实验)报告并自行打印。过程指导

5.1 选题

通过平时积累,找到适合于自己的应用或某种软件功能,该应用能利用编译原理中的某些理论。题目大小适中。参考题目如下: 表达式计算器

表达式计算器:这是一款算术表达式计算程序,通过输入表达式达到计算的目的,可代替目前普遍使用的计算器。使用了编译原理中的词法分析、算符优先分析等。根据功能的不同可分为:

⑴无符号整数表达式计算器:输入无符号整数表达式,输出结果。难度:较难。工作量:中等。

 整数表达式计算器:考虑负数。难度:较难。工作量:中等。 定点实数表达式计算器:难度:较难。工作量:中等。

 通用表达式计算器:考虑1.23e-2的形式输入。难度:难。工作量:中等。⑵函数表达式计算程序:这是一款能计算函数值的实用程序,输入含有自变量x的函数表达式被接受后,可接着输入自变量x的值,输出函数值y的值。使用了词法分析、算符优先分析。根据功能的不同可以分为:

 多项式函数计算程序:只处理多项式函数,如f(x)=x^3+x^2+5等。难度:较难。也可设计成其他专用函数计算程序,如幂函数计算、三角函数计算等。但要避免出现不同用,如不要设计成仅能处理f(x)=2^x的幂函数,因为这样的函数利用普通编程就能实现,无法体现编译原理。工作量:中等。

 通用初等函数计算程序:能处理所有的初等函数的计算。如f(x)=3*sin(x/2+3.1415)+x^2等。难度:难(因为涉及到函数名称和参数的识别问题)。工作量:较大。

 二元或多元函数的计算:如f(x,y)=x^2+y^2等。难度和工作量同一元函数的计算。⑶逻辑运算分析:输入逻辑表达式串,对表达式进行分析,并得出结果。难度:较难。2 字符串搜索程序

输入要查找的字符串的正规表达式,软件可在大量文本(要求不低于3000字符的文档资料文件)中找到符合描述的字符串。这个设计可参考微软.NET的正规表达式的功能。

⑴字符串搜索程序:使用到正规式、词法分析等,还需要有较大的设计技巧。根据功能的不同可以分为:

 名称查找程序(类似于文件名):存有大量的名称,如abc,123,a1,ab1245等,输入要查找的规则,找出符合规则的名称。

 方案1:通配符,把“*、?”当作通配符:如输入“a*”,显示“abc,a1,ab1245”;输入“a?”,输出“a1”。

 方案2:正规式,把“*”当作“闭包”,把“|”当作“或”:如输入“(a|b)1”,输出“a1”;输入“(a|b)*c”,输出“abc”。

 方案3:只要包含正规式即可,当名称中包含该正规式,就输出来:如输入“(a|b)1”,输出“a1,ab1245(含有b1)”;输入“(a|b)*”,输出“abc,a1,ab1245”。

 方案4:含有通配符的正规式,设“@”表示任意字母,“$”表示任意数字(其他可再设多一点,如表示符号等,但会减少名称中的符号种数):如输入“a@*” 输出“abc”;输入“a(@|$)*”,输出“abc,a1,ab1245”。

(以上涉及到正规式的方案难度较大,其他难度一般。注:以上的@$等符号是随便设定的,与.NET中通用的符号不同且有冲突的,请在实际编程时修改它。)

 文本搜索程序:在一连串文本中搜索所需的字符串。同“名称查找程序”中的有关正规式的方案,难度较大,具体正规式包含哪些符号和通配符可另定。

(关于正则表达式的介绍参见另一文档,详细信息见.NET框架联机文档)3 逻辑运算分析

可对关系表达式进行分析,并得出结果。这个设计结果可改变后用于电路分析、谓词演算等。源程序扫描程序

对某种高级语言的源程序进行分析,建立符号表,找出尽可能多的问题并输出相关的出错信息。转义符的识别

C语言的字符串常量书写时使用了大量的转义符,如“”表示单斜杠,而“n”表示换行(同“u000A”),“x20”表示十六进制表示形式(恰好两位)与 ASCII 字符匹配(这里代表值为32的ASCII字符,即空格)。请参照C语言教材,编制一个软件,输入包含转义符的字符串,输出没有转义符的真实字符串。难度:一般。工作量:一般。有限自动机的运行

设计一个确定的有限自动机,写出状态转换函数,或画出状态图,编制程序,输入一个字符串,程序能判别该字符串是否能被该有限自动机接受,可以考虑输出能否接受的同时,输出状态路径。难度:一般。

⑴整数的判断:写出整数的正规式,画出状态图,写出状态转换函数。编出程序。难度:简单。

⑵同上的过程还可以进行:正偶数的判断、自然数的判断、定点数的判断等。⑶实数的判断:过程同上。难度:一般。7 编写一个语法分析程序

编写一个语法分析程序,对输入到缓冲区的符号进行分析,建立相应的语法树,并输出相应的语法树。编写一个代码生成程序

编写一个代码生成程序,形成三地址程序并输出到文件中,打印三地址程序。9 学习使用LEX和YACC工具

LEX和YACC分别是生成词法分析程序和语法分析程序的工具,即编译程序的编译程序。其功能非常强大,可用于任何语言的分析。

学习使用LEX和YACC工具并编写相应程序。请参考有关文档资料。

5.2 分析

选好题目后,分析该题目的应用性,可用到编译原理的哪些理论?对它们进行简单阐述。同时对软件进行需求分析,通过回答下面问题得到:

1.软件提供哪些功能?软件有什么用?界面怎样?怎样使用该软件?对输入数据的格式有什么要求?用什么语言开发?怎样测试该软件?该软件开发的进度如何安排?

2.写出以上问题的答案,然后自问:你的分析材料别人能非常清楚地看懂吗?如果回答是肯定的,就可以搞设计了。

5.3 设计

对软件划分功能模块,将模块细化,设计出数据存放格式,写出各模块(函数)的功能、传递参数的格式和返回值的类型,画出模块结构图。最后画出较详细的程序流程图。

5.4上机

按课表的安排上机(修改设计/编码/调试/测试)。

1.根据流程图编制并输入代码,教师查看学生的设计,对设计提出修改意见。2.修改设计,继续完成输入代码,并作初步调试。3.调试,教师帮助解决学生设计和调试中出现的难题。4.修改设计中的缺陷,完善程序。„„

演示软件,教师根据实际情况提出测试用例,学生作最后的修改和完善,教师评分。继续完善程序,并完成设计说明书,上交成果。

5.5 注意事项

测试数据的设计:每组测试数据包括输入数据、预期的输出结果、实际的输出结果和预期的是否相吻合(如果不吻合,实际输出什么?可能错误的原因?检查源代码或设计进行查错,纪录结果)。上交文档

1.程序源代码(打印,文件名中包含姓名);

2.一组较完备的测试数据(存在一个文本文件中);

3.设计报告:有关的文档资料,包括:选题报告,简单的软件需求分析说明书,软件设计说明,设计经验总结。其中设计经验总结可以包括下列方面:你在编程过程中花时多少?多少时间在纸上设计?多少时间上机输入和调试?多少时间在思考问题?遇到了哪些难题?你是怎么克服的?你对你的软件如何评价?你的收获有哪些? 评分

教师对每个实验结果进行评分(优、良、中、及格、不及格),记入成绩。以下几方面可以提高分数: 7.1 软件实用性强;

7.2 软件使用了编译原理中的某些理论; 7.3 软件具有扩展性; 7.4 各类文档写的很规范;

7.5 设计时非常投入,设计后很有心得; 7.6 其他优点。

第四篇:编译原理 学习心得

国际学院 0802 杨良燕 200819100227

《编译原理》课程学习心得

《编译原理》是计算机专业的一门重要课程,正如教材

第一章的引论所述,“编译程序是现代计算机系统的基本组成部分之一”。“一个编译程序就是一个语言翻译程序,语言翻译程序把一种语言(源语言)书写的程序翻译成另一种语言(目标语言)的等价程序”。

通过这一学期的学习,我觉得编译原理是一门理论性很强的课程,从文法和语言的概念到LL(1)文法和LR(0)文法的分析,几乎都是对具体问题的抽象。因而,我们需要更多的时间来理解、掌握相关的知识,当然在这一过程中也存在很多问题,比如我们后期学习具体文法的分析方法时,对于文法的概念不够清晰,影响了上课的效率,知道老师再次给我们讲解了文法等基础的知识点,我们才慢慢掌握后面所学的LL(1)文法等,也发现了知识点之间的关联。此外,这门课程的课时被安排得很少,一周只有一次,这样很不利于我们对这门重要课程的理解和掌握。但是我觉得我们很幸运,因为老师在有限的课程中尽量将知识点以比较容易接受的方式给我们讲解,教我们用简单的方法理解记忆不同的知识,对于我们提出的问题,无论课上或是课外,老师一直是不厌其烦,甚至利用课余时间为我们讲解重要的难题。

编译原理这门课程不仅仅在于其本身的理论价值,更在于为我们解决问题提供的思维方式和方法。从LL(1)到LR(0),问题不断被解决的同时,又有一个个新的问题提了出来。对计算机语言世界的知识积累,像滚雪球一样越滚越大。这个逐渐递进,逐渐解决问题的过程对我来说是收获很大的。整个过程好像踏着前人研究编译理论的路线,不断感觉他们遇到的问题,更重要的是他们解决问题的思路。编译原理的课程带给我的不只是如何去编译程序这样的理论知识,相信更重要的是一种如何“自动计算”的思路。通过对相关编译问题的具体分析,让我体会最深的是一种“自动计算”的思想,同时完成编译试验后,更是感到了一种“自动计算”的快乐。”然而我明白自己虽然对编译有了一定的了解,我懂得了文法的分析,学会了构造确定和非确定有限自动机,学会了LL(1)文法和LR(0)文法等,但是并没有完全掌握,对于这些知识点的实质性和其他方面,更是认识不深。作为一名学习计算机科学与技术的学生,我明白编译原理是软件工程的基础,课程的结束并不意味着学习的结束,只有通过以后的学习,才能更深入地了解编译原理。

第五篇:编译原理实验报告

编译原理实验报告

报告完成日期 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.输出语法树 三、三地址码生成器

算法的基本思想:

我们增加了声明变量类型、类型赋值判定和声明的变量被引用时作用域的判断。从而使得我们的实验结果呈现的更加清晰和易懂。

在报错的时候,我们会呈现类型、作用域和赋值三种的问题的报错信息。

流程图:

算法展示:

四、实验体会

这次实验其实总的来说是让我们更加清晰的理解到了我们所学的内容。有时候我们上课听讲,课下复习写作业的时候,其实看似掌握了所学内容,但实际上并没有亲身体会的操作很难让我们深刻的理解其中的相关意义。通过这次实验,我们能够从根源处了解到了我们所学的内容,并且基于我们理解之后的输出。比如词法分析不能采用空格来区分单词,因为存在加减乘除等运算符和分隔符,使用空格来区分可能会造成错误的分解。又比如我们再在程序设计中,常常体会到效率的重要性。影响词法分析的效率的主要因素是各个状态的分支如何规划。如果每个进来的单词都能在最短的时间和最少的匹配次数内找到其入口,则效率将得到很大程度上的提高。所以由此我们产生了声明变量类型、赋值和作用域的想法,将其放在最后来进行判断,这样可以提高整体的执行效率。

另外,这次小组成员彼此不在一个班级,这样从某一方面来说,也加强了我们互相快速熟识并团结协作的能力,有了这种体验,我想我们在今后的生活中,面对这种情况的时候,将会变得更加有经验。

五、源程序

词法分析器: 输入结果:

输出结果:

语义分析结果:

输入:

第二组数据的输入:

输出:

三地址码的输入:

第二组数据的输入:

输出:

下载编译原理教学大纲(范文模版)word格式文档
下载编译原理教学大纲(范文模版).doc
将本文档下载到自己电脑,方便修改和收藏,请勿使用迅雷等下载。
点此处下载文档

文档为doc格式


声明:本文内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:645879355@qq.com 进行举报,并提供相关证据,工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。

相关范文推荐

    编译原理课程设计

    课 程 设 计 报 告 设计题目:一个简单文法的编译器前端的设计与实现 班级: 计算机1206 组长学号:201239 组长姓名:闫智宣 指导教师:李晓华 设计时间:2014年12月 [在此处键入] 设......

    编译原理论文

    编译原理心得体会 编译原理是计算机专业的一门重要专业课,旨在介绍编译程序构造的一般原理和基本方法,在计算机本科教学中占有十分重要的地位。 该课程理论性与实践性都很强,我......

    2018年安徽师范大学《编译原理实践》课程教学大纲

    《编译原理实践》课程教学大纲 课程编号:07114180 适用专业:计算机科学与技术系计算机应用专业(软件本科) 学时数:34(理论学时数:10 实验或讨论学时数:48) 学分数:2 执笔者:周有顺 编写......

    编译原理课程设计报告

    武 汉 纺 织 大 学 编译原理课程设计实验报告学院:数学与计算机 专业:计算机 姓名: 班级: 学号:1 编译原理 编译原理课设报告 一、 实验目的 加强对编译程序的整体认识和了解,巩......

    编译原理试题(2009-2010-1)

    《编译原理》试题A 1.名词解释 短语 LL(1)文法 语法分析 无环路有向图(DAG) 语法制导翻译 2. Pascal语言无符号数的正规定义如下: num  digit+ (.digit+)? (E(+|-)? digit+)?......

    编译原理学习论文(推荐)

    编译原理学习论文 班级:09应用(2)班姓名:彭文阳学号:2009081215 大学课程为什么要开设编译原理呢?这门课程关注的是编译器方面的产生原理和技术问题,似乎和计算机的基础领域不沾边,......

    编译原理课程设计设计任务书

    编译原理课程设计任务书 1、目的 学生在学习《程序设计语言编译原理》课程过程中,结合各章节的构造编译程序的基本理论,总共用10个课时完成课程设计。在基本实验完成的基础上,......

    编译原理课程设计心得体会

    经过一个星期的编译原理课程设计,本人在刘贞老师的指导下,顺利完成该课程设计。通过该课程设计,收获颇多。一、对实验原理有更深的理解通过该课程设计,掌握了什么是编译程序,编译......