编译原理课设总结

2024-04-25

编译原理课设总结(精选8篇)

篇1:编译原理课设总结

董楠楠1006010101

经过一个星期的编译原理课程设计,在老师的指导以及小组同学的互相帮助下顺利完成该课程设计。通过该课程设计,收获很多。

此次课设,我们小组用的是java语言,在课设过程中,用到了以前开发过程中所没有的探索过的很多新方法,最直接的影响就是让我对java语言的认识与理解更近一层。并且掌握了什么是编译程序,编译程序工作的基本过程及其各阶段的基本任务,对课本上的知识有了更深的理解。

因为本实验用了java语言编写,个人觉得相比C语言模块更加清晰明了。在该词法分析程序中,我们用了java中的split方法对输入串进行分割,简单易懂。其次,在字符匹配过程中,引进了正则表达式,让输入串与之匹配,极大地缩减程序的繁琐性。同时,java的面对对象的性质在程序中得到充分的体现,在代码的编写过程中,将各种判定封装为函数,主函数通过调用这些封装函数完成功能,摒弃了C语言结构化的繁琐,使整个处理函数清晰可读。在测试多个用例时,发现程序的很多小错误,但最后都能够一一解决,尤其在这个过程中,我也充分体会到了团队合作的力量。此次课设更加深了对java语言的认识,并熟悉了java语言中正则表达式的用法。

通过该课程设计,全面系统的理解了编译原理程序构造的一般原理和基本实现方法。能够把学过的计算机编译原理的知识强化,并通过自己设计的程序表现出来,加深了对理论知识的理解,同时也激发了学习的积极性。课程设计中的第二个程序对简单表达式文法构造算符优先分析器比较复杂,在调试时出现了很多问题,经过大量的修改和一遍又一遍地调试,最后把错误全都改正没有做到根据文法得到相应的算符优先表,而是在程序中直接给出,这是程序的一个小缺陷。

篇2:编译原理课设总结

1.什么是编译程序?

答:编译程序是一种将高级语言程序(源程序)翻译成低级语言(目标程序)的程序 。

将高级程序设计语言程序翻译成逻辑上等价的低级语言(汇编语言,机器语言)程序的翻译程序。

2.请写出文法的形式定义?

答:一个文法G抽象地表示为四元组 G=(Vn,Vt,P,S)

– 其中Vn表示非终结符号

– Vt表示终结符号,Vn∪Vt=V(字母表),Vn∩Vt=φ

– S是开始符号,

– P是产生式,形如:α→β(α∈V+且至少含有一个非终结符号,β∈V*)

3.语法分析阶段的功能是什么?

答:在词法分析的基础上,根据语言的语法规则,将单词符号串分解成各类语法短语(例:

程序、语句、表达式)。确定整个输入串是否构成语法上正确的程序。

4.局部优化有哪些常用的技术?

答:优化技术1—删除公共子表达式

优化技术2—复写传播

优化技术3—删除无用代码

优化技术4—对程序进行代数恒等变换(降低运算强度)

优化技术5—代码外提

优化技术6—强度削弱

优化技术7—删除归纳变量

优化技术简介——对程序进行代数恒等变换(代数简化)

优化技术简介——对程序进行代数恒等变换(合并已知量)

5.编译过程分哪几个阶段?

答:逻辑上分五个阶段:词法分析、语法分析、语义分析与中间代码生成、代码优化、目

标代码生成。每个阶段把源程序从一种表示变换成另一种表示。

6. 什么是文法?

答:文法是描述语言的语法结构的形式规则。是一种工具,它可用于严格定义句子的结构;

用有穷的规则刻划无穷的集合;文法是被用来精确而无歧义地描述语言的句子的构成方式;文法描述语言的时候不考虑语言的含义。

7. 语义分析阶段的功能是什么?

答:对语法分析所识别出的各类语法范畴分析其含义,进行初步的翻译(翻译成中间代码);

并对静态语义进行审查。

8.代码优化须遵循哪些原则?

答:等价原则:不改变运行结果

有效原则:优化后时间更短,占用空间更少

合算原则:应用较低的代价取得较好的优化效果

9.词法分析阶段的功能是什么?

答:

逐个读入源程序字符并按照构词规则切分成一系列单词

任务:读入源程序,输出单词符号

— 滤掉空格,跳过注释、换行符

— 追踪换行标志,指出源程序出错的行列位置

— 宏展开,……

10.什么是符号表?

答:符号表在编译程序工作的过程中需要不断收集、记录和使用源程序中一些语法符号

的类型和特征等相关信息。这些信息一般以表格形式存储于系统中。如常数表、变量名表、数组名表、过程名表、标号表等等,统称为符号表。对于符号表组织、构造和管理方法的好坏会直接影响编译系统的运行效率。

11.什么是属性文法?

答:是在上下文无关文法的基础上,为每个文法符号(含终结符和非终结符)配备若干个属

性值,对文法的每个产生式都配备了一组属性计算规则(称为语义规则)。在语法分析过程中,完成语义规则所描述的动作,从而实现语义处理。

12.什么是基本块

答:是指程序中一顺序执行的语句序列,其中只有一个入口语句和一个出口语句,入口

是其第一个语句,出口是其最后一个语句。

13.代码优化阶段的功能是什么?

答:对已产生的中间代码进行加工变换,使生成的目标代码更为高效(时间和空间)。

14.文法分哪几类?

答:文法有四种:设有G=(Vn,Vt,P,S),不同类型的文法只是对产生式的要求不同:

0型文法(短文文法): G的每个产生式αβ满足:α∈V+且α中至少含有一个非终结符,β∈V*

