编译技术课程设计报告模板静

合集下载

编译技术课程设计报告

编译技术课程设计报告

编译技术课程设计班级软件1001学号姓名指导老师2013年 6 月目录一、目的 (2)二、任务及要求 (2)三、实验环境 (4)四、实现过程说明 (4)1.词法分析器 (4)(1)单词符号表 (4)(2)数据结构 (4)(3)函数说明 (5)(4)流程图 (5)2.语法分析器 (7)(1)分析方法说明 (7)(2)文法 (7)(3)数据结构 (9)(4)函数说明 (10)3.中间代码生成器 (10)(1)属性文法 (10)(2)数据结构 (10)(3)函数说明 (11)(4)流程图 (11)五、程序运行结果 (12)六、总结 (19)一、目的<<编译技术>>是理论与实践并重的课程,而其课程设计要综合运用一、二年级所学的多门课程的内容,用来完成一个小型编译程序。

从而巩固和加强对词法分析、语法分析、语义分析、代码生成和报错处理等理论的认识和理解;培养学生对完整系统的独立分析和设计的能力,进一步培养学生的独立编程能力。

二、任务及要求基本要求:1.词法分析器产生下述小语言的单词序列这个小语言的所有的单词符号,以及它们的种别编码和内码值如下表:对于这个小语言,有几点重要的限制:首先,所有的关键字(如if﹑while等)都是“保留字”。

所谓的保留字的意思是,用户不得使用它们作为自己定义的标示符。

例如,下面的写法是绝对禁止的: if(5)=x其次,由于把关键字作为保留字,故可以把关键字作为一类特殊标示符来处理。

也就是说,对于关键字不专设对应的转换图。

但把它们(及其种别编码)预先安排在一张表格中(此表叫作保留字表)。

当转换图识别出一个标识符时,就去查对这张表,确定它是否为一个关键字。

再次,如果关键字、标识符和常数之间没有确定的运算符或界符作间隔,则必须至少用一个空白符作间隔(此时,空白符不再是完全没有意义的了)。

例如,一个条件语句应写为 if i>0 i= 1;而绝对不要写成ifi>0 i=1;因为对于后者,我们的分析器将无条件地将ifi看成一个标识符。

《编译技术》课程设计

《编译技术》课程设计

《编译技术》课程设计一、课程目标知识目标:1. 理解编译技术的概念、原理及作用,掌握编译程序的基本结构;2. 掌握词法分析、语法分析、语义分析及中间代码生成的相关方法;3. 了解目标代码生成、代码优化及运行时存储管理的基本原理。

技能目标:1. 能够运用编译技术进行简单程序的设计与调试;2. 能够运用编译原理对实际问题进行分析,提出解决方案;3. 能够运用相关工具和软件进行编译过程的实践操作。

情感态度价值观目标:1. 培养学生对编译技术学科的兴趣,激发学生主动学习的热情;2. 培养学生严谨的科学态度和良好的团队协作精神;3. 增强学生对我国计算机事业发展的自豪感,树立为祖国信息技术事业作贡献的信念。

课程性质:本课程属于计算机科学与技术专业核心课程,以理论与实践相结合的方式进行教学。

学生特点:学生具备一定的编程基础和计算机科学理论知识,具有较强的逻辑思维能力。

教学要求:结合课程性质、学生特点,注重理论与实践相结合,强调动手实践,培养学生的编译技术实际应用能力。

通过课程学习,使学生能够掌握编译技术的基本知识,具备一定的编译程序设计与调试能力。

同时,注重培养学生的团队合作精神和价值观。

将课程目标分解为具体的学习成果,以便后续的教学设计和评估。

二、教学内容1. 编译技术基础:包括编译程序的作用、编译过程概述、编译程序的组成及结构。

- 教材章节:第1章 编译技术概述2. 词法分析:涉及词法分析器的功能、词法规则、状态转换图、词法分析程序设计。

- 教材章节:第2章 词法分析3. 语法分析:介绍语法分析器的功能、上下文无关文法、递归下降分析、LL(1)分析法、自底向上的语法分析、算符优先分析。

- 教材章节:第3章 语法分析4. 语义分析:语义分析任务、属性文法、语法制导翻译、类型检查、中间代码生成。

- 教材章节:第4章 语义分析5. 代码优化与目标代码生成:包括代码优化方法、基本块优化、目标代码生成、指令选择、寄存器分配。

编译课程设计报告

编译课程设计报告

编译课程设计报告课程设计任务书学生姓名:马惠枝专业班级:计算机0902班指导教师:工作单位:计算机科学与技术学院题目: FOR循环语句的翻译程序设计(LL(1)法、输出四元式)初始条件:理论:学完编译课程,掌握一种计算机高级语言的使用。

