《词法分析副》PPT课件.ppt

《词法分析副》PPT课件.ppt

ID:52108072

大小:212.50 KB

页数:81页

时间:2020-03-31

《词法分析副》PPT课件.ppt_第1页
《词法分析副》PPT课件.ppt_第2页
《词法分析副》PPT课件.ppt_第3页
《词法分析副》PPT课件.ppt_第4页
《词法分析副》PPT课件.ppt_第5页
资源描述:

《《词法分析副》PPT课件.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、第2章词法分析2.1词法分析器的设计考虑及手工构造2.1.1单词类型及二元式编码㈠单词类型基本字、标识符、常数、运算符、界符㈡单词的性质个数确定和不确定单字符或多字符构成2.1词法分析器的设计考虑及手工构造㈢单词二元式编码经词法分析后,单词用二元式(code,val)表示。code表示单词的种别,用整数码表示,在语法分析时使用。val表示单词的值,在本书中用字符串表示,在语义分析时使用。2.1词法分析器的设计考虑及手工构造㈣编码原则通常将标识符归为一种,常数按类型分种,基本字、运算符及界符采用一符一种。2.1词法分析

2、器的设计考虑及手工构造实例--设有某一程序设计语言,其部分单词二元式编码如下所示:2.1词法分析器的设计考虑及手工构造2.1词法分析器的设计考虑及手工构造用该程序设计语言编制的计算园柱体表面积的源程序(输入输出略)如下所示:Begin/*S=2*3.14*R*R+2*3.14*R*H*/Realr,h,s;s=2*3.14*r*(r+h)End2.1词法分析器的设计考虑及手工构造根据单词二元式编码,上述程序的单词二元式序列应为:('{',"NUL")('c',"NUL")('i',"r")(',',"NUL")('i

3、',"h")(',',"NUL")('i',"s")(';',"NUL")('i',"s")('=',"NUL")('x',"2")('*',"NUL")('y',"3.14")('*',"NUL")('i',"r")('*',"NUL")('(',"NUL")('i',"r")('+',"NUL")('i',"h")(')',"NUL")('}',"NUL")2.1词法分析器的设计考虑及手工构造2.1.2源程序的输入及预处理㈠源程序的输入l分段读入处理(早期)l全部读入后处理设源程序如下所示,其中''为续行符。2

4、.1词法分析器的设计考虑及手工构造2.1词法分析器的设计考虑及手工构造源程序读入后,输入缓冲区的内容如下所示:2.1词法分析器的设计考虑及手工构造㈡预处理词法分析器通常由二个部分构成:预处理程序扫描器(单词识别程序)2.1词法分析器的设计考虑及手工构造①分成二部分的理由词法分析可在输入缓冲区上直接进行,但从程序进行的角度来讲,若是把输入串预处理一下,则单词识别就会比较容易,故词法分析器通常由预处理程序和扫描器(单词识别程序)两部分组成。2.1词法分析器的设计考虑及手工构造②预处理主要工作1.删除注释2.删除续行符以及

5、后续换行符(0AH)3.Tab的作用相当于多个空格,换行符、Tab和空格具有界符作用,预处理时通常予以保留。在后面的分析中可以看到,它们的存在给后续的单词识别带来方便。为了简化判断,可在预处理时将换行符和Tab统一替换为空格。4.大多数语言(除C语言外)不区分大小写,可在预处理时大写字母变换成小写字母,或相反,以方便后续处理。5.对于受书写格式限制的语言(如FORTRAN和COBOL),还应识别标号区,正确给出语句标号;识别续行标志,把相继行连接在一起,给出语句结束符。2.1词法分析器的设计考虑及手工构造上述源程序经

6、预处理后,扫描缓冲区中的内容如下所示:2.1词法分析器的设计考虑及手工构造㈢预处理程序下面用C/C++语言来编写一个预处理程序,其作用是去除源程序中的注释和续行符,将Tab和换行符替换为空格,将大写字母变换成小写字母。每调用一次,将经预处理的源程序全部送入内存中的扫描缓冲区,供扫描区识别单词。2.1词法分析器的设计考虑及手工构造程序实现,由两个函数构成:主函数main是测试驱动程序,调用预处理函数pro_process,模拟词法分析器工作;函数pro_process执行预处理任务,借助于传地址获得扫描缓冲区的首址,将

7、经预处理的源程序送入扫描缓冲区。2.1词法分析器的设计考虑及手工构造由于算法需要,在源程序尾部添加字符‘#’,这是一个特殊的单词,表示源程序的结束。源程序中的注释用/*...*/标记,不允许嵌套使用,这和大多数高级语言的规定一致。2.1词法分析器的设计考虑及手工构造源程序的输入及预处理#include#includevoidpro_process(char*);voidmain()//测试驱动程序{//定义扫描缓冲区charbuf[4048]={''};//缓冲区清0

8、//调用预处理程序pro_process(buf);//在屏幕上显示扫描缓冲区的内容cout<

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

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

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