1型文法(上下文有关文法):如果G的每个产生式αβ均满足|β|>=|α|,仅当Sε除外,但S不得出现在任何产生式的右部

2型文法(上下文无关文法):G的每个产生式为Aβ, A是一非终结符,β∈V*

3型文法(正规文法):G的每个产生式的形式都是:AαB或Aα,其中A,B是非终结符,α是终结符串。(右线性文法)。

15.循环优化常用的技术有哪些?

答:代码外提;强度削弱;删除归纳变量。

16.什么是算符优先文法?

答:算符文法G的任何终结符a,b之间要么没有优先关系,若有优先关系,

至多有

中的一种成立,则G为一算符优先文法。

二、计算题

(一)推导、最左推导、最右推导和语法树,复习表达式文法及相关例题。

1. 表达式的推导

例: G = ({E}, {i, +, *, (, ) } , P , E)

P: E E+E | E*E | (E) | i

答:表达式(i)和(i+i)*i的推导:

E (E) (i)

E E*E (E)*E (E + E)*E (i + E)*E (i + i)*E (i + i)*i

E E*E E*i (E)* i (E + E)*i (E+ i)*i (i + i)*i

(i+i)*i的最左推导过程:

E E*E (E)*E (E + E)*E (i + E)*E (i + i)*E (i + i)*i

(i+i)*i的最右推导过程:

E E*E E*i (E + E)*i (E+ i)*i (i + i)*i

2.语法树

例:对文法G = ({E}, {i, +, *, (, ) } , P , E)

P: E E + E | E * E | ( E ) | i

答: 句子(i+i)*i 的语法树:

例: G = ({E}, {i, +, *, (, ) } , P , E)

P: E E + E | E * E | ( E ) | i

答:句子 ( i * i + i)的语法树:

(1) E (E) (E + E) (E * E + E) (i * E + E) (i *i + i)

(二)给定语言求文法

(三)逆波兰式

篇3:“编译原理”课程的教学探讨

1 当前教学中存在的问题

由于这门课程理论性强,内容丰富抽象,具有严密的逻辑性,使用到其它课程的知识较多,因此成为计算机专业诸课程中既难教又难学的一门课程。目前该课程在教学过程中主要存在以下问题:

1)课程内容抽象难理解

编译程序不同于一般的应用程序,是一个十分庞大和复杂的系统软件,它所包含的理论知识较多,抽象度也较高,要求教师在有限的课时内将课程内容讲解清楚,并使学生接受理解是有难度的。

2)基于面向过程语言的描述模型

目前,这门课程中的算法和模型描述是用PASCAL语言或者C语言等面向过程语言。虽然个别教材加入了少量关于面向对象语言编译技术的内容,那也是稍加点缀而已,用途较小。然而,面向对象语言已经成了高校计算机教学的主流语言,社会上大量使用的也是面向对象语言,而我们的编译原理教学仍然沿袭旧的面向过程语言,这种现象严重脱离了计算机技术发展和社会实际需要。

3)课程实验设计不合理

目前,大多数高校在“编译原理”课程的实验内容上基本上都是要求学生能上机实现一个小型模型语言的完整编译程序,或者是分四个单独的实验(词法一个实验,语法三个实验),它们的目的是让学生加深理解一些编译理论与算法,这对于一部分学生来说是不能完成的任务,也不能激发他们的兴趣(他们认为学习编译原理就是为了设计编译器),造成很大部分学生在动手之前就早早放弃了努力,也就不能达到预期的实验效果。

4)教学手段陈旧

目前,“编译原理”课程主要以理论教学为主,课时主要用于形式语言理论与各种语法分析算法、语义分析技术的讲授上,缺乏对实际编译器的分析。同时,在讲解的时候一般没有辅之以其它形象生动的教学手段,对学生是采用“灌输式”的教学模式,而没有采用“启发式”、“讨论式”等多种教学模式,因此学生觉得授课内容枯燥乏味,激不起他们学习的兴趣。

5)教学大纲统一

目前,每个高校计算机相关专业包括计算机科学与技术、软件工程、网络工程等,学生也存在不同的层次包括统招的“一本”、“二本”学生,以及“专升本”学生等。不同专业有不同的培养目标,不同的生源造成学生知识背景和自身素质也有差异。在这种情况下,在“编译原理”课程教学过程中实行统一的教学大纲显然不合适。

6)学生学习兴趣不浓

目前,学生普遍认为学习编译原理就是为了设计编译器,而大部分学生今后从事编译器设计工作的可能性较小,因此觉得没必要学。另外,目前面向对象的程序设计语言已经成为了主流,认为课程主要讲授面向过程的程序设计语言的处理已经落伍,因此失去了学习兴趣。

形成以上这些问题的原因既有主观的也有客观的,这些问题在我校的编译原理教学过程中也都不同程度地存在。为此,对“编译原理”课程的教学内容和教学方法进行探讨是十分必要的、有意义的。

2 需要解决的问题

1)课程内容的调整

“编译原理”课程内容丰富抽象,理论性和逻辑性很强,所以很多学生在学习时普遍感到枯燥、乏味,难理解,激不起学习兴趣。为此,需要对课程内容合理安排以便收到较好的教学效果。

a)抓住重点,分清主次

由于课程内容涉及较多,学生往往抓不住重点,分不清主次,结果导致劳而无功。为此,需要根据专业的不同,学生层次的不同,在不影响对编译系统理解的情况下,合理安排授课内容,切不可造成“统一重点的教学”、“统一层次的教学”、“统一大纲的教学”现象。

b)范例式编译器的剖析

