编译实验指导书

编译实验指导书

ID:45610044

大小:313.04 KB

页数:43页

时间:2019-11-15

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

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

1、编译原理实验指导书实验一源程序的输入和预处理一、实验目的掌握字符处理的方法,理解设计为独立子程序的好处,为词法分析做好准备。二、实验内容首先编制一个源程序的输入过程,从键盘、文件或文本框输入若干行语句,依次存入输入缓冲区(字符型数据);然后编制一个预处理子程序,去掉输入串屮的回车符、换行符和跳格符等编辑性文字;把多个空白符合并为一个;去掉注释;并记录行号。假定SAMPLE语言采用自山格式书写,空白符作为分隔符,可以使用注解,用/*……*/或者{……}标识,但注解不能插在单词内部,注解要在一行内结束,若一行结束,没有

2、遇到注释后ifii的结朿标记,口动认为注禅也结朿。三、实验报告要求1、写出编程思路、源代码;2、写出上机调试时发现的问题,以及解决的过程;3、写出所使用的测试数据;4、谈谈体会。四、上交1、实验报告;2、程序源文件(老师检查)。实验二词法分析器(设计性实验)一、实验目的掌握词法分析的概念,设计方法,熟悉高级语言中词法的定义,词法分析程序的编写。二、实验过程和指导(一)词法分析器的结构和主要任务【输入输出接口】词法分析程序的主要任务是从左到右扫描每行源程序,拼成单词,换成统一的内部表示(token)输出,送给语法分析

3、器。具体包括:-组织源程序的输入;-按规则拼单词,并转换成二元形式;-滤掉空口符,跳过注释、换行符及一些无用的符号(如字符常数的引号)(实验一已完成);■进行行列计数,川于指出出错的行列号,并复制出错部分;-列表打印源程序;-发现并定位词法错误;-牛成符号表。token文件和符号表用作语法分析的输入部分。【条件限制】(1)假定SAMPLE语言采用自由格式帖写;(2)可以使用注解,用/*……*/或者{……}标识,但注解不能插在单词内部,注解要在—•行内结束,若一行结束,没有遇到注释后而的结束标记,自动认为注释也结束;

4、(3)一行可以有多个语句,一个语句也可以分布在多行中,单词之间和语句之间可以插入任意空格,单词中间不能有空白符号,单词中间也不能有冋车换行符,即单词不能跨行书写;(4)关键字都是保留字。(二)词法分析程序的总体设计单•和倂谋侑息图1-2词法分析程序的顶层数抓流圏图1・2是词法分析程序的顶层数据流图,即是词法分析程序的输入输出界面图,由此可以看出词法分析程序的功能就是从源程序中读入一个个字符,依据一定的构词规则,识别出各类有川的单词。其屮源程序清单和错谋信息从屏幕、打印机或文件输出,其余文件均以顺序文件的形式输出到外

5、存储器上,以供下一阶段使用。市此可以得到更详细的数据流图,如图l-3o图1-3诃法分析程序的洋细数据流图在上面的数据流图屮,各个加工处理完成的功能如下:加工1.1(读一行并打印):收到读卜-一行命令后,从源程序读入一行,装入缓冲区,行计数,并打印。在这里需要注意的是,冋车换行在源程序(文本文件)中用两个字符ODOAH来表示,而用高级语言(C语言)读入内存后,就用一个字符OAH来表示,这是在用高级语言编写词法分析器时常被忽略导致错误的原因。加工1.2(读一非空字符):收到读一字符命令后,从缓冲区读人一非空字符,列计数

6、。若缓冲区己空,则再读一行,列计数置为0。加工1.3(分类):根据单词的首字符以决定对不同类单词的处理。加工1.4(识别标识符):当输入字母吋,开始识别标识符或关键字,边拼写边从缓冲区读入下一符号,当读入一非字母数字符号时,标识符识别完成,但己多读入一个符号,所以列记数回退。然后査关键字表,判断拼出的符号串是否为关键字。若是关键字,输出其种别码,否则识别的单词就是标识符,同时输出标识符及其种别码。加工1.5(识别常数):当输入数字时,开始识别整数或实数。边拼写边读入下一符号,当遇到时,还要继续拼写该常数(实数情况)

7、。如果遇到E,要识别带指数的常数,当遇到其它非数字符号时,数字常数拼写完毕,列计数也要退1。输出常数及其种别码。加工1.6(处理注解):当输入“/”时,开始识别注解或除号,若杲注解时,最后两个连续读出的符号是“*/”,不需再读下一符号,列计数不变。当判定是除号“/”时,已多读入一字符,列计数减1,输出“/”的种別编码。加工1.7(识别分界符):识别其它界符,对于V、>、:、I、•等符号,还需要再读入下一符号,判别是否为双界符。若不是,列计数1,输出单词的种别码。加工1.8(识别文字常数):当输入引号时,引号忽略,开

8、始拼写字符常数,不断拼读下一符号,搜索下一个引号,当读入第二个引号时,字符常数拼写结朿。最后列计数不减1,后输出该常数。以上加工1.4〜1.8都需要从缓冲区A每次读出一个字符,进行列计数。由于假定每个单词不跨行,所以不用考虑从源程序中读出下一行到缓冲区的功能。加工1.9(输出TOKEN):对各种界符与关键字输出其相应的二元式(TOKEN),对常数与标识符则让

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

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

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