- 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
编译方法刘秉瀚陈晖,第2章
* T * * * * * * * 动态的生成代码 * * 10101=21 * * * 写出无符号偶数对应的文法. eint ? int edigit int ? int digit| ? edigit ? 0|2|4|6|8 digit ? 1|3|5|7|9|edigit 写出不包含无效前导零的无符号偶数对应的文法. S ? nz eint eint ? int edigit int ? int digit | ? edigit ? 0|2|4|6|8 nz ? 1|2|3|4|5|6|7|8|9| digit ? 0|nz | edigit 是否正确? * * * 上升 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 五、 词 法 分 析 词法分析:读入输入串,将其转换为被语法分析器分析的记号流(词法单元)。 一个语言的语句是由记号串构成的。构成一个记号的输入字符序列称为词素。词法分析器把语法分析器所需的记号的词素分隔开来。 词法单元 终结符(单词类别标识) 附加信息 + 语法分析 语义分析 * 词法分析的主要任务 过滤掉空格和注释 预读 识别Token : 常量、标识符(识别关键字)等 * 剔除空白和注释 大部分语言都允许单词之间出现任意数量的空白,以及必要的注释,上述翻译器若考虑这些,过于复杂。因此必须在词法分析中剔除。 for (; ; peek=next input character){ if (peek is a blank or a tab ) do nothing; else if ( peek is a newline ) line=line+1; else break; } peek 存放下一个输入字符 变量 line 统计换行符个数 * 预读 词法分析需要预先读入一些字符,才能正确分割词素。如:=、标识符、常数等。 使用输入缓冲区读取输入:词法分析器可以从缓冲区读取字符,也可以再放回缓存区。读取一块字符比每次读取单个字符更加有效。读取和放回通过左右移动指针实现。 通常情况下只需预读一个字符,可以用变量 peek 保存一个输入字符。如:常数是12还是120,t是变量还是true,需预读一个字符决定。有时不需要预读,如“*”。 需要预读才能决定词法单元的,此时peek为下一个词素的头字符或空白,若不需要预读的则peek置空白。 通过剔除空白和注释,peek 指向将要分析的词法单元头字符。 * 常量:用num表示整数型常量的终结符标识 当输入流出现一个数字序列时,词法分析将识别出一个词法单元:num,数字序列整型属性值 if (peek hold a digit) { v = 0; do{ v = v*10 + integer value of digit peek; peek = next input character; }while( peek holds a digit); return Token num, v; } 输入串:“23+28-39”转换为 num,23 + num,28 - num,39 * 标识符:以字母开头的字母或数字序列字符串 id:作为标识符的终结符标识。ct = ct + inn; ? id = id + id; id,“ct”=id,“ct”+id,“inn”; 将关键字预先保存在字符串表中,词法分析器识别到标识符词素时,先到表中检查是否有该词素,有:返回表中的词法单元。无:作为 id 将相应的词法单元插入字符串表。 * if ( peek 存放一个字母 ) { 将字母或数字读入一个缓冲区 b ; s = b 中字符形成的字符串; w = words.get( s );//返回词法单元 if ( w!=NULL) return w; else{ 将键-值对( s, id, s ) 加入到words; return Token id, s ; } } words 初始化为一个将键映射到值的散列表,用来实现从词素到词法单元的映射。s 为关键字,get为得到词法单元函数。 words: 词素?词法单元(Token) * 词法分析器 Token scan( ){ for (; ; peek=next input character){ //过滤空白符 if (peek
有哪些信誉好的足球投注网站
文档评论(0)