实践:计算机实验室提供计算机及软件环境。

如果自己有计算机可以在其上进行设计。

要求完成的主要任务:(包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)(1)写出符合给定的语法分析方法的文法及属性文法。

(2)完成题目要求的中间代码四元式的描述。

(3)写出给定的语法分析方法的思想,完成语法分析和语义分析程序设计。

(4)编制好分析程序后,设计若干用例,上机测试并通过所设计的分析程序。

(5)设计报告格式按附件要求书写。

课程设计报告书正文的内容应包括:1 系统描述(问题域描述);2 文法及属性文法的描述;3 语法分析方法描述及语法分析表设计;4 按给定的题目给出中间代码形式的描述及中间代码序列的结构设计;5 编译系统的概要设计;6 详细的算法描述(流程图或伪代码);7 软件的测试方法和测试结果;8 研制报告(研制过程,本设计的评价、特点、不足、收获与体会等);9 参考文献(按公开发表的规范书写)。

时间安排:设计安排一周:周1、周2:完成系统分析及设计。

周3、周4:完成程序调试及测试。

周5:撰写课程设计报告。

设计验收安排:设计周的星期五第1节课开始到实验室进行上机验收。

设计报告书收取时间:设计周的次周星期一上午10点。

指导教师签名: 2010年 11月23日系主任(或责任教师)签名: 2010年 11月 23日FOR循环语句的翻译程序设计---- LL(1)法、输出四元式1.系统描述1.1程序设计要求通过设计、编制、调试一个FOR( )循环语句的词法、语法及语义分析程序,实现对于FOR( )循环语句的翻译,加深对LL(1)文法的认识,掌握这种自顶向下的文法分析方法。

首先,设计出一个关于FOR( )循环语句的文法,通过消除左递归使它符合LL(1)即递归下降法的要求;然后按照这个文法构造出文法的预测分析表、及文法橘子的分析过程,通过仔细的研究之后设计出一个集词法分析、语法分析和语义分析为一体的程序,从文法开始法号根据相应的产生式推到出相应的句子,最终输出四元式形式的中间代码。

编译器-编译原理课程设计报告书

编译器-编译原理课程设计报告书

广西大学编译原理课程设计专业:计算机科学与技术姓名:课程:编译原理指导教师:目录一.程序简介与分析---------------------------------------------------------1 二.程序适用范围-----------------------------------------------------------1 三.词法分析---------------------------------------------------------------1 四.语法分析---------------------------------------------------------------3 五.语义分析和中间代码生成------------------------------------------------9 六.代码生成--------------------------------------------------------------11 七.流程图----------------------------------------------------------------12 八.实现------------------------------------------------------------------13 九.程序运行结果----------------------------------------------------------13 十.总结------------------------------------------------------------------18 十一.附录(源程序)--------------------------------------------------------19简单的编译程序设计一.程序简介与分析本程序由四个部分组成:词法分析子程序,语法分析子程序,语义分析子程序,目标代码生成程序。

编译技术课程设计

编译技术课程设计

编译技术课程设计一、教学目标本课程的教学目标是使学生掌握编译技术的基本原理和方法,培养学生运用编译技术解决实际问题的能力。

具体分为以下三个部分:1.知识目标:学生需要了解编译程序的基本概念、编译过程、语法分析、语义分析、目标代码生成和优化技术等基本知识,掌握常用的编译算法和数据结构。

2.技能目标:学生能够运用编译技术解决实际问题,具备编写简单编译程序的能力。

通过课程学习和实践,使学生具备较强的编程能力和问题解决能力。

3.情感态度价值观目标:培养学生对编译技术的兴趣和热情,使学生认识到编译技术在计算机科学领域的重要地位,增强学生的学术追求和创新精神。

二、教学内容本课程的教学内容主要包括以下几个部分:1.编译程序概述:介绍编译程序的定义、分类和功能,编译程序的运行机制和编译过程。

2.词法分析:讲解词法分析的基本概念、词法分析器的实现方法和常用算法。

3.语法分析:介绍语法分析的基本概念、语法分析器的实现方法和常用算法,如递归下降分析法、LL分析法、LR分析法等。

4.语义分析:讲解语义分析的基本概念、语义分析器的实现方法和常用算法,包括类型检查、符号表管理、静态语义分析等内容。

5.目标代码生成与优化:介绍目标代码生成和优化的基本概念、方法和算法,如中间代码生成、代码优化技术等。