为了帮助学生对编译思想和方法的理解,应在教学过程中增加一部分内容,即对一个范例式编译器进行剖析。该范例式编译器应采用教学中涉及到的典型编译思想与方法。学生在教师的指导下对实际编译器代码进行阅读,将使学生对抽象的编译理论与算法有更深刻的认识,从而达到较好的教学效果。

c)面向对象式语言的描述模型

当前,面向对象式语言已成为主流,而目前课程中的内容却是围绕面向过程式语言展开的。为此,需要在教学过程中增加一部分内容,即选择某个对象式语言来描述典型的编译算法。但就目前来看,以面向对象语言作为源语言来重新组织编译原理的教学内容并不合适。在教学过程中应向学生指明这一点,使之有个正确的认识。

2)实践环节的设计

“编译原理”也是一门实践性较强的课程,只有通过实践环节才能让学生加深对抽象理论的理解,培养其分析、设计软件的能力。为此,必须重视实践环节的教学,精心设计实验方案,合理组织实践训练(对于不同专业培养目标、不同类别学生素质差异,需设计不同的实验方案)。

a)设计合适的实验内容

目前,大多数高校在“编译原理”课程的实验内容上基本上都是要求学生能上机实现一个小型模型语言的完整编译程序,或者是分四个单独的实验(词法一个实验,语法三个实验)。这样的实验内容存在一个缺陷就是不能充分激发学生的学习兴趣,因为他们认为学习编译就是为设计编译器,而大部分学生以后从事这方面工作的可能性较小。为此,我们需要设计一个能运用编译理论和技术去解决实际问题的实验。例如,可以给定一个受限汉语的子集,引导学生用文法去描述它,然后把它应用到一个简单的自然语言查询的程序设计中去。

b)合理安排实验课时间

实验时间安排要具有灵活性,不要一周或两周一次实验,这样可能和授课的理论内容脱节。可以分别在每个实验的相关内容讲解完后安排这四个实验,并要求学生记录下每次实验的输入和输出形式,实现理论与实践的结合。

c)改进实验课教学方法

为了让实验能达到预期的效果,需要做以下工作:一是老师在实验前要将准备好的实验资料发放给学生,让学生利用业余时间分析、设计实验内容;二是老师指导学生一起讨论实验所涉及的原理、程序模块的功能和部分变量的用途;三是学生在理解的前提下,开始进行实验,老师随时进行监督指导。最后,在实验完成后,老师一定要检查学生的完成情况,并给予记录,学生则要记录下所有的实验结果。

3)教学方法的改进

“编译原理”课程抽象性和理论性较高,学生普遍感到内容难理解,更不能运用编译技术所涉及到的思想和方法去解决其他专业问题,学起来枯燥、无味。为此,需要灵活运用多种教学方法,以激发他们的学习兴趣和积极性,培养其分析、解决实际问题的能力。

a)多媒体辅助教学

“编译原理”课程涉及到形式语言与自动机理论,主要包括一些经典的语法、语义分析算法。这些理论和算法抽象复杂,不易理解。为此,需要借助多种辅助教学手段,如CAI课件、CAI教学系统和教学网站等。这样可以把抽象的理论形象化,把知识讲解化静为动,寓教于乐,培养和激发学生的学习兴趣。

b)师生互动式教学

教学是由“教”与“学”两方面构成的,师生互动才能“教”、“学”相长,提高教学效果。在课堂上,应采用“启发式”、“讨论式”、“提问式”等多种教学模式,以发散学生的思维,激发他们的思考能力;在课后,应通过教学网站发放调查问卷等形式及时获取学生对教学活动的意见与建议,学生也可以通过BBS系统进行交流,以便及时发现问题进而改进教学方法。还可以指定课后的时间组织小型的师生面对面交流,一方面是答疑,一方面也可以就编译领域的一些新问题、新动向进行研讨,进一步激发学生的学习积极性。

4)教材建设和CAI课件制作

目前为止,国内外已有不少关于“编译原理”的经典教材,因而我们暂时不打算重新编写授课教材。但从以上分析可知,目前的课程实验内容设计却各不相同,没有合适的实验教材,因此有必要根据我院特色来组织编写“编译原理”课程实验教材。同时,我们也将依据我院教学实际,重新合理组织教学内容,图文并茂,制作精良的CAI课件,以减少板书的时间,提高授课效率。

5)教学网站的建设

开发“编译原理”网络教学平台,构建良好的网络辅助教学环境,实现学习、答疑、作业和考试等各个教学环节的网络化,教师和学生可以很方便的利用该平台完成几乎所有教学活动,本课程教学网站主要将分四大模块:

a)基本信息

包括课程负责人、课程主讲人、教学队伍、自我评价、课程建设规划、课程教学录像等相关信息。

b)课程建设

课程概况:课程简介、课程大纲、教学日历、教材和参考文献。

教学资源:电子教材、电子课件(PPT)、电子课件、参考教案、例题源代码、习题答案、考试样卷及参考答案。

实验教学:实验教学大纲、实验内容、实验指导。

在线考试:为学生提供了模拟笔试、模拟机试和在线考试,实现了自动组卷和评分。

作业练习:提供了各章的练习题、单元测试题。

作业提交:主要提供了作业的发布与提交等功能。

c)BBS论坛

提供学生、老师相互之间的交流平台,以便及时发现问题进而改进教学方法和内容。

d)问卷调查

在课后,发放调查问卷及时获取学生对教学活动的意见与建议。

6)CAI教学系统的研制

CAI教学系统是辅助教学的一重要手段,通过它可以帮助学生加深对编译思想和方法的理解与运用,进而培养和激发他们的学习兴趣。我们将考虑按照图1所示的系统结构图来设计“编译原理”课程的CAI教学系统。

