Chapter03--词法分析.pptx

  1. 1、本文档共83页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Chapter03--词法分析

第3章 词法分析基础知识:PASCAL、C语言、正规表达式 正规文法、有限自动机知识点:词法分析器的作用、地位 记号、模式 词法分析器的状态转换图词法分析 简介3.1 词法分析程序与语法分析程序的关系3.2 词法分析程序的输入与输出3.3 记号的描述和识别3.4 词法分析程序的设计与实现3.5 软件工具LEX 小结简介任务:把构成源程序的字符串转换成语义上关联的记号序列编译程序是在单词的级别上来分析和翻译源程序,因此,词法分析是编译的基础本章内容安排 讨论手工设计并实现词法分析程序的方法和步骤词法分析程序的作用词法分析程序的地位源程序的输入与词法分析程序的输出单词符号的描述及识别词法分析程序的设计与实现 词法分析程序自动生成工具LEX简介词法分析程序的作用源程序由单词组成,单词是最小的语义单位词法分析程序的作用: 扫描源程序字符流 按照源语言的词法规则识别出各类单词符号 产生用于语法分析的记号序列 词法检查 创建符号表(需要的话) 把识别出来的标识符插入符号表中 与用户接口的一些任务:跳过源程序中的注释和空白把错误信息和源程序联系起来3.1 词法分析程序与语法分析程序的关系词法分析程序与语法分析程序之间的三种关系词法分析程序作为独立的一遍词法分析程序作为语法分析程序的子程序词法分析程序与语法分析程序作为协同程序分离词法分析程序的好处词法分析的一些难点字符记号词法分析程序作为独立的一遍词法分析程序记号流源程序字符串源程序输出放入一个中间文件 磁盘文件 内存文件取下一记号词法分析器字符串字符源程序记号符号表词法分析程序作为语法分析程序的子程序语法分析器避免了中间文件省去了取送符号的工作有利于提高编译程序的效率P1P2唤醒P2唤醒P1唤醒P2唤醒P1词法分析程序与语法分析程序作为协同程序协同程序: 如果两个或两个以上的程序,它们之间交叉地执行,这些程序称为协同程序。词法分析程序与语法分析程序在同一遍中,以生产者和消费者的关系同步运行。分离词法分析程序的好处可以简化设计词法程序很容易识别并去除空格、注释,使语法分析程序致力于语法分析,结构清晰,易于实现。可以改进编译程序的效率利用专门的读字符和处理记号的技术构造更有效的词法分析程序。可以加强编译程序的可移植性在词法分析程序中处理特殊的或非标准的符号。词法分析的一些难点位置对准Fortran要求某些结构出现在输入行的固定位置空白不作为分隔符Fortran中空格是无意义的,可以随便加入DO 5 I = 1.25(赋值语句,DO5I是标识符)DO 5 I = 1,25(循环语句,DO是关键字)关键字不保留PL/I语言的关键字不保留IF THEN THEN THEN=ELSE; ELSE ELSE=THEN3.2 词法分析程序的输入与输出一、词法分析程序的实现方法二、设置缓冲区的必要性三、配对缓冲区四、词法分析程序的输出一、词法分析程序的实现方法利用词法分析程序自动生成器从基于正规表达式的规范说明自动生成词法分析程序。生成器提供用于源程序字符流读入和缓冲的若干子程序利用传统的系统程序设计语言来编写利用该语言所具有的输入/输出能力来处理读入操作利用汇编语言来编写直接管理源程序字符流的读入二、设置缓冲区的必要性超前搜索:为了得到某一个单词符号的确切性质,需要超前扫描若干个字符。例:有合法的FORTRAN语句: DO99K=1,10和DO99K=1.10 为了区别这两个语句,必须超前扫描到等号后的第一个分界符处。例:Pascal语言中: do99、 <>、:=、(*例:C语言中:==、/*、//、++ 、for_loop 方便实现读字符和退字符操作,提高词法分析器的效率 … … i f x = y t h e n j : = j + 2 ;eof … 开始指针向前指针三、配对缓冲区原因:不论缓冲器多大都不能保证单词不被它的边界打断把一个缓冲器分为相同的两半,每半各含N个字符,一般N=1KB或4KB。基本方法测试指针的过程(1)IF (向前指针在左半区的终点) {读入字符串,填充右半区;向前指针前移一个位置;}ELSE IF (向前指针在右半区的终点) { 读入字符串,填充左半区; 向前指针移到缓冲区的开始位置; } ELSE 向前指针前移一个位置; … i f x = y t heof e n j : = j + 2 ;eof eof向前指针开始指针每半区带有结束标记的缓冲器 基本方法的缺点:更新向前指针时要做二次测试 改进:每半区带有结束标记的缓冲器更新向

文档评论(0)

kabudou + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档