3词法分析与有穷自动机.ppt

  1. 1、本文档共120页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * (5) concat( ):将token中的字符串与ch中的字符连接并作为token中新的字符串。 (6) letter(ch)和digit(ch):判断ch中的字符是否为字母和数字的布尔函数,是则返回true,否则返回false。 (7) reserve( ):按token数组中的字符串查表13中的前5项(即判别其是否为保留字),若是保留字则返回它的编码,否则返回标识符的种别码。 (8) retract( ):扫描源程序的读字符指针回退一个字符,同时将ch置为空白。 (9) return( ):携带单词的内部表示信息返回语法分析程序。 (10) dtb( ):十进制转换函数,将token中的数字串转换为二进制数值表示,并作为函数值返回。 状态转换图的程序实现说明: ? 在词法分析中,可以用状态转换图来识别单词。图14 给出了用于识别标识符、无符号整数、无符号数的状态转换图,其初始状态均用0状态表示。 图14 标识符及无符号数的状态转换图 (a) 标识符;(b) 无符号整数;(c) 无符号数 当到达一类单词符号的终止状态时即可给出相应的单词编码。某些终止状态是在读入了一个其它不属于该单词的符号后才得到相应的单词编码的,这表明在识别单词的过程中多读入了一个符号,所以识别出单词后应将最后多读入的这个符号予以回退;我们对此类情况的处理是在终态上以 * 作为标识。 图15 含有分支或回路的状态示意 (a) 含分支的状态i;(b) 含回路的状态i s=getchar ( ); switch (s) { case a: case b: … case z: … ; /*实现状态j功能的语句*/ case 0: case 1: … case 9: … ; /*实现状态k功能的语句*/ } 对于不含回路的分支状态来说,可以让它对应一个switch( )语句或一组if-else语句。 例如,图15(a)的状态i所对应的switch语句如下: 对于含回路的状态来说,可以让它对应一个while语句。例如,图15(b)的状态i所对应的while语句如下: getchar ( ); while (letter( )||digit( )) getchar (); …; /*实现状态j功能的语句*/ 终态一般对应一个return( )语句;return意味着从词法分析器返回到调用段,一般指返回到语法分析器。 图13 简单词法分析的状态转换图 相对于图13 的词法分析器构造如下: token= ‘ ; /*对token数组初始化*/ getch ( ); getbc ( ); /*滤除空格*/ switch (ch) {case a: case b: … case z: while (letter (ch )‖digit (ch )) {concat ( ); /*将当前读入的字符送入token数组*/ getch ( );} retract ( ); /*扫描指针回退一个字符*/ c=reserve ( ); if (c!=6) return(c , null); /* c为的保留字的种别码*/ else

文档评论(0)

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

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

1亿VIP精品文档

相关文档