基本知识播放:提供每章的基本知识点的查询和一些基本知识点的程序实现等。

编译过程演示:这是CAI教学系统主要模块,提供了词法、语法、语义分析算法的动态演示,而且还要动态演示中间代码生成、中间代码优化和目标代码生成的执行过程。

自我测试:提供题库,让学生测试自己对所学知识的掌握情况。

系统维护:随着编译技术的发展,知识的不断更新,会出现一些新的概念和算法,因此系统也要随时增加新的知识点。另外,随着系统的运行,可能会发现一些不正确的地方,也需要及时修改。

3 结束语

“编译原理”是计算机专业中一门重要的课程,通过本课程的学习,可以使学生获得设计、分析和移植编译程序方面的初步能力。结合实际教学过程,本文分析了“编译原理”课程教学中所遇到的六个问题,探讨了需要解决的五个问题,以期望在今后的教学中能达到较好的效果。

摘要:“编译原理”是计算机专业中一门非常有用的核心课程,针对“编译原理”课程教学过程存在的问题,结合实际的教学情况,对“编译原理”课程的教学内容和方法进行了探讨,提出了解决思路和方法。

关键词:编译原理,教学内容,教学方法

参考文献

[1]陈火旺,刘春林,谭庆平等.程序设计语言编译原理[M].北京:国防工业出版社,2009.

[2]刘磊,郭德贵“.编译原理”课程建设研究[J].计算机教育,2006(6):8-10.

篇4:《编译原理》教学方法初探

关键词:编译原理;教学方法

TP314-4

编译原理是计算机相关专业的核心课程,是一门公认比较难学的课程。通过学习编译知识,有助于学生从宏观上把握编程语言;编译技术涉及到计算机的系统结构、指令集结构以及相关的操作系统,掌握编译技术有助于更进一步地理解计算机系统;从软件工程的角度来看,编译器是一个很好的系统软件,它所涉及的算法和技术可直接复用于软件开发的实践[1]。

一、教学现状

编译原理课程的理论性和实践性较强,在该课程的学习过程中涉及到大量抽象的理论知识,而实践动手环节的教学效果受制于对理论的理解程度。教学过程中,存在的问题有以下几个。

首先,学生对编译原理课程不够重视,缺乏学习动力。大多数的同学认为,编译原理课程的学习,与今后的就业没有多大的联系。而且就目前计算机领域的发展现状而言,并不需要重复编写构造编译器;课程本身的难度较大,有同学反应,课堂上老师讲授的知识可以理解,但是下课后往往想不起来;从而导致学生在学生过程中,学习积极性不够,动力不足。

其次,编译原理课程综合性较强,难度较大。涉及到的先修课程包括离散数学、程序设计基础、算法与数据结构、汇编语言、操作系统等,学生对这些先修课的基础知识的掌握程度参差不齐,甚至于有些学生根本没有掌握必要的基础知识;另外,该课程涉及的理论知识抽象,难以理解,如自动机理论等,涉及到的算法复杂,不容易实现,如语法分析阶段的自下而上的分析算法等,对于编译程序这个系统软件,各模块之间接口复杂,学生从整体上理解编译程序也存在一定困难。

第三,实践效果不理想。该课程的实践涉及许多其他相关课程的知识,因此,需要学生有较高的综合运用知识的能力,对于大多数同学,实践具有较大难度,对于基础知识较差的同学来说,很难达到课程的要求。

二、教学思路

(一)明确课程学习目标及其重要性

编译原理课程理论性较强,在讲授过程中,理论性的知识是授课的重点和难点。因此,整个上课过程中要让同学们明确学习该课程的意义,以及为什么要开设该课程,即学习编译原理的重要性,在整个课程的讲授过程中,可以多采用启发式教学方法,以期提高学生的学习兴趣。编译原理课程能够提高学生计算机思维能力。所谓计算机思维能力指的是具有抽象化与形式化思维的能力,编译器在设计过程中就运用了计算机思维的思想与方法,对学生进行计算机思维能力培养将有助于其更好地把握编译原理的目标[2]。另外,编译技术应用广泛,如软件系统安全、现有程序理解和软件工程的逆向工程等方面。

(二)精選教学内容

我们可以借鉴国内外知名大学在编译原理教学方面积累的宝贵的经验,如教学内容、教学方式以及教学手段等。但是,对于应用型普通本科院校而言,我们需要从自身的实际出发,根据我们的学生水平、课时的多少以及学校的办学特点,对编译原理的教学内容适当的选择,突出重点,是学生能够把握编译技术的核心内容。现在多数同学的注意力集中在一些细节的算法上,因此教学内容的选取原则是让学生宏观把握编译原理和技术。

编译原理主要包括五个阶段的讲解,即:词法分析阶段、语法分析阶段、语义分析与中间代码产生、代码优化和目标代码产生。

词法分析阶段,这部分内容的主线是正规式与有限自动机的相互转换,以及将有限自动机最小化。通过介绍正规式和有限自动机的概念,为什么需要转换,以及如何转换,让学生对有限自动机的识别功能,有个更深刻的理解。

语法分析阶段,该内容包括自上而下语法分析和自下而上语法分析两种。根据两类分析方法的特点,指出每种分析方法面临的问题或者说所需解决的关键问题,每种分析方法适用的文法环境,然后讲解如何实现每种分析方法。这一部分主要讲解两种具体的分析方法,即LL(1)分析方法和LR(0)分析方法。

