词法分析工作总结范文

上传人:cl****1 文档编号:548117607 上传时间:2023-11-12 格式:DOC 页数:4 大小:28.50KB
返回 下载 相关 举报
词法分析工作总结范文_第1页
第1页 / 共4页
词法分析工作总结范文_第2页
第2页 / 共4页
词法分析工作总结范文_第3页
第3页 / 共4页
词法分析工作总结范文_第4页
第4页 / 共4页
亲,该文档总共4页,全部预览完了,如果喜欢就下载吧!
资源描述

《词法分析工作总结范文》由会员分享,可在线阅读,更多相关《词法分析工作总结范文(4页珍藏版)》请在金锄头文库上搜索。

1、-精品合同推荐 -词法分析工作总结范文工作总结频道为大家整理的词法分析工作总结范文,供大家阅读参考。更多阅读请查看本站工作总结频道。词法分析是编译器工作的第一阶段,它的工作就是从输入 (源代码)中取得 token ,以作为 parser (语法分析)的输入,一般在词法分析阶段都会把一些无用的空白字符(white space,即空格、 tab 和换行)以及注释剔除,以降低下一步分析的复杂度,词法分析器一般会提供一个gettoken()这样的方法, parser可以在做语法分析时调用词法分析器的这个方法来得到下一个token ,所以词法分析器并不是一次性遍历所有源代码,而是采取这种 on-dema

2、nd 的方式:只在parser需要时才工作,并且每次只取一个token 。token 和 lexeme首先, token 不等于 lexeme。token 和 lexeme 的关系就类似于面向对象语言中“类”和“实例”(或“对象”)之间的关系,这个用中文不知该如何解释才好,比如语言中的变量a 和b,它们都属于同一种token: identifier,而a 的lexeme是” a”,b 则是” b”,而每个关键字都是一种token。token可以附带有一个值属性,例如变量a,当调用词法分析器的gettoken()时,会返回一个identifier类型的token,这个token带有一个属性“ a

3、”,属性可以是多样的,例如表示数字的token 可以带有-精品合同推荐 -一个表示数字值的属性,它是整型的。如下代码:int age = 23;int count = 50;可以依次提取出 8个 token : int( 值 为 ”int ”), id( 值为” age”) , assign(值为” =”) , number(值为整型数值 23) ,int(值为” int ”) , id( 值为” count ”) , assign( 值为” =”) ,number( 值为 50)正则表达式正则表达式可以用来描述字符串模式,例如我们可以用digit+来表示 number 的 token ,其中

4、 digit 表示单个数字(这里说正则表达式并不完全和实现的正则引擎所识别的正则表达式等价,这里只是为了描述问题而已) 。然而像 c 语言的的多行注释,用正则表达式来描述就比较麻烦,此时更倾向于直接用有穷自动机( finite automaton )来描述,因为用它来描述非常直观且很容易。有穷自动机 (finite automata)有穷自动机也称为有限状态机,状态在输入字符的作用下发生迁移,因此,它可以用来识别 token ,也因此,我们只要画得出 fa ,之后再用代码实现这个 fa ,那词法分析器也就差不多弄好了。有穷自动机分确定性( dfa )和非确定性( nfa )两种,如果对于同一个

5、输入, 只会有一个确定的状态迁移路线, 也就是只有一个-精品合同推荐 -确定的“下一状态”,那就是dfa ,否则就是nfa 。因为 dfa 对于同一个输入只有一个确定的下一状态,所以词法分析器当然优先采用它,那nfa 拿来干嘛用呢? nfa 用来做描述用时更方便,我们可以非常迅速地画出一个识别token 的 nfa 图,但要想直接画出个dfa 那要动不少脑筋。根据正则表达式构建nfa如上所述, nfa 更容易画出, 那我们就先研究nfa ,在定义 token时,我们可以用正则表达式来描述它, 因为正则表达式干这行很合适,例如一个 digit+ 就可以描述数字,多方便。因此,我们需要根据正则表达

6、式画出与之等价的 nfa 。而这个算法非常简单,就是 tompsons construction ,这个书上写得很清楚了。将 nfa 转化成 dfa (nfa 的确定化)对于计算机来说,面对同一个输入,如果有多个下一状态,那计算机就不清楚要转到哪个状态, 所以我们期望能从正则表达式得到 dfa ,而不是 nfa ,因为这样将来编程实现时比较自然(同一输入有确定的一个下一状态) ,而幸运的是,每个 nfa 都可以转化成 dfa 。为什么 nfa 可以转化成 dfa ?因为 fa(finite automata) 中的状态都是我们自己画的,只要 fa 能正确的识别 token ,那就 ok 了,也就是,如果 nfa 和 dfa 都可以达到一样的效果:识别 token ,那其它的我们就不管了。而 nfa 确定化的本质,就是将原来多个状态改用一个状态来表示,新状态其实是一个状态集,比如 nfa 中状态 s1 在输入 a 下可以到达s2 和 s3,那么,-精品合同推荐 -在 dfa 中,就把 s2 和 s3 合起来认为是一个状态。 还有一个问题是 nfa 中的空转换( ?输入),如果 s1 在?输入下可以到达 s2,就表示 s1 可以无

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > 演讲稿/致辞

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号