- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
编译实验导书
编译原理实验指导书
实验一 源程序的输入和预处理
一、实验目的
掌握字符处理的方法,理解设计为独立子程序的好处,为词法分析做好准备。
二、实验内容
首先编制一个源程序的输入过程,从键盘、文件或文本框输入若干行语句,依次存入输入缓冲区(字符型数据);然后编制一个预处理子程序,去掉输入串中的回车符、换行符和跳格符等编辑性文字;把多个空白符合并为一个;去掉注释;并记录行号。
假定 SAMPLE 语言采用自由格式书写,空白符作为分隔符,可以使用注解,用/*……*/或者{……}标识,但注解不能插在单词内部,注解要在一行内结束,若一行结束,没有遇到注释后面的结束标记,自动认为注释也结束。
三、实验报告要求
1、写出编程思路、源代码;
2、写出上机调试时发现的问题,以及解决的过程;
3、写出所使用的测试数据;
4、谈谈体会。
四、上交
1、实验报告;
2、程序源文件(老师检查)。
实验二 词法分析器(设计性实验)
一、实验目的
掌握词法分析的概念,设计方法,熟悉高级语言中词法的定义,词法分析程序的编写。
二、实验过程和指导
(一)词法分析器的结构和主要任务
【输入输出接口】
词法分析程序的主要任务是从左到右扫描每行源程序,拼成单词,换成统一的内部表示 (token)输出,送给语法分析器。具体包括:
–组织源程序的输入;
–按规则拼单词,并转换成二元形式;
–滤掉空白符,跳过注释、换行符及一些无用的符号(如字符常数的引号) (实验一已完成);
–进行行列计数,用于指出出错的行列号,并复制出错部分;
–列表打印源程序;
–发现并定位词法错误;
–生成符号表。token 文件和符号表用作语法分析的输入部分。
【条件限制】
(1) 假定 SAMPLE 语言采用自由格式书写;
(2) 可以使用注解,用/*……*/或者{……}标识,但注解不能插在单词内部,注解要在一行内结束,若一行结束,没有遇到注释后面的结束标记,自动认为注释也结束;
(3) 一行可以有多个语句,一个语句也可以分布在多行中,单词之间和语句之间可以插入任意空格,单词中间不能有空白符号,单词中间也不能有回车换行符,即单词不能跨行书写;
(4) 关键字都是保留字。
(二)词法分析程序的总体设计
图 1-2 是词法分析程序的顶层数据流图,即是词法分析程序的输入输出界面图,由此可以看出词法分析程序的功能就是从源程序中读入一个个字符,依据一定的构词规则,识别出各类有用的单词。其中源程序清单和错误信息从屏幕、打印机或文件输出,其余文件均以顺序文件的形式输出到外存储器上,以供下一阶段使用。由此可以得到更详细的数据流图,如图 1-3。
在上面的数据流图中,各个加工处理完成的功能如下:
加工 1.1(读一行并打印):收到读下一行命令后,从源程序读入一行,装入缓冲区,行计数,并打印。在这里需要注意的是,回车换行在源程序(文本文件)中 用两个字符 0D0AH来表示,而用高级语言(C 语言)读入内存后,就用一个字符 0AH 来表示,这是在用高级语言编写词法分析器时常被忽略导致错误的原因。
加工 1.2(读一非空字符):收到读一字符命令后,从缓冲区读入一非空字符,列计数。若缓冲区已空,则再读一行,列计数置为0。
加工 1.3(分类):根据单词的首字符以决定对不同类单词的处理。
加工 1.4(识别标识符):当输入字母时,开始识别标识符或关键字,边拼写边从缓冲区读入下一符号,当读入一非字母数字符号时,标识符识别完成,但已多读入一个符号,所以列记数回退。然后查关键字表,判断拼出的符号串是否为关键字。若是关键字,输出其种别码,否则识别的单词就是标识符,同时输出标识符及其种别码。
加工 1.5(识别常数):当输入数字时,开始识别整数或实数。边拼写边读入下一符号,当遇到“.”时,还要继续拼写该常数(实数情况)。如果遇到 E,要识别带指数的常数,当遇到其它非数字符号时,数字常数拼写完毕,列计数也要退 1。输出常数及其种别码。
加工 1.6(处理注解):当输入“/”时,开始识别注解或除号,若是注解时,最后两个连续读出的符号是“*/”,不需再读下一符号,列计数不变。当判定是除号“/”时,已多读入一字符,列计数减1,输出“/”的种别编码。
加工 1.7(识别分界符):识别其它界符,对于、、:、|、·等符号,还需要再读入下一符号,判别是否为双界符。若不是,列计数 1,输出单词的种别码。
加工 1.8(识别文字常数):当输入引号时,引号忽略,开始拼写字符常数,不断拼读下一符号,搜索下一个引号,当读入第二个引号时,字符常数拼写结束。最后列计数不减1,后输出该常数。
以上加工 1.4~1.8 都需要从缓冲区 A每次读出一个字符,进行列计数。由于假定每个单词不跨行,所以不用考虑从源程序中读出下
您可能关注的文档
最近下载
- GB50345-2012 屋面工程技术规范.pdf VIP
- 驻村工作队管理制度.docx VIP
- 新人教版(新插图)二年级上册数学全册单元期中期末测试卷(含答案).docx VIP
- 提高患者吸氧依从性品管圈 图文.pptx VIP
- 第2课《树立科学的世界观》第2框《用科学世界观指导人生发展》-【中职专用】《哲学与人生》同步课堂课件.pptx VIP
- 人教版八年级历史上册第一单元作业设计(优质案例13页).pdf VIP
- 提高病人吸氧的依从性品管圈.PPTX.pptx VIP
- 八年级上册历史大单元作业设计(优质案例21页).pdf VIP
- 第2课 树立科学的世界观-【中职专用】2024年中职思想政治《哲学与人生》金牌课件(高教版2023·基础模块).pptx VIP
- NPM-CPK共勉摘要.ppt VIP
原创力文档


文档评论(0)