自上而下的分析方法关键的问题是,非终结符有多个候选时,如何选择的问题,因此相关知识点较多,如消除递归(包括直接和间接)、消除回溯和求FIRST集FOLLOW集。对于这部分知识,学生容易把注意力集中在以上的具体算法上,所以,我们在教学中,需要重点讲述LL(1)分析方法的判别和预测分析表的构造,预测分析程序的构造和实现过程。可以采用案例教学法,以一个具体的小程序为例,讲解预测分析程序的实现过程,增强学生的直观感。

自下而上的分析方法关键的问题是,寻找句柄。对于上下文无关文法的分析,LR分析方法是一种高效的方法,包括:LR(0)、SLR、规范LR和LALR方法。LR分析表的生成算法较为复杂,因此讲解时重点应放在LR实现的关键问题,即如何确定栈顶符号是否构成句柄。对于这部分内容,重点让学生掌握LR(0)的分析方法。因为SLR(1)已经能够适应大多数的文法,所以规范LR和LALR方法部分,只需要让学生了解即可。

(三)加强实践环节

编译原理是一门理论性和实践性较强的课程。理论知识抽象难懂,我们可以通过实践,使学生加深对理论知识的理解。在实践教学中,我们可以从基本的验证试验开始,让学生循序渐进的学习,避免一开始就要求学生完成很难的任务,打击学生的信息和积极性。试验内容方面,比如对于词法分析,让学生先练习LEX的使用,之后设计编制调试一个具体的语法分析程序,要求功能简单,能把源程序中的关键字、标识符、运算符、常量和分隔符等识别出来即可,旨在加深学生对词法分析基本原理的理解。最后可以交给学生一个综合性的试验任务,让学生将零散的知识点串接起来,形成一个整体概念。

三、结束语

《编译原理》课程是计算机专业的核心课程之一,针对当前编译原理教学中存在的问题,就如何提高学生学习兴趣、合理安排教学内容等方面作了一些研究和探索。

参考文献:

[1]何炎祥,伍春香.计算机专业不需要开设编译原理课程吗?[J].计算机教育,2009,(4):61-62

篇5:编译原理知识点总结

编译原理是大学计算机专业的必修科目,也是计算机的基础知识,学好编译原理,有助于更好的进行编程的操作,下面是编译原理知识点总结,一起来看看吧!

编译原理知识点总结

一 编译器

简单讲,编译器就是将“高级语言”翻译为“机器语言(低级语言)”的程序。一个现代编译器的主要工作流程:源代码 (source code) → 预处理器

(preprocessor) → 编译器 (compiler) → 汇编程序 (assembler) → 目标代码 (object code) → 链接器(Linker) → 可执行程序 (executables)

二 工作原理

编译是从源代码(通常为高阶语言)到能直接被计算机或虚拟机执行的目标代码(通常为低阶语言或机器语言)的翻译过程。然而,也存在从低阶语言到高阶语言的编译器,这类编译器中用来从由高阶语言生成的低阶语言代码重新生成高阶语言代码的又被叫做反编译器。

也有从一种高阶语言生成另一种高阶语言的编译器,或者生成一种需要进一步处理的的中间代码的编译器(又叫级联)。

典型的编译器输出是由包含入口点的名字和地址, 以及外部调用(到不在这个目标文件中的函数调用)的机器代码所组成的目标文件。一组目标文件,不必是同一编译器产生,但使用的编译器必需采用同样的输出格式,可以链接在一起并生成可以由用户直接执行的可执行程序

三 编译器的发展史

(1) 20世纪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年代早期,大量的项目都贯注于编译器其它部分的生成自动化,这其中就包括了代码生成。这些尝试并未取得多少成功,这大概是因为操作太复杂而人们又对其不甚了解。

(2) 国内编译器的研发历史

我国编译器研发工作起步并不算晚,早在60年代初期,董韫美院士和杨芙清院士就分别在中科院和北大领导研究组开发编译器,那时面向的高级语言是ALGOL和FORTRAN,目标机是国产机。

在改革开放前,由于国家需要,中科院、国防科大、江南计算所、北大等单位一直在研制国产计算机,包括大型机和高性能计算机(如向量机、并行机),相应的也在研制高级语言编译器。中科院计算所以董韫美院士领导的研究组先后开发了119机、109机的类 ALGOL语言编译器BCY。国防科大开发了向量编译器和向量识别器。

70年代中科院计算所张兆庆教授研究组(以后称ACTGroup)开始在国产机上研制FORTRAN语言编译器,先后参与了众多的院级和国家级科研攻关项目,主持开发了013,757,KJ8920等国产大型机系统中的FORTRAN语言编译器,所研制的编译器支持了数百万行应用软件的运行。

90年代以来ACTGroup承担科学院重大项目,国家攻关项目,863项目,以及国际合作项目,先后开发了共享内存多处理机的并行识别器,分布式内存多处理机的并行识别器, SIMD芯片和VLIW芯片的并行优化C编译器。将编译技术与图形学结合,ACTGroup还推出了集成化、可视化的并行编程环境。ACTGroup在先进编译技术和并行编程环境方面的研究工作获国内外专家高度评价,国际著名学者评价此研究组居编译领域的世界先进行列。

(3) 研究现状

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

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

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

(4)国内编译器开发的现状

90年代以来,国内主要以研制并行机为主,相应的并行编译器研制也在国内开展起来。代表性的成果有:上海复旦大学朱传琪教授研究组研制的面向共享存储并行机的并行优化编译器AFT达到世界领先水平。

篇6:通信原理课设

摘 要