6.编译器实现:讲解编译器实现的基本方法和步骤,包括编译器前端和后端的实现技术。

三、教学方法为了提高教学效果,本课程将采用多种教学方法相结合的方式进行教学:1.讲授法:教师通过讲解、举例等方式,向学生传授编译技术的基本概念、原理和方法。

2.讨论法:学生进行课堂讨论,引导学生思考和分析问题,培养学生的创新意识和问题解决能力。

3.案例分析法:通过分析实际案例,使学生更好地理解和掌握编译技术的应用和实现方法。

4.实验法:安排实验课程,让学生亲自动手编写编译程序,培养学生的实际编程能力和实践能力。

四、教学资源为了支持本课程的教学,我们将准备以下教学资源:1.教材:选用权威、实用的编译技术教材,为学生提供系统的理论知识。

编译课程设计报告

编译课程设计报告

编译课程设计报告一、教学目标本课程的教学目标是使学生掌握编译原理的基本概念、方法和算法,培养学生运用编译原理解决实际问题的能力。

具体目标如下:1.知识目标:(1)了解编译原理的基本概念,如编译器、源语言、目标语言等。

(2)掌握编译过程中的各个阶段,如词法分析、语法分析、语义分析、中间代码生成、目标代码生成等。

(3)熟悉常见编译优化技术,如代码简化、死代码消除、循环优化等。

(4)了解编译器实现的基本方法,如递归下降分析、LL分析、LR分析等。

2.技能目标:(1)能够使用编译原理相关工具,如lex、yacc等。

(2)具备简单的编译器设计与实现能力。

(3)能够分析程序的性能,并应用编译优化技术进行优化。

3.情感态度价值观目标:(1)培养学生对编译原理的兴趣,提高学生自主学习的积极性。

(2)培养学生团队合作精神,提高学生解决实际问题的能力。

二、教学内容本课程的教学内容主要包括以下几个部分:1.编译原理基本概念:介绍编译器、源语言、目标语言等基本概念。

2.编译过程及其各个阶段:讲解词法分析、语法分析、语义分析、中间代码生成、目标代码生成等阶段。

3.编译优化技术:介绍代码简化、死代码消除、循环优化等优化技术。

4.编译器实现方法:讲解递归下降分析、LL分析、LR分析等实现方法。

5.编译器工具使用:介绍lex、yacc等工具的使用方法。

6.编译器设计与实现:讲解编译器的设计与实现过程。

三、教学方法本课程采用讲授法、讨论法、案例分析法和实验法等多种教学方法,以激发学生的学习兴趣和主动性。

1.讲授法:用于讲解编译原理的基本概念、方法和算法。

2.讨论法:学生针对编译原理中的重点、难点问题进行讨论,提高学生的理解能力。

3.案例分析法:通过分析实际案例,使学生更好地掌握编译原理的应用。

4.实验法:让学生亲自动手实现简单的编译器,提高学生的实践能力。

四、教学资源本课程的教学资源包括教材、参考书、多媒体资料和实验设备等。

1.教材:选用《编译原理》等权威教材,为学生提供系统、科学的学习资料。

编译课程方案课设报告

编译课程方案课设报告

1.课程设计题目名称:语法高亮转换软件2.课程设计任务目的与任务目的:·通过此次课程设计更深一步了解此法分析·培养解决工程问题的能力,例如方案的制定·了解设计和实现一个实际高级语言编译器所面临的各种问题及其复杂程度。

主要任务:输入:cpp源代码文件,后缀为.cpp的文件;输出:网页文件,后缀为.html 文件;实现功能:将cpp源代码转换成网页文件,在浏览器中打开网页文件时,网页中显示C++源代码并以高亮语法表示显示。

3.设计思想和实现方法设计思想:词法分析程序完成从输入文件中读取字符形式的高级语言源程序,并把输入转化为一个由单词符号组成的流。

构造词法分析器的一种简单办法是用状态转化图来描述源语言词法记号流,然后手工把这种状态转换图翻译成为识别记号的程序。

用这种方法可以产生高效的词法分析器。

