网站大量收购闲置独家精品文档,联系QQ:2885784924

编译原理第三章词法分析.ppt

  1. 1、本文档共50页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第三章 词法分析 3.1 对于词法分析器的要求 3.2 词法分析器的设计 3.3 正规表达式与有限自动机 3.4 词法分析器的自动产生 3.1 对于词法分析器的要求 词法分析的功能和输出形式: 词法分析器的功能是接收输入源程序,输出单词符号。 单词符号分五种:关键字;标识符;常数;运算符;界符。 词法分析器所输出的单词符号常常表示成如下的二元式: (单词种别,单词符号的属性值) 单词种别: 本书假定关键字、运算符和界符都是一符一种,标示符单列一种,常数按类型分种。 单词符号的属性信息: 属性信息(值)是指单词符号的特性或特征值。本书仅给出标示符、常量的属性信息,即存放它们的符号表表项的指针。 例子: 3.2 词法分析器的设计 3.2.1 输入、预处理 输入: 源程序。 输入缓冲区: 存放输入串。 预处理子程序: 对输入串进行预处理,其主要工作是去掉注释行,合并空白符等。 扫描缓冲区: 存放整理好的符号串。 扫描器: 不断地从扫描缓冲区读入字符串,并进行识别。 扫描器设计 扫描缓冲区分为两部分: 基本缓冲区和补充缓冲区,如果基本缓冲区不够,则要求输入串一定在补充缓冲区内结束,所以高级语言的符号串长度有限制。 3.2.2 超前有哪些信誉好的足球投注网站 超前有哪些信誉好的足球投注网站: 由于符号串需要结合后面的符号明确语义,所以需要向前读取多个符号后,判断其含义,这种向前读取符号的机制称为超前有哪些信誉好的足球投注网站。 超前有哪些信誉好的足球投注网站应用: 关键字识别 标示符的识别 常数的识别 算符和界符识别 例子:While (i=j) i--; 3.2.3 状态转换图 状态转换图定义: 转换图是一张有限方向图。在状态转换图中,结点代表状态,用圆圈表示。状态之间用箭弧连结。箭弧上的标记(字符)代表在射出结点(即箭弧始结点)状态下可能出现的输入字符或字符类。 简单语言符号表 转换规则: 关键字(如IF、WHILE等)都是“保留字”。所谓保留字的意思是,用户不得使用它们作为自己定义的标识符。例如,下面的写法是绝对禁止的: IF(5)=X 因为,我们的分析器在识别出IF时就认定它是一个关键字。如果不采用保留字的办法,就必须使用超前有哪些信誉好的足球投注网站技术。 由于把关键字作为保留字,故可以把关键字作为一类特殊标识符来处理。也就是说,对于关键字不专设对应的转换图。但把它们(及其种别编码)预先安排在一张表格中(此表叫做保留字表)。当转换图识别出一个标识符时,就去查对这张表,确定它是否为一个关键字。 关键字、标识符和常数之间没有确定的运算符或界符作间隔,则必须至少用一个空白符作间隔(此时,空白符不再是完全没有意义的)。例如,一个条件语句应写为 IF i0 i=1; 而绝对不要写成 IFi0 i=1; 因为对于后者,我们的分析无条件地将IFi看成一个标识符。 3.2.4 状态转换图的实现 算法主要思想: 让每个状态结点对应一小段程序。 对不含回路的分支结点,可以对应一个switch或一组if 语句。 对含回路的状态结点,可以对应一个while语句和if语句。 终态结点对应一个return(code,value)语句。 Ch-字符变量,存放必威体育精装版读进的源程序字符。 strToken-字符数组,存放构成单词符号的字符串。 GetChar-子程序过程,将下一输入字符读到ch中,有哪些信誉好的足球投注网站指示器前移一字符位置。 GetBC-子程序过程,检查ch中的字符是否为空白。若是,则调用GetChar直至ch中进入一个非空白字符。 Concat-子程序过程,将ch中的字符连接到strToken之后。例如,假定,strToken原来的值为“AB”,而ch中存放着‘C’,经调用Concat后,strToken的值就变为“ABC”. IsLetter和IsDigit-布尔函数过程,它们分别判断ch中的字符是否为字母和数字。 Reserve-整型函数过程,对strToken中的字符串查找保留字表,若它是一个保留字则返回它的编码,否则返回0值(假定0不是保留字的编码)。 Retract-子程序过程,将有哪些信誉好的足球投注网站指示器回调一个字符位置,将ch置为空白字符。 InsertId-整型函数过程,将strToken中的标识符插入符号表,返回符号表指针。 InsertConst-整型函数过程,将strToken中的常数插入常数表,返回常数表指针。 int code, value; start: strToken : =“ ”; /*置strToken为空串*/ GetChar( ); GetBC( ); If(isLetter()) begin while IsLetter() or IsDigit() do

文档评论(0)

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

分享好文档!

1亿VIP精品文档

相关文档