摘要:所谓调制,就是在传送信号的一方将所要传送的信号附加在高频振荡上,再由天线发射出去。这里高频振荡波就是携带信号的运载工具,也叫载波。振幅调制,就是由调制信号去控制高频载波的振幅,直至随调制信号做线性变化。在线性调制系列中,最先应用的一种幅度调制是全调幅或常规调幅,简称为调幅(AM)。为了提高传输的效率,还有载波受到抑制的双边带调幅波(DSB)和单边带调幅波(SSB)。在频域中已调波频谱是基带调制信号频谱的线性位移;在时域中,已调波包络与调制信号波形呈线性关系。

本课程设计主要利用MATLAB集成环境下的Simulink仿真平台,设计一个AM调制与相干解调通信系统,分别在理想信道和非理想信道中运行,并把运行仿真结果输入显示器,根据显示结果分析所设计的系统性能。经过调制,初步实现了设计目标,并且经过适当的完善后,实验成功。

关键词: MATLAB7.1 ;Simulink仿真平台;AM调制;相干解调

沈阳理工大学通信系统课程设计

目录 课程设计目的…………………………………………………………1 课程设计要求…………………………………………………………1 相关知识………………………………………………………………1 课程设计分析…………………………………………………………2 仿真……………………………………………………………………6

6结果分析………………………………………………………………10 参考文献………………………………………………………………12

沈阳理工大学通信系统课程设计

1.课程设计的目的

1.掌握模拟系统AM调制和解调原理。2.掌握模拟系统AM调制和解调的设计方法。

3.掌握用MATLAB分析系统时域、频域特性的方法,进一步锻炼应用MATLAB进行编程仿真的能力。

4.熟悉基于Simulink的动态建模和仿真的步骤和过程。

2.课程设计的要求

利用Matlab软件进行振幅调制和解调程序设计,输出显示调制信号、载波信号以及已调信号波形,并输出显示三种信号频谱图。对产生波形进行分析,并通过参数的改变,观察波形变化,分析实验现象。

3.相关知识 3.1 AM调制原理

幅度调制是用调制信号去控制高频正弦载波的幅度,使其按调制信号的规律变化的过程。幅度调制器的一般模型如图2.1所示。

图3.1—1 幅度调制模型

在图2-1中,若假设滤波器为全通网络(=1),调制信号mt叠加直流A0后再与载波相乘,则输出的信号就是常规双边带(AM)调幅.AM调制器模型如图2-2所示

图3.1—2 AM调制模型

AM信号波形的包络与输入基带信号mt成正比,故用包络检波的方法很容易恢复原始调制信号。但为了保证包络检波时不发生失真,必须满足A0mtmax,否

沈阳理工大学通信系统课程设计

则将出现过调幅现象而带来失真。AM信号的频谱是由载频分量和上、下两个边带组成(通常称频谱中画斜线的部分为上边带,不画斜线的部分为下边带)。上边带的频谱与原调制信号的频谱结构相同,下边带是上边带的镜像。显然,无论是上边带还是下边带,都含有原调制信号的完整信息。故AM信号是带有载波的双边带信号,它的带宽信号带宽的两倍。

3.2 相干解调

由AM信号的频谱可知,如果将已调信号的频谱搬回到原点位置,即可得到原始的调制信号频谱,从而恢复出原始信号。解调中的频谱搬移同样可用调制时的相乘运算来实现。相干解调的关键是是必须产生一个与调制器同频同相位的载波。如果同频同相位的条件得不到满足,则会破坏原始信号的恢复。

4.课程设计分析

4.1双边带幅度调制

在DSB-AM系统中,已调信号的幅度正比与消息信号。这种调制通过使用乘法器完成,将消息信号吗m(t)与载波Accos(2πfct),如图4.1—1所示,表示为:

u(t)=Acm(t)cos(2πfct)

(1)

图 4.1—1 DSB-AM调制原理结构框图

其中

c(t)=Accos(2πfct)

(2)

是载波,而m(t)是消息信号。若以单频正弦信号调制为例,那么典型波形如图4.1—2所示。

沈阳理工大学通信系统课程设计

现取u(t)的傅立叶变换,可以得到DSB-AM信号的频域表示为:

(3)

其中M(f)是m(t)的傅立叶变换。很明显可以看出,这种调制方式将消息信号的频谱进行了搬移,并在幅度上乘以Ac/2,传输带宽Br是消息信号带宽的两倍,也就是说:

Br=2W

(4)

图3显示了一个典型的消息信号的频谱及其相对应的DSB-AM已调信号的频谱。

图4.1—2 消息信号与DSB-AM已调信号的频谱

已调信号的功率为

(5)

其中Pm是消息信号的功率。在DSB-AM通信系统中,信噪比SNR等于基带的SNR,也就是:

沈阳理工大学通信系统课程设计

(6)

其中PR是接收到的功率(在接收端已调信号的功率),N0是噪声功率谱密度(假定为白噪声),W是信号噪声的带宽。

4.2双边带抑制载波幅度调制

4.2.1.DSB信号的表达式、频谱及带宽

在幅度调制的一般模型中,若假设滤波器为全通网络(=1),调制信号

中无直流分量,则输出的已调信号就是无载波分量的双边带调制信号,或称抑制载波双边带(DSB-SC)调制信号,简称双边带(DSB)信号。

DSB调制器模型如图4.2.1—1所示。可见DSB信号实质上就是基带信号与载波直接相乘,其时域和频域表示式分别为

图4.2.1—1DSB-SC调制模型

(7)

(8)

DSB信号的包络不再与

成正比,故不能进行包络检波,需采用相干解调;除不再含有载频分量离散谱外,DSB信号的频谱与AM信号的完全相同,仍由上下对称的两个边带组成。故DSB信号是不带载波的双边带信号,它的带宽与AM信号相同,也为基带信号带宽的两倍,即

