- 1、本文档共135页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第3章词法分析概要
* 3 状态转换图的实现 状态转换图非常容易用程序实现,最简单的办法是让每个状态对应一小段程序。对于图5的状转换图,我们首先引进一组变量和过程如下: (1) character:字符变量,存放必威体育精装版读入的源程序字符。 (2) token:字符数组,存放构成单词符号的字符串。 (3) getbe( ):若character中的字符为空白,则调用getchar( ),直至character为非空白符为止。 * (4) concatenation( ):将token中的字符串与character中的字符连接并作为token中新的字符串。 (5) letter( )和digit( ):判断character中的字符是否为字母和数字的布尔函数,是则返回true,否则返回false。 (6) reserve( ):按token数组中的字符串查表2.1中的前五项(即判别其是否为保留字),若是保留字则返回它的编码,否则返回0值。 * (7) retract( ):扫描指针回退一个字符,同时将character置为空白。 (8) buildlist( ):将标识符登录到符号表或将常数登录到常数表。 (9) error( ):出现非法字符,显示出错信息。 相对于图5的词法分析器构造如下: * token= ; /*对token数组初始化*/ s=getchar ( ); getbe ( ); /*滤除空格*/ switch (s) { case a: case b: … case z: while (letter ( )‖digit ( )) * { concatenation ( ); /*将当前读入的字符送入token数组*/ getchar ( ); } retract ( ); /*扫描指针回退一个字符*/ c=reserve ( ); if (c==0) { buildlist ( ); /*将标识符登录到符号表中*/ return (id,指向id的符号表入口指针); } * else return (保留字码,null); break; case 0: case 1: … case 9: while (digit ( )) { concatenation ( ); getchar ( ); } retract ( ); * buildlist ( ); /*将常数登录到常数表中*/ return (num,num的常数表入口指针); break; case +: return (+,null); break; case ?: return (?,null); break; case *: return (*,null); * break; case : getchar ( ); if (character== =) return (relop,LE); else { retract ( ); return (relop,LT); } break; case =: getchar ( ); if (character== =) * return (relop, EQ); else { retract ( ); return (=, _ ); } break; case ;: return (;, _ ); break; default: error ( ); } * 首先将状态划分成终态集{0,2,3}和非终态集{1};对于{0,2,3},f(0,a)=0,f(2,a)=3,f(3,a)=3,f(0,b)=1,f(2,b)=2,f(3,b)=2,由于f(0,b)=1,1不属于{0,2,3},则将{0,2,3}化分成{0}和{2,3};由于2和3是等价的,故M的状态最终划分为{0},{1},{2,3},由于2和3是等价的,取2代表,删除3,得到化简的DFA。 * 1 ? 0 字母|数字 3 * 2 其它 字母 数字 5 6 7 10 11 13 * 4 其它 * 8 其它 9 + 数字 = * + { } 其它 12 * 词法分析程序流程图 开始 滤掉空格 是字母? 读标识符 查保留字表 查到否? 保留字类码?sy Y Y 返回 是字母? 取数 Y 整数类码?sy 数值?NUM 标识符类码 ?sy 标识符?I
文档评论(0)