编译原理实验指导书

编译原理实验指导书

ID:6457877

大小:32.41 KB

页数:64页

时间:2018-01-14

编译原理实验指导书_第1页
编译原理实验指导书_第2页
编译原理实验指导书_第3页
编译原理实验指导书_第4页
编译原理实验指导书_第5页
资源描述:

《编译原理实验指导书》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、编译原理实验指导书-----------------------Page1-----------------------编译原理实验指导书《编译原理》课程组2003年12月1-----------------------Page2-----------------------概述一、本课程实践的目的和任务编译原理是一门实践性很强的课程,只有通过实践,才能真正掌握。实际的编译程序是十分复杂的,有时由多达十几万条指令组成。为此,编译原理的实践教学,采用简化编译过程的办法,选择最关键的3个环节──词法分析

2、、语法分析(包括语义处理、产生无优化的目标指令)、连接调试,进行编程和调试训练。每个环节作为一个实践课题。先分别编程调试,再连接在一起总调。二、实践方法任何一个实用的高级语言,其语法都比较复杂,如选其作为源语言,很难实践全过程。故本实践将定义一个简化的语言──C/C++语言的一个子集作为源语言,分3个课题,设计调试出它的编译程序。前后贯穿这一条主线进行实践。每次都可利用课余时间编程,利用上机时间进行输入和调试。建议使用C/C++语言或C语言。三、实践报告的规范和要求每个课题完成后写出实践报告。实践报

3、告包括程序设计时考虑的算法和方法;调试过程中出现的问题和解决的措施;打印出程序清单和调试时所用的源程序。四、简化的C/C++语言子集的定义⒈C/C++语言子集的语法定义〈C/C++子集程序〉→〈变量说明〉〈分程序〉。〈变量说明〉→〈空〉|VAR〈变量表〉:INTEGER;〈变量表〉→〈变量〉|〈变量〉,〈变量表〉〈变量〉→〈标识符〉〈分程序〉→BEGIN〈语句组〉END〈语句组〉→〈语句〉|〈语句〉;〈语句组〉〈语句〉→〈赋值语句〉|〈条件语句〉|〈WHILE语句〉|〈分程序〉〈赋值语句〉→〈变量〉

4、:=〈算术表达式〉〈条件语句〉→IF〈布尔表达式〉THEN〈语句〉ELSE〈语句〉2-----------------------Page3-----------------------〈WHILE语句〉→WHILE〈布尔表达式〉DO〈语句〉〈算术表达式〉→〈项〉|〈算术表达式〉+〈项〉|〈算术表达式〉-〈项〉〈项〉→〈初等量〉|〈项〉*〈初等量〉|〈项〉/〈初等量〉〈初等量〉→〈无符号数〉|〈变量〉|(〈算术表达式〉)〈关系表达式〉→〈算术表达式〉〈关系运算符〉〈算术表达式〉〈标识符〉→〈字母〉|

5、〈标识符〉〈字母〉|〈标识符〉〈数字〉〈无符号数〉→〈数字〉|〈无符号数〉〈数字〉〈关系运算符〉→〈

6、〈=

7、=

8、〉=

9、〉

10、〈〉〈字母〉→A│B│C│D│E│F│G│H│I│J│K│L│M│N│O│P│Q│R│S│T││U│V│W│X│Y│Z〈数字〉→1│2│3│4│5│6│7│8│9│0实验1词法分析介绍词法分析程序的编程与调试。(2学时)一、目的与要求1)目的通过设计调试词法分析程序,实现从源程序中分出各种单词的方法;加深对课堂教学的理解;提高词法分析方法的实践能力。2)要求⑴掌握从源程序文件中读

11、取有效字符的方法和产生源程序的内部表示文件的方法。⑵掌握词法分析的实现方法。⑶上机调试编出的词法分析程序。二、实践题⒈题目用C/C++语言编写前述C/C++子集的词法分析程序。1)主程序设计考虑,(参阅后面给出的程序框架)主程序的说明部分为各种表格和变量安排空间。3-----------------------Page4-----------------------数组k为关键字表,每个数组元素存放一个关键字。采用定长的方式,较短的关键字后面补空格。P数组存放分界符。为了简单起见,分界符、算术运算符

12、和关系运算符都放在p表中(学生编程时,应建立算术运算符表和关系运算符表,并且各有类号),合并成一类。id和ci数组分别存放标识符和常数。instring数组为输入源程序的单词缓存。outtoken记录为输出内部表示缓存。还有一些为造表填表设置的变量。主程序开始后,先以人工方式输入关键字,造k表;再输入分界符等造p表。主程序的工作部分设计成便于调试的循环结构。每个循环处理一个单词;接收键盘上送来的一个单词;调用词法分析过程;输出每个单词的内部码。2)词法分析过程考虑该过程取名为lexical,它根据输

13、入单词的第一个字符(有时还需读第二个字符),判断单词类,产生类号:以字符k表示关键字;i表示标识符;c表示常数;p表示分界符;s表示运算符(学生编程时类号分别为1,2,3,4,5)。对于标识符和常数,需分别与标识符表和常数表中已登记的元素相比较,如表中已有该元素,则记录其在表中的位置,如未出现过,将标识符按顺序填入数组id中,将常数变为二进制形式存入数组中ci中,并记录其在表中的位置。lexical过程中嵌有两个小过程:一个名为getchar,其功能为从instrin

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。