4.2.2.DSB信号的解调

DSB信号只能采用相干解调,其模型与AM信号相干解调时完全相同,此时,乘法器输出

沈阳理工大学通信系统课程设计

经低通滤波器滤除高次项,得

(9)

即无失真地恢复出原始电信号。

抑制载波的双边带幅度调制的好处是,节省了载波发射功率,调制效率高;调制电路简单,仅用一个乘法器就可实现。缺点是占用频带宽度比较宽,为基带信号的2倍。

沈阳理工大学通信系统课程设计

5.仿真

5.1双边带频带幅度调制的系统仿真

图5.1-1双边带频带幅度调制的系统仿真框图

图5.1-2 DSB AM Modulator Passband(双边带频带幅度调制器)的主要参数

沈阳理工大学通信系统课程设计

图5.1-3 DBS AM Demodulator Passband(双边带频带幅度解调器)的主要参数

图5.1-4 DBS AM(双边带幅度调制)频谱仪(Spectrum Scope)的主要参数

沈阳理工大学通信系统课程设计

5.2双边带抑制载波幅度调制系统仿真

图5.2-1 双边带抑制载波幅度调制的系统仿真框图

图5.2-2 DSB-SC AM 信号发生器(Signal Generator)的主要参数

沈阳理工大学通信系统课程设计

图5.2-3 DSB-SC AM Modualtor Passband(双边带频带抑制幅度调制器)的主要参数

图5.2-4 DSB-SC AM的频谱仪(Spectrum Scope)的主要参数

沈阳理工大学通信系统课程设计

6.结果分析

6.1双边带频带幅度调制的系统仿真结果

图6.1-1双边带频带幅度调制后的频域图

图6.1-2双边带频带幅度调制仿真系统中示波器的波形图

沈阳理工大学通信系统课程设计

6.2双边带抑制载波幅度调制系统仿真结果

图6.2-1 双边带频带抑制幅度调制后调制信号的频域图

图6.2-2 双边带抑制幅度调制后调制信号的时域图

沈阳理工大学通信系统课程设计

7.参考文献

篇7:编译原理课设总结

开机,启动Matlab,在工作窗口Simulink。

模块库——>各个模块 Simulink:基本模块库

Commuinications Blockset:通信模块库 Signal Processing Blockset:信号处理模块库

基本原理:

1. 信源

通信工具箱:Communications Blockset——Comm Sources/Rondom Data Sources 选择:Bernoulli Binary Generator二进制伯努利序列产生器

Random Integer Generator 随机整数产生器 Signal Processing Blockset——signal Processing Sources

Sine Wave正弦波 2. 噪声源

Communications Blockset——Comm Sources/Noise Generators 选择:Gaussian Noise Generator高斯白噪声产生器

Rayleigh Noise Generator瑞利噪声产生器

Uniform Noise Generator均匀噪声产生器 3. 示波器

Simulink——〉Sinks——〉Scope 4. 相加器、增益、相乘器 Simulink——〉Math Operations——〉Add、Gain、Produc 5. 信道

高斯白噪声加性信道

Communications Blockset—〉Comm Sources—〉Noise Generators—〉Gaussian Noise Generator 6. 滤波器

Signal Processing Blockset——〉Filtering——〉Filter Designs——〉Digital Filter Design 低通滤波器的带宽:基带信号的带宽

带通滤波器的带宽:载波频率±基带信号的带宽 7. Relay(抽样判决器)

Simulink——〉Discontinuities——〉Relay 这是一个滞环比较器,一般用来作为调节有波动的系统时的缓冲。

parameters里的设置为:switch on point-阈值上限,switch off point-阈值下限,output when on-阈值上限输出值,output when off-阈值下限输出值。

例如某个信号的阈值上限为1.5,下限为0.5,上限输出为1,下限输出为0.当该信号上升到大于1.5时,relay的输出为1。若信号下一个周期小于1.5,但仍大于0.5时,其输出仍保持为1。只有当信号下降到小于0.5时,才会输出0。

它的意义是使信号调节有一个足够的范围宽度,而不至于因为每个周期都进行调节。8. 眼图、星座图、误码率

Communications Blockset—〉Comm Sinks——〉Discrete-Time Eye Diagram Scope  Samples per symbol:每个符号的采样点数,自己计算1个二进制码元在系统中有多少个采样点,也就是要保证眼图窗口的时间宽度为整数个码元宽度(最好1、2个)。 Offset:非负整数,小于Samples per symbol和Samples per trace的乘积,指定在画第一个点时省略的采样点数。可调。

 Samples per trace:正数,指定每一条轨迹的符号数目。如2,显示两个符号周期。 Traces displayed:叠加的轨迹的数目。

 New traces per display:正整数,小于Traces displayed,指定每一次显示时新轨迹的数目。

 Rendering Properties:线型和颜色设计  Axes Properties:x、y轴范围设计

 Figure Properties:眼图显示的数据类型设计

篇8:《编译原理》教学方法探讨

《编译原理》课程是计算机专业的主干课程之一。本课程讲述高级程序设计语言的编译程序构造的基本原理和实现技术, 是计算机软件的核心技术之一。通过本课程的学习, 学生应掌握文法和形式语言基础知识, 具有分析和实现编译程序的初步能力, 加深对程序设计语言原理的理解, 并且提高中、大型程序的分析和开发能力。对于将来从事编译系统设计工作的学生来说, 编译原理课程将为其打下坚实的能力和知识基础;对于从事其它工作的学生, 也能够提高他们对计算机系统总体的认识。但由于该门课程内容抽象, 算法复杂难懂, 且传统的教学方法主要突出书本知识的传授, 枯燥无味, 晦涩难懂, 导致学生对该门课程的积极性和学习兴趣不高。针对这种情况, 本文对编译原理课程的教学方法进行一些初步的探讨。

