第2章 词法分析副.pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第2章 词法分析 2.1 词法分析器的设计考虑及手工构造 2.1.1 单词类型及二元式编码 ㈠单词类型 基本字、标识符、常数、运算符、界符 ㈡单词的性质 个数确定和不确定 单字符或多字符构成 2.1 词法分析器的设计考虑及手工构造 ㈢单词二元式编码 经词法分析后,单词用二元式 (code,val) 表示。 code表示单词的种别,用整数码表示,在语法分析时使用。 val表示单词的值,在本书中用字符串表示,在语义分析时使用。 2.1 词法分析器的设计考虑及手工构造 ㈣编码原则 通常将标识符归为一种,常数按类型分种,基本字、运算符及界符采用一符一种。 2.1 词法分析器的设计考虑及手工构造 实例--设有某一程序设计语言,其部分单词二元式编码如下所示: 2.1 词法分析器的设计考虑及手工构造 2.1 词法分析器的设计考虑及手工构造 用该程序设计语言编制的计算园柱体表面积的源程序(输入输出略)如下所示: Begin/*S=2*3.14* R* R +2*3.14* R*H */ Real r,h,s; s=2*3.14*r*(r+h) End 2.1 词法分析器的设计考虑及手工构造 根据单词二元式编码,上述程序的单词二元式序列应为: ({,NUL)(c,NUL)(i,r)(,,NUL) (i,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.1 词法分析器的设计考虑及手工构造 2.1 词法分析器的设计考虑及手工构造 源程序读入后,输入缓冲区的内容如下所示: 2.1 词法分析器的设计考虑及手工构造 ㈡预处理 词法分析器通常由二个部分构成: 预处理程序 扫描器(单词识别程序) 2.1 词法分析器的设计考虑及手工构造 ①分成二部分的理由 词法分析可在输入缓冲区上直接进行,但从程序进行的角度来讲,若是把输入串预处理一下,则单词识别就会比较容易,故词法分析器通常由预处理程序和扫描器(单词识别程序)两部分组成。 2.1 词法分析器的设计考虑及手工构造 ②预处理主要工作 1.删除注释 2.删除续行符以及后续换行符(0AH) 3.Tab的作用相当于多个空格,换行符、Tab和空格具有界符作用,预处理时通常予以保留。在后面的分析中可以看到,它们的存在给后续的单词识别带来方便。为了简化判断,可在预处理时将换行符和Tab统一替换为空格。 4.大多数语言(除C语言外)不区分大小写,可在预处理时大写字母变换成小写字母,或相反,以方便后续处理。 5.对于受书写格式限制的语言(如FORTRAN和COBOL),还应识别标号区,正确给出语句标号;识别续行标志,把相继行连接在一起,给出语句结束符。 2.1 词法分析器的设计考虑及手工构造 上述源程序经预处理后,扫描缓冲区中的内容如下所示: 2.1 词法分析器的设计考虑及手工构造 ㈢预处理程序 下面用C/C++语言来编写一个预处理程序,其作用是去除源程序中的注释和续行符,将Tab和换行符替换为空格,将大写字母变换成小写字母。每调用一次,将经预处理的源程序全部送入内存中的扫描缓冲区,供扫描区识别单词。 2.1 词法分析器的设计考虑及手工构造 程序实现,由两个函数构成: 主函数main是测试驱动程序,调用预处理函数pro_process,模拟词法分析器工作; 函数pro_process执行预处理任务,借助于传地址获得扫描缓冲区的首址,将经预处理的源程序送入扫描缓冲区。 2.1 词法分析器的设计考虑及手工构造 由于算法需要,在源程序尾部添加字符‘#’,这是一个特殊的单词,表示源程序的结束。 源程序中的注释用/*...*/标记,不允许嵌套使用,这和大多数高级语言的规定一致。 2.1 词法分析器的设计考虑及手工构造 源程序的输入及预处理 #include fstream.h #include iostream.h void pro_process(char *); void main( ) //测试驱动程序 { //定义扫描缓冲区 char buf[4048]={\0}; //缓冲区清0 //调用预处理程序 pro_process(buf); //在屏幕上显示扫描缓冲区的内容 coutbufendl; } 2.1 词法分析器的设计考虑及手工构造 void pro_process(char *b

文档评论(0)

海川电子书城 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档