实现方法:用C++语言编写一个词法分析器,使之能识别输入串,并把分析结果(单词符号,标识符,关键字等等>输出.输入源程序,输入单词符号,本词法分析器可以辨别关键字,标识符,常数,运算符号和某些界符,运用了文件读入来获取源程序代码,再对该源程序代码进行词法分析,这就是词法分析器的基本功能.当词法分析器调用预处理子程序处理出一串输入字符放进扫描缓冲区之后,分析器就从此缓冲区中逐一识别单词符号.当缓冲区里的字符串被处理完之后,它又调用预处理子程序来处理新串.4.程序说明:程序一开始要求读入一个代码文件,接着把读入的源程序打印出来.然后进行词法分析,程序定义两个数组keyword[60]和cha[31],前者用来存放关键字,后者用来存放中断字符。

从文件中读入字符,与cha[31]中的中断字符相比较。

判断读入的是否为中断字符,如果不是继续读入字符;如果是中断字符,将前面读入的字符放入到一个字符串当中,将此字符串与keyword[60]中存放的关键字比较,如是关键字则做相应处理即着色;如果不是关键字不作处理。

《编译技术》课程设计

《编译技术》课程设计

《编译技术》课程设计一、教学目标本课程的教学目标是使学生掌握编译技术的基本原理和方法,包括词法分析、语法分析、语义分析、中间代码生成、目标代码生成和优化等主要环节。

通过本课程的学习,学生应能理解并应用编译原理解决实际问题,提高软件开发和维护的效率。

在知识目标方面,学生应掌握编译器的基本架构和各个阶段的主要算法。

在技能目标方面,学生应能够使用现有的编译器工具,并根据实际需要进行简单的编译器设计和实现。

在情感态度价值观目标方面,学生应培养对软件工程的热爱和敬业精神,提高团队合作能力和创新意识。

二、教学内容本课程的教学内容主要包括编译原理的基本概念、编译器的各个阶段以及相关的算法和优化技术。

具体包括:1. 编译原理的基本概念,如编译器的作用、编译过程和编译器的基本架构;2. 词法分析,如词法规则、词法分析器的设计和实现;3. 语法分析,如语法规则、语法分析树和分析算法;4. 语义分析,如类型检查、语义分析和错误处理;5. 中间代码生成,如三地址码和中间代码优化;6. 目标代码生成和优化,如指令选择、代码生成和优化技术。

三、教学方法为了实现本课程的教学目标,我们将采用多种教学方法,包括讲授法、讨论法、案例分析法和实验法等。

在教学过程中,我们将注重理论教学与实践相结合,通过生动的案例和实际的编译器工具使学生更好地理解和应用编译原理。

同时,我们将鼓励学生积极参与课堂讨论,提高他们的思考能力和创新意识。

此外,我们还将通过实验课程让学生亲自动手设计和实现简单的编译器,提高他们的实践能力和团队合作能力。

四、教学资源为了支持本课程的教学内容和教学方法,我们将准备一系列教学资源,包括教材、参考书、多媒体资料和实验设备。

教材方面,我们选择《编译原理》一书作为主教材,同时推荐《现代编译原理》等参考书供学生自主学习。

多媒体资料方面,我们将提供课件、教学视频和相关的学术论文等,以丰富学生的学习体验。

实验设备方面,我们将提供计算机实验室,让学生能够在实验课程中亲自动手实践编译原理。

编译技术课程设计

编译技术课程设计

编译技术课程设计一、课程目标知识目标:1. 理解编译技术的基本概念,掌握编译过程的主要环节及其作用;2. 学会使用一种编程语言进行简单的程序设计,并能将其编译成可执行程序;3. 了解编译器的基本结构,掌握编译器各部分的协同工作原理。

技能目标:1. 能够运用所学的编译技术知识,对简单的程序进行词法分析、语法分析和语义分析;2. 学会使用编译工具,如编译器、调试器等,进行程序调试和优化;3. 培养学生的编程思维和问题解决能力,使其能够运用编译技术解决实际问题。

情感态度价值观目标:1. 激发学生对编译技术的兴趣,培养其主动学习的热情;2. 培养学生严谨、细致的学习态度,使其在编译技术学习中形成良好的学习习惯;3. 增强学生的团队合作意识,提高沟通与协作能力。

分析课程性质、学生特点和教学要求,本课程旨在让学生掌握编译技术的基本知识和技能,培养其编程兴趣和问题解决能力。

课程目标分解为具体的学习成果,以便后续的教学设计和评估。

在教学过程中,注重理论与实践相结合,关注学生的个体差异,提高教学质量。

二、教学内容本课程教学内容主要包括以下几部分:1. 编译技术基本概念:介绍编译器的作用、编译过程、编程语言分类等,对应教材第一章内容。

2. 编程语言基础:学习一种编程语言(如C语言),掌握基本语法和编程规范,对应教材第二章内容。

3. 编译过程及原理:- 词法分析:分析源程序的词法结构,学习词法分析器的构建方法,对应教材第三章第一部分;- 语法分析:分析源程序的语法结构,学习语法分析器的构建方法,对应教材第三章第二部分;- 语义分析:研究源程序中的语义信息,学习语义分析器的构建方法,对应教材第三章第三部分;- 中间代码生成:学习中间代码的表示方法,掌握中间代码生成技术,对应教材第四章内容;- 目标代码生成:学习目标代码的生成方法,掌握汇编语言的基本知识,对应教材第五章内容;- 代码优化:了解代码优化技术,学习优化编译器的方法,对应教材第六章内容。

编译原理课程设计报告(一个完整的编译器)

编译原理课程设计报告(一个完整的编译器)

编译原理程序设计报告一个简单文法的编译器的设计与实现专业班级:计算机1406班组长姓名:宋世波组长学号: ******** 指导教师:肖桐2016年12月设计分工组长学号及姓名:宋世波20143753 分工:文法及数据结构设计词法分析语法分析(LL1)基于DAG的中间代码优化部分目标代码生成组员1学号及姓名:黄润华20143740 分工:中间代码生成(LR0)部分目标代码生成组员2学号及姓名:孙何奇20143754 分工:符号表组织部分目标代码生成摘要编译器是将便于人编写,阅读,维护的高级计算机语言翻译为计算机能解读、运行的低阶机器语言的程序。

编译是从源代码(通常为高阶语言)到能直接被计算机或虚拟机执行的目标代码(通常为低阶语言或机器语言)的翻译过程。

一.编译器的概述1.编译器的概念编译器是将便于人编写,阅读,维护的高级计算机语言翻译为计算机能解读、运行的低阶机器语言的程序。

编译器将原始程序作为输入,翻译产生使用目标语言的等价程序。

源代码一般为高阶语言如Pascal、C++、Java 等,而目标语言则是汇编语言或目标机器的目标代码,有时也称作机器代码。

2.编译器的种类编译器可以生成用来在与编译器本身所在的计算机和操作系统(平台)相同的环境下运行的目标代码,这种编译器又叫做“本地”编译器。

另外,编译器也可以生成用来在其它平台上运行的目标代码,这种编译器又叫做交叉编译器。

交叉编译器在生成新的硬件平台时非常有用。

“源码到源码编译器”是指用一种高阶语言作为输入,输出也是高阶语言的编译器。

例如: 自动并行化编译器经常采用一种高阶语言作为输入,转换其中的代码,并用并行代码注释对它进行注释(如OpenMP)或者用语言构造进行注释(如FORTRAN的DOALL指令)。

3.本编译器概述编译程序的工作过程一般可以分为五个阶段:词法分析、语法分析、语义分析与中间代码产生、优化、目标代码生成。

每一个阶段在功能上是相对独立的,它一方面从上一个阶段获取分析的结果来进行分析,另一方面由将结果传递给下一个阶段。

编译课程设计报告书

编译课程设计报告书

编译课程设计报告书课程设计报告( 2011 -- 2012年度第 1 学期)名称:编译技术课程设计B题目:词法分析器设计算符优先分析程序设计基于算符优先分析方法的语法制导翻译程序设计院系:计算机系班级:网络学号:学生姓名:指导教师:岳燕黄建才设计周数:1周成绩:日期:2012年1月6日一、课程设计的目的与要求1.词法分析器设计的目的与要求1.1 词法分析器设计的目的实验是为计算机科学与技术专业的学生在学习《编译技术》课程后,为加深对课堂教学内容的理解,培养解决实际问题能力而设置的实践环节。

通过这个实验,使学生应用编译程序设计的原理和技术设计出词法分析器,了解扫描器的组成结构,不同种类单词的识别方法。

能使得学生在设计和调试编译程序的能力方面有所提高。

为将来设计、分析编译程序打下良好的基础。

1.2 词法分析器设计的要求设计一个扫描器,该扫描器是一个子程序,其输入是源程序字符串,每调用一次识别并输出一个单词符号。

为了避免超前搜索,提高运行效率,简化扫描器的设计,假设该程序设计语言中,基本字(也称关键词)不能做一般标识符用,如果基本字、标识符和常数之间没有确定的运算符或界符作间隔,则用空白作间隔。

单词符号及其内部表示如表1-1所示,单词符号中标识符由一个字母后跟多个字母、数字组成,常数由多个十进制数字组成。

单词符号的内部表示,即单词的输出形式为二元式:(种别编码,单词的属性值)。

表1-1 单词符号及其内部表示单词符号种别编码单词的属性值BEGIN IF 12——THEN ELSE END标识符整型常数+***()3456789101112———在名字表中的地址十进制整数—————2.算符优先分析程序设计的目的与要求2.1 算符优先分析程序设计的目的本实验是为计算机科学与技术专业的学生在学习《编译技术》课程后,为加深对课堂教学内容的理解,培养解决实际问题能力而设置的实践环节。

通过这个实验,使学生应用编译程序设计的原理和技术, 设计、编写和调试算符优先分析程序,了解算符优先分析程序的组成结构,掌握实现通用算符优先分析算法的方法。

编译技术课程设计报告书-L语言编译器的设计与实现

编译技术课程设计报告书-L语言编译器的设计与实现

课程设计报告( 2010 – 2011 年度第1学期)名称:编译技术课程设计A题目:L语言编译器的设计与实现院系:计算机系班级:软件0802学号: 2学生姓名:指导教师:设计周数: 2 周成绩:日期:2011 年1 月14 日《编译技术》课程设计任务书一、课程设计的目的与要求1.任务:实现一个简单的编译程序,能够对指定程序设计语言进行编译。

2.目的:加深对课堂讲授知识的理解,熟练掌握编译程序设计原理及常用的技术,建立编译程序的整体概念,使得学生初步具有研究、设计、编制和调试编译程序的能力。

3.要求:熟悉有关定义、概念和实现算法,设计出程序流程框图和数据结构,编写出完整的源程序,进行静态检查,设计出输入数据、显示输出数据;基本功能完善,方便易用,操作无误;通过课程设计学会编译程序设计与实现的常用技术,具备初步分析、设计和开发编译程序的能力,具备分析与检查软件错误、解决和处理实验结果的能力。

4.学生要求人数:2人,1人负责扫描器和目标代码生成器的设计和实现,另1人负责语法分析器和语法制导翻译程序的设计和实现。

二、主要内容下面是课程设计主要内容的简介,详细内容请见《编译技术课程设计指导书》。

1.扫描器设计该扫描器是一个子程序,其输入是源程序字符串,每调用一次输出一个单词符号。

为了避免超前搜索,提高运行效率,简化扫描器的设计,假设程序设计语言中,基本字不能用作一般标识符,如果基本字、标识符和常数之间没有确定的运算符或界符作间隔,则用空白作间隔。

2.语法分析器设计以算法优先分析方法为例,设计一个算符优先语法分析程序。

算符优先分析属于自下而上的分析方法,该语法分析程序的输入是终结符号串(即单词符号串,以一个“#”结尾),如果输入串是句子则输出“YES”,否则输出“NO”和错误信息。

当然,也可采用预测分析等方法设计语法分析器,具体方法自定。

3.语法制导翻译程序设计采用语法制导翻译方法,实现算术表达式、赋值语句和基本控制语句等的翻译。

编译技术课程设计报告书

编译技术课程设计报告书

课程设计报告( 2012 – 2013 年度第1学期)名称:编译技术课程设计题目:L语言编译器的设计与实现院系:计算机系班级:学号:学生姓名:指导教师:设计周数: 2 周成绩:日期:2012 年12 月27 日《编译技术》课程设计任务书一、目的与要求1.任务:实现一个简单的编译程序,能够对指定程序设计语言进行编译。

2.目的:加深对课堂讲授知识的理解,熟练掌握编译程序设计原理及常用的技术,建立编译程序的整体概念,使得学生初步具有研究、设计、编制和调试编译程序的能力。

3.要求:熟悉有关定义、概念和实现算法,设计出程序流程框图和数据结构,编写出完整的源程序,进行静态检查,设计出输入数据、显示输出数据;基本功能完善,方便易用,操作无误;通过课程设计学会编译程序设计与实现的常用技术,具备初步分析、设计和开发编译程序的能力,具备分析与检查软件错误、解决和处理实验结果的能力。

4.学生要求人数:2人,1人负责扫描器和目标代码生成器的设计和实现,另1人负责语法分析器和语法制导翻译程序的设计和实现。

二、主要内容下面是课程设计主要内容的简介,详细内容请见《编译技术课程设计指导书》。

1.扫描器设计该扫描器是一个子程序,其输入是源程序字符串,每调用一次输出一个单词符号。

为了避免超前搜索,提高运行效率,简化扫描器的设计,假设程序设计语言中,基本字不能用作一般标识符,如果基本字、标识符和常数之间没有确定的运算符或界符作间隔,则用空白作间隔。

2.语法分析器设计以算法优先分析方法为例,设计一个算符优先语法分析程序。

算符优先分析属于自下而上的分析方法,该语法分析程序的输入是终结符号串(即单词符号串,以一个“#”结尾),如果输入串是句子则输出“YES”,否则输出“NO”和错误信息。

当然,也可采用预测分析等方法设计语法分析器,具体方法自定。

3.语法制导翻译程序设计采用语法制导翻译方法,实现算术表达式、赋值语句和基本控制语句等的翻译。

本语法制导翻译程序的输入是终结符号串(即单词符号串,以一个“#”结尾),如果输入符号串是句子,则按照其语义进行翻译,输出等价的四元式序列。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

编译技术课程设计班级网络1102学号3110610035姓名徐静指导老师年轶2014年6 月目录一、目的 (2)二、题目 (2)三、要求 (2)四、实验环境 (2)五、系统实现 (2)六、程序运行结果 (8)七、总结 (9)一、目的通过《编译原理》课程设计进一步理解高级语言在计算机中的执行过程,加深对编译原理中重点算法和编译技术的理解,掌握词法分析、语法分析、语义分析、代码生成和报错处理等理论与实践的结合,提高自己的编程能力,培养好的程序设计风格。

同时通过某种可视化编程语言的应用,具备初步的Windows环境下的编程思想。

二、题目输入文法,自动生成分析表,并完成语法分析工作三、要求题目3 文法编译器的自动生成器输入文法,自动生成分析表,并完成语法分析工作。

语法分析方法可以是:LL(1)分析法或LR分析法。

为文法构造分析表,并对输入串进行语法分析,判别是否符合语法规则,如果不符合,则输出错误信息。

输入:文法,文法符号串输出:分析表、分析栈、分析结果四、实验环境开发环境Visual Studio6.0语言C++五、系统实现1.分析方法说明所谓LL(1)分析法,就是指从左到右扫描输入串(源程序),同时采用最左推导,且每次直接推导只需向前看一个输入符号,便可确定当前所应当选择的规则。

实现LL(1)分析的程序又称为LL(1)分析程序或LL(1)分析器。

我们知道一个文法要能进行LL(1)分析,那么这个文法应该满足:无二义性,无左递归,无左公因子。

当文法满足条件后,再分别构造文法每个非终结符的FIRST和FOLLOW集合,然后根据FIRST和FOLLOW集合构造LL(1)分析表,最后利用分析表,根据LL(1)语法分析构造一个分析器。

LL(1)的语法分析程序包含了三个部分,总控制程序,预测分析表函数,先进先出的语法分析栈,本程序也是采用了同样的方法进行语法分析,该程序是采用了C++语言来编写。

2.分析表的构造算法在构造LL(1)预测分析表之前,首先要构造该文法的每个非终结符的FIRST和FOLLOW 集合,按照下面描述的算法来构造这两个集合。

①FIRST集合的构造算法:(1)若X∈VT,则FIRST(X)={X}。

(2)若X∈VN,且有产生式X→a……,则把a加入到FIRST(X)中;若X→ε也是一条产生式,则把ε也加到FIRST(X)中。

(3)若X→Y……是一个产生式且Y∈VN,则把FIRST(Y)中的所有非ε-元素都加到FIRST(X)中;若X→Y1Y2…Yk是一个产生式,Y1,…,Yi-1都是非终结符,而且,对于任何j,1≤j≤i-1,FIRST(Yj)都含有ε(即Y1…Yi-1*ε),则把FIRST(Yj)中的所有非ε-元素都加到FIRST(X)中;特别是,若所有的FIRST(Yj)均含有ε,j=1,2,…,k,则把ε加到FIRST(X)中。

连续使用上面的规则,直至每个集合FIRST不再增大为止。

②FOLLOW集合的构造算法:(1)对于文法的开始符号S,置#于FOLLOW(S)中;(2)若A→αBβ是一个产生式,则把FIRST(β)|{ε}加至FOLLOW(B)中;(3)若A →αB是一个产生式,或A→αBβ是一个产生式而βε(即ε∈FIRST(β)),则把FOLLOW(A)加至FOLLOW(B)中。

连续使用上面的规则,直至每个集合FOLLOW不再增大为止3.数据结构变量定义:struct pRNode /*产生式右部结构*/struct pNodestruct collectNodestruct collectNode* first[MaxVnNum + 1]; /*first集*/struct collectNode* follow[MaxVnNum + 1]; /*follow集*/char Vn[MaxVnNum + 1]; /*非终结符集*/int vnNum;char Vt[MaxVtNum + 1]; /*终结符集*/int vtNum;struct pNode P[MaxRuleNum];int PNum;char buffer[MaxPLength + 1];char st[MaxStLength]; /*要分析的符号串*/int analyseTable[MaxVnNum + 1][MaxVtNum + 1 + 1];int analyseStack[MaxStackDepth + 1]; /*分析栈*/int topAnalyse; /*分析栈顶*/类关系图:③LL(1)分析过程主要包括以下四个动作:替换:当X∈VN时选相应产生式的右部β去替换X。

此时X出栈,β逆序入栈。

匹配:当X∈VT时它与a进行匹配,其结果可能成功,也可能失败,如果成功则符号栈中将X退栈并将输入流指针向前移动一位,否则报错。

接受:当格局为(#,空#)时报告分析成功。

报错:出错后,停止分析。

并给出相应的错误提示信息。

驱动程序框图如下:4.函数说明void Init();/*初始化*/int IndexCh(char ch);void InputVt(); /*输入终结符*/void InputVn();/*输入非终结符*/void ShowChArray(char* collect, int num);/*输出Vn或Vt的内容*/void InputP();/*产生式输入*/bool CheckP(char * st);/*判断产生式正确性*/void First(int U);void AddFirst(int U, int nCh); /*加入first集*/bool HaveEmpty(int nVn);void Follow(int V);/*计算follow集*/void AddFollow(int V, int nCh, int kind);void ShowCollect(struct collectNode **collect);/*输出first或follow集*/ void FirstFollow();/*计算first和follow*/void CreateA T();/*构造预测分析表*/void ShowAT();/*输出分析表*/void Identify(char *st);void InitStack();void ShowStack();void Pop();void Push(int r);其中部分函数的具体实现:void First(int U) //构造first集合{int i,j;for(i = 0; i < PNum; i++){if(P[i].lCursor == U){struct pRNode* pt;pt = P[i].rHead;j = 0;while(j < P[i].rLength){if(100 > pt->rCursor){AddFirst(U, pt->rCursor);break;}else{if(NULL == first[pt->rCursor - 100]){First(pt->rCursor);}AddFirst(U, pt->rCursor);if(!HaveEmpty(pt->rCursor)){break;}else{pt = pt->next;}}j++;}if(j >= P[i].rLength) /*当产生式右部都能推出空时*/AddFirst(U, -1);}}}void Follow(int V) //构造follow集合{int i;struct pRNode *pt ;if(100 == V) /*当为初始符时*/AddFollow(V, -1, 0 );for(i = 0; i < PNum; i++){pt = P[i].rHead;while(NULL != pt && pt->rCursor != V)pt = pt->next;if(NULL != pt){pt = pt->next;if(NULL == pt){if(NULL == follow[P[i].lCursor - 100] && P[i].lCursor != V) {Follow(P[i].lCursor);}AddFollow(V, P[i].lCursor, 0);}else{while(NULL != pt && HaveEmpty(pt->rCursor)){AddFollow(V, pt->rCursor, 1);pt = pt->next;}if(NULL == pt){if(NULL == follow[P[i].lCursor - 100] && P[i].lCursor != V) {Follow(P[i].lCursor);}AddFollow(V, P[i].lCursor, 0);}else{AddFollow(V, pt->rCursor, 1);}}}}}void CreateA T() //构造LL(1)分析表{int i;struct pRNode *pt;struct collectNode *ct;for(i = 0; i < PNum; i++){pt = P[i].rHead;while(NULL != pt && HaveEmpty(pt->rCursor)) {ct = first[pt->rCursor - 100];while(NULL != ct){if(-1 != ct->nVt)analyseTable[P[i].lCursor - 100][ct->nVt] = i;ct = ct->next;}pt = pt->next;}if(NULL == pt){ct = follow[P[i].lCursor - 100];while(NULL != ct){if(-1 != ct->nVt)analyseTable[P[i].lCursor - 100][ct->nVt] = i;elseanalyseTable[P[i].lCursor - 100][vtNum] = i;ct = ct->next;}}else{if(100 <= pt->rCursor) /*不含空的非终结符*/{ct = first[pt->rCursor - 100];while(NULL != ct){analyseTable[P[i].lCursor - 100][ct->nVt] = i;ct = ct->next;}}else/*终结符或者空*/{if(-1 == pt->rCursor){ct = follow[P[i].lCursor - 100];while(NULL != ct){if(-1 != ct->nVt)analyseTable[P[i].lCursor - 100][ct->nVt] = i;else/*当含有#号时*/analyseTable[P[i].lCursor - 100][vtNum] = i;ct = ct->next;}}else/*为终结符*/{analyseTable[P[i].lCursor - 100][pt->rCursor] = i;}}}}}六、程序运行结果七、总结编译是把高级语言翻译成与之等价的低级语言的过程,它包括词法分析,语法分析,语义分析和中间代码生成,优化阶段和目标代码生成。

相关文档
最新文档