1 理论教学

教师在讲授《编译原理》课程时, 首先应该让学生明白该门课程的教学目标:对课程整体应该有较为全面的认识和了解, 熟悉编程程序的构造过程和形式语言中的基本概念和理论;理解并能掌握编程程序过程中每个阶段出现的相应的重点算法, 并能对该重点算法能够简单编程实现;能够使用课本中出现的理论知识和算法解决常见离散事件问题。

1.1 分阶式理论教学

《编译原理》课程内容覆盖广泛, 涉及到很多相关学科的知识, 就目前教学的基本学时来说, 基本无法满足教材中所有内容的详细讲授, 故教师在课堂教学过程中, 采用分阶式教学方法, 把教材中得相关内容按基本内容和高级内容两个方面进行分类:对于基本内容必须要学生完成, 而对于高级内容可由部分能力较强的学生带帮其他学生协作完成。

以词法分析为例, 《编译原理》课程中的词法分析部分的知识点包括正规表达式、正规文法和有限自动机。有限自动机和正规表达式以及他们之间的相互转换是学生必须完成的基本内容, 而正规文法及其相关内容则属于高级内容, 可以作为提高内容留给学习能力强的学生, 然后由他们带帮其他学生协作完成, 在这过程中, 不但可以加深能力强学生对该内容的理解, 而且可以加深学生之间的友谊, 在他们讨论和带帮中也可以提高学生的学习积极性。

1.2 典型式理论教学

《编译原理》课程中一些内容较抽象, 算法多且杂, 为了让学生掌握该门课程中的重点知识和算法, 教师可以采用典型式教学方法。对每次学生做完布置的作业后, 教师可以从中提取一些典型的作业:作业中做错的内容, 该内容为什么错, 错在哪里, 怎么改正, 其中有没有可以提取的好的方面;作业中做对的内容, 该内容有没有值得学习的方面, 有没有需要进一步改进的方面。

1.3 讨论式理论教学

很多学生认为该门课程的理论只能用于编写一个编译器, 而他们可能以后不会从事编译器相关方面的研究, 所以认为该门课程对他们以后的学生生活没什么帮助, 故学习兴趣不高, 认为可学可不学。所以教师在讲授这门课程时不能采用以前那种满堂灌的教学方法, 否则使得学生更加厌学, 茫然。为了激发学生的积极性, 教师采用讨论式教学方法, 让学生参与到课堂中来, 积极与学生互动。在课堂上, 教师提出问题, 讲解基本理论与思想, 让学生积极参与课堂讨论与分析, 找到问题的解决方法以及可能存在的不足;教师也可以根据时下计算机方面的技术热点, 将其与《编译原理》课程相关的知识点先阐述自己的认识和观点, 然后让学生提出自己的观点, 这样不仅可以加深学生对所学知识的掌握程度, 而且可以让他们认识到该门课程不仅仅只是用于设计一个编译器, 该门课程涉及的相关知识跟很多计算机相关课程以及以后他们所从事的计算机方面的研究都有莫大的关系。

2 实践教学

在实践教学中, 教师应该循序渐进地引导学生在实践中开展研究, 而不是一开始就要求他们完成很难的实践任务。例如, 先要学生实现一个简单的词法分析器, 该词法分析器功能简单, 只能完成词法分析器的一些基本的简单的功能, 等他们完成这个任务后, 学生不但学习兴趣大增, 而且对以后较难的实验也充满的信心。如果一开始就要求他们完成功能齐全的词法分析器, 可能有很多学生做不出来, 那么他们对后面的实践教学更加会产生畏惧心理。

对于较难的实践研究任务, 教师可以让学生分组来实现, 这样既能更好的完成实践任务, 而且更重要的是能培养学生团队精神和分工协作能力, 实现计算机专业学生的培养目标之一。

3 结束语

《编译原理》课程是计算机专业的主干课程之一, 本课程讲述的高级程序设计语言的编译程序构造的基本原理和实现技术, 是计算机软件的核心技术之一, 所以该门课程对计算机专业的学生来说很重要。探讨该课程的教学方法, 提高教学质量, 才能使学生更好的将该课程所学知识应用到以后的科学研究中去。

摘要:《编译原理》作为计算机专业的一门必修专业课程, 在教学中占据着十分重要的地位。但由于其内容抽象, 算法复杂, 而且具有较强的理论性和实践性, 故讲课和学习难度都较大。本文就该课程的教学方法总结出一些经验, 以提高学生对该课程的学习兴趣, 为学生更好的掌握计算机专业知识打下坚实的基础。

关键词:编译原理,教学方法

参考文献

[1]陈火旺, 刘春林, 谭庆平, 赵克佳, 刘越.程序设计语言编译原理[M].第3版.北京:国防工业出版社, 2000.

[2]吕映芝, 张素琴, 蒋维杜.编译原理[M].北京:清华大学出版社, 1998.

[3]顾彬, 郑关胜.《编译原理》教学方法的研讨[J].教育教学论坛.2013 (15) :64

[4]王海文, 林月, 王辉.《编译原理》课程教学方法的探讨[J].黑龙江科技信息, 2012 (6) :160

[5]肖楠.编译原理课程教学方法的改革与实践[J].牡丹江师范学院学报, 2013 (2) :72

[6]余玛俐, 张海.《编译原理》教学方法探析[J].九江学院学报, 2005 (4) :114

上一篇:弯路只是符号作文下一篇:企业文化题库(含答案)