DFA为什么分批法适用于于词法分析

用户名:xxxx66yyyy
文章数:107
评论数:419
访问量:1654585
注册日期:
阅读量:1297
阅读量:3317
阅读量:430944
阅读量:1119052
51CTO推荐博文
前面两篇(、)只是直观地针对已明确给出的教学语言 Tiny 源程序进行直接的词法分析(其实根本就称不上),不具有一般性(下面这个针对C++源程序的词法分析也相当单一,考虑面不足)。下面是我们的课程实验,需要结合课堂上学到的利用有限自动机DFA的方法来设计并分析源程序,提取出符合要求的Token。
根据老师给出的课件以及教材上的内容,扫描程序(词法分析)有下面3种实现方式,前面两篇(、)就是属于&直接编写&这一类,而本文则是&DFA&这一类。
1、按实验要求(如下),目前只拙劣地实现了第(1)和(5)点。
而且第(1)点中有两个要求未能完成:
★ 浮点数,因为包含单行、多行注释的DFA已经很混乱了,这部分暂时先不实现,考虑将来用&表驱动法&(即状态转换表)来实现。
★ 注释,与教材类似不打印单行和多行注释,因此代码实现中少了处理注释的内容。
实验中用到的C++源程序与要求如下图:
2、对实验要求中的&样例程序&稍微修改了一下。
★ 头文件 #include&iostream.h& 被改为 #include &iostream.h&,即 iostream.h 是由双引号 && 而不是尖括号 & & 包围的,实际上回到了 C 的代码规范。这样修改是因为原本确定 DFA 时考虑不全面,忽略了&小于等于 &=,大于等于 &=,判断 ==,不等于 != &这几种特殊情况,因为他们会跟 & & = ! 这几个特殊字符造成二义性。
★ 同时,C++ 中的 IO 有& && 与 && &也可能与上述特殊字符造成歧义,这个使得实现代码中的 unGetNextChar(int step) 与教材中的有所不同,因为该函数带了一个&步长参数 step&,其实也是为了迁就 #include&iostream.h& 中的 & 与代码中的 && 和 &= 。
其实,&iostream.h&也被作为字符串识别了,目前尚改进不了。
★ 另外为了测试算术运算符,对实验要求中的样例程序进行了修改,程序按照该样例作为输入,如下图加上了一个&i = i + 2;&语句:
3、程序中的打印输出模仿了教材中的样例输出。
★ 对于以上样例输入,最终程序输出结果如下:
4、针对该C++源程序设计的DFA 图大致如下:
5、实现代码(Java)
近来喜欢上了Vim的代码高亮,看着清晰明朗,下面是整个实现代码在Vim下的截图,文本代码在本文最后:
&本文出自 “” 博客,请务必保留此出处
了这篇文章
类别:┆阅读(0)┆评论(0)
15:20:22 12:45:38 15:51:09 21:53:49 10:17:27 18:58:29 您现在的位置:&&>>&&>>&&>>&词法分析小结正文
词法分析小结
词法分析小结
作者/编辑:佚名
词法分析是编译器工作的第一阶段,它的工作就是从输入(源代码)中取得token,以作为parser(语法分析)的输入,一般在词法分析阶段都会把一些无用的空白字符(white space,即空格、tab和换行)以及注释剔除,以降低下一步分析的复杂度,词法分析器一般会提供一个gettoken()这样的方法,parser可以在做语法分析时调用词法分析器的这个方法来得到下一个token,所以词法分析器并不是一次性遍历所有源代码,而是采取这种on-demand的方式:只在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&,属性可以是多样的,例如表示数字的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,其中digit表示单个数字(这里说正则表达式并不完全和实现的正则引擎所识别的正则表达式等价,这里只是为了描述问题而已)。然而像c语言的的多行注释,用正则表达式来描述就比较麻烦,此时更倾向于直接用有穷自动机(finite automaton)来描述,因为用它来描述非常直观且很容易。有穷自动机(finite automata)  有穷自动机也称为有限状态机,状态在输入字符的作用下发生迁移,因此,它可以用来识别token,也因此,我们只要画得出fa,之后再用代码实现这个fa,那词法分析器也就差不多弄好了。有穷自动机分确定性(dfa)和非确定性(nfa)两种,如果对于同一个输入,只会有一个确定的状态迁移路线,也就是只有一个确定的&下一状态&,那就是dfa,否则就是nfa。因为dfa对于同一个输入只有一个确定的下一状态,所以词法分析器当然优先采用它,那nfa拿来干嘛用呢?nfa用来做描述用时更方便,我们可以非常迅速地画出一个识别token的nfa图,但要想直接画出个dfa那要动不少脑筋。根据正则表达式构建nfa  如上所述,nfa更容易画出,那我们就先研究nfa,在定义token时,我们可以用正则表达式来描述它,因为正则表达式干这行很合适,例如一个digit+就可以描述数字,多方便。因此,我们需要根据正则表达式画出与之等价的nfa。而这个算法非常简单,就是tompson&s 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可以无条件地转移到s2,那s1和s2自然可以合并起来作为dfa中的一个状态,于是nfa转dfa的算法也就好理解了。但首先得先定义下空闭包(?-closure):?-closure: 状态s的?-closure即s经过?转换可以到达的状态集,s的?-closure永远都会包含s自身,《》()。一个状态集的?-closure即该状态集中各状态的?-closure的集合。nfa确定化算法(subset construction):从开始状态开始,计算它的?-closure,得到状态集set1,然后考察set1在某个输入a的作用下会迁移到哪些状态,把这些状态集中到一起,再求这个集合的?-closure,得到set2,这样我们就可以画两个圈,一个标上set1,另一个标上set2,然后画条从set1到set2的线把这两圆连起来,在线上标上a,这样dfa的一部分就画好了,然后我们再考察set1在其它输入下可以达到的状态集的?-closure,同样画圈连线,以此类推,最后的时候,把包含了原nfa中终结状态(final state或acceptin state)的dfa状态(在转换后的dfa中,每个状态都是包含了一个或多个原nfa中的状态)标记为终结状态。最小化dfa状态数  由一个正则表达式,可以构建出一个等价的nfa,然后nfa又可以确定化成dfa,似乎到此事情搞完了,但事实(有时也可以显然地发现),最终构成的这dfa似乎有些复杂,有些状态好像很冗余,呃,是的,dfa是可以最小化的。最小化dfa状态数算法的思想是,在开始时,假设是最完美的情况,整个dfa只有两个状态,一个终结状态,一个开始(难道不能有只有一种状态的情况么?如果原dfa中存在非终结状态,当然就不能,非终结态怎么可以和终结态合并!),当然,这是假设,不是真的,所以这个算法,就是在这个完美的假设下,对假设进一步考察,如果发现有些状态不能合并,那就分出来吧,这样重复考察,直到发现没有状态会不能合并时,就做完了,此时不也正是最优解么。嗯,就是这个,所以一开始,我们把所有非终结状态用一个袋子包起来,看成是一个状态,把所有终结状态也用另一袋子包起来,也看成是一个状态,注意,别把原dfa中各状态间的连线给扯断了。然后,我们抽出其中一个袋子,考察其中的各个状态,我们准备好所有的可能输入,然后逐个拿出来测试,如果该袋子中的所有状态在某个输入a下达到的状态正好都在这个袋子中,那就说明,这个袋子中的这些状态&在目前看来&是可以合并的,也就是说,如果在所有的可能输入的作用下,袋子中的状态达到的新状态正好也都是这个袋子中的状态,那它们就可以合并。而如果,在某个输入a下,袋子中的一部分状态会转移到同一袋子中的其它状态,而有几个叛徒,假设是s1和s2,竟然在输入a下会迁移到其它袋子中的状态,那就说明s1和s2是不可以和其它转移到同一袋子中的状态合并的,于是,我们就把s1和s2装成一个新袋子,从原袋子中分出来,当然,现在还是假设s1和s2可以合并,所以才把它们装一起,究竟真的可不可以合并呆会还要再考察。考察完输入a,还要接着考察其它的可能输入。如果在考察完一个袋子后,发现所有状态在a输入下都可以转移到本袋子中的状态,那么最后的dfa它们就被合并成一个状态,并且在a输入下,它有一个到自身的状态迁移。
实现词法分析器  对于一个token,比如用来表示数字的token:num,我们可以用正则表达式描述它,然后画出nfa,再将nfa转化成dfa,再最小化dfa的状态,但是我们的词法分析器是不是分析一个token,所以我们要把所有类型的token的dfa合并成一个dfa,这样,这个dfa也就可以识别语言的所有token了,如果在某一连串的输入下,dfa达不到终结状态,那就说明源代码有错误了。我用c#实现了一个用于《compiler construction: principles and practice》中tiny语言的词法分析器,tiny语言有关键字:if, then, else, end, repeat, until, read, write,有操作符+,-,*,/,=,&,(,),;,:=(全角逗号不算,是文章的分隔符)这10个,然后其余的token有number (一或多个数字)和identifier(一或多个字母),其dfa如下图:上面这张图和《编译原理及实践》中的一样,其中的带中括号的输入说明这个输入是lookahead的,在匹配成功后是要重新放回输入流中的,比如识别num时,如果发现个非digit的,那就说明识别到了一个number,但是最后识别的那个非digit字符是要放回输入流的,因为它要留着下一次识别。其中从start到done的那个other,指所有非white space,非{,非letter,非digit,也非:的字符,它有可能是合法的+, *, /这些,也可能是不合法的其它输入,如#号。因此,done这个状态只是说本次gettoken已经结束,状态机是有可能因为不合法的输入而进入done状态的。究竟从start到done是因为合法的,如+号导致的,还是由不合法的如#号导致的,将在代码中实现判断,但可以肯定的是,不管是+号还是#号作用于start状态,都会进入done状态。
词法分析小结2    〖预览〗
   开展保持共产党员先进性教育活动分析评议阶段总结 自3月24日,我处保持共产党员先进性教育活动从学习动员阶段转入分析评议阶段以来,在县委保持共产党员先进性教育活动办公室和县委先进性教育活动第五督导组的正确领导和大力指导下,结合本处工作实际,紧紧围绕“找准抓住突出问题”,对照《党章》规定的党员义务和党员的基本条件及管理处形成的“两个具体”的成果,紧密联系个人实际,通过“群众提、组织点、自己找、相互帮”和“下级评上级、群众评党员、基层评机关、支部评党员、党员自己评”等多种形式,组织党员广泛听取意见,深刻进行自我剖析,自觉接受评议,开展批评与自我批评。在一个多月的分析评议阶段,管理处机关……   你还没注册?或者没有登录?这篇要求至少是本站正式会员或投稿会员才能阅读! 如果你想成为正式会员,请点此注册,并点此阅读会员需知通过汇款或发表文章升级为正式会员吧! 如果你已经成为正式会员,请点此登录吧! 一年仅需50元,站内文章随你看。总有您最需要的时候和最需要的一篇,任何一篇好文章的价值都超过50元! 如果您需要阅读本站文章,但暂时不想成为正式会员,您也可以点此阅读投稿需知,在本站注册并发表五篇以上原创文章(谢绝网上摘抄),一经审核通过,即可成为本站投稿会员,以计点方式阅读本站文章!!
……【】词法分析小结3    〖预览〗
众所周知,统计分析写作是为了制作统计分析文章。在统计部门,统计分析文章则称为统计分析报告。那么,统计分析报告的概念是什么呢?   1、统计分析报告的概念和特点1.统计分析报告的概念统计分析报告是根据统计学的原理和方法,运用大量统计数据来反映、研究和分析社会经济活动的现状、成因、本质和规律,并做出结论,提出解决问题办法的一种统计应用文体。对统计分析报告概念的理解应注意以下四点:(一)统计分析是统计分析报告写作的前提和基础。要写好统计分析报告,必须首先做好统计分析。(二)统计分析报告要遵循统计学的基本原理和方法,主要是社会经济统计和数理统计的原理和方法等。(三)统计分析报告的基本特色是运用大量的统计数据。无论是通过研究去认识事物,或通过反映去表现事物,都是要运用统计数据。统计部门这一巨大的&数据库&为统计分析提供了丰富的资料来源,写统计分析报告就应充分运用这个资料源,而且要用好、用活。运用大量的统计数据,这是统计分析报告与其他文体最明显的区别。可以说,没有统计数字的运用,就不成其为统计分析报告。(四)作为一种文体,统计分析报告  既要遵循一般文章写作的普遍规律和要求,同时,在写作格式、写作方法、数据运用等方面也有自身的特点和要求。2.统计分析报告的特点(一)运用一整套统计特有的科学分析方法(如对比……【】词法分析小结4    〖预览〗
各部门销售额、变动费、固定费分析表&  &&部部部部全 公 司销外&销& 金& 额&&&&&售内销& 金& 额&&&&&额销售总& 额??外& 部& 采& 购&&&&&变公& 司& 内& 采& 购&&&&&动其& 他& 变& 动& 费&&&&&费变动& 费& 计 ‚&&&&&边际&利& 益ƒ (? ―‚ )?管人& 事& 费&&&&&部理政& 策& 费&&&&&门费&营& 业& 费&n……【】词法分析小结5    〖预览〗□& 总&&& 则&&& 第一条& 为了规范公司的财务分析内容和格式,全面揭示经济活动及其效果,切实发挥财务分析在企业管理中的作用,特制定本规定。&&& 第二条& 本规定适应于本集团的所有核算单位,包括独立核算单位和单独核算单位。&&& □& 主要经济指标完成情况&&& 第三条& 各项指标数值的计算填列。&&& (一)各指标的计算口径和格式按附表一和企业财务分析表进行。&&& (二)表中的计划数指各公司每年度的承包指标数。&&& (三)工业企业应揭示工业产品销售率及上年同期对比的增减水平。&&& (四)投资收益率指标只限于年度分析填列。&&& □& 财务状况分析&&& 第四条& 生产经营状况分析&&& 从产量、产值、质量及销售等方面对公司本期的生产经营活动作一简单评价并与上年同期水平作一对比说明。……【】词法分析小结6    〖预览〗
根据中共湖南省委《关于开展深入学习实践科学发展观活动的实施意见》(湘发[2010]10号)、《中共邵阳市委关于开展深入学习实践科学发展观活动的实施意见》(邵市发[2010]5号)的精神,按照《邵阳市开展第一批深入学习实践科学发展观活动的实施方案》(邵学组发[2010]2号)的要求,邵阳市煤炭局全面完成了学习调研阶段的工作任务,现经市委深入学习实践科学发展观活动领导小组办公室第七指导检查组的检查验收,批准转入了分析检查阶段,此阶段工作于日开始至6月30日前完成。为确保此阶段工作取得实效,现就做好分析检查阶段工作安排如下:一、进一步提高思想认识,明确阶段目标任务,认真部署分析检查工作 对第一阶段工作进行认真总结,分析存在的问题和不足,认真查漏补缺,为顺利转入分析检查阶段打下坚实基础。在分析检查阶段,继续抓好学习,将学习贯穿于整个活动的始终,继续深化对科学发展观的认识,更新思想观念、总结经验得失,客观地看待和解决以往工作中存在的不足,就如何按照“党员干部受教育、科学发展上水平、职工群众得实惠、系统工作创新高”的总体要求,围绕 “安全生产”、“系统稳定”、“改革改制”三条工作主线,突出“五个强力推进”;强力推进整合技改扩能,按要求完成整合技改扩能任务;强力推进矿井安全质量标准化,以点带面抓好示范工程;强力推进……【】词法分析小结7    〖预览〗一般管理费预算差分析表  部门: 月份: 年 月编 号项 目当月 差异累计 差异原 因 分 析  预 算实 绩差 异预 算实 绩差 异 1薪& 津       2员工福利费       3福利保健费       4教育训练费       5工& 会会费       6经营会计费       7旅& 费       8交& 通& 费       9广告宣传费       10车辆维修费       11修& 缮& 费       12地& 租& 房& 费       13事物用品费       14通& 信& 费       15水电瓦斯费       16税& 捐       17消& 耗& 品费       18捐& 款       19交& 际& 费       20保& 险& 费       21杂& 费       22折旧& 费       23        24        25        主 要科 目 别的 改善 对策&&&&……【】词法分析小结8    〖预览〗
  〔词法分析小结〕
  词法分析小结所属栏目:〖〗
  〖〗链接地址:
  总结提供的词法分析小结由网友原创或转发,若词法分析小结侵犯了您的权益,请与本站联系,谢谢!
上一篇范文: 下一篇范文:
词法分析小结相关范文导读:实验一编写词法分析程序,1实验类型,设计型实验,2学时完成程序的编写、调试、测试)2实验目的,通过设计、调试词法分析程序,掌握词法分析程序的设计工具,会确定词法分析程序的输出形式及标识符与关键字的区分方法,提高词法分析方法的实践能力,词法分析对源程序从头到尾扫描一次,识别符合程序设计语言词法规则的单词并输出,为后续的语法分析和语义提供输入,词法分析程序的一般设计方案如下:,1、用正则表达式或正
编写词法分析程序
1 实验类型
设计型实验,4学时(2学时完成DFA的设计;2学时完成程序的编写、调试、测试) 2 实验目的
通过设计、调试词法分析程序,掌握词法分析程序的设计工具,即有穷自动机,进一步理解自动机理论;掌握正则文法和正则表达式转换成有穷自动机的方法及有穷自动机实现的方法;会确定词法分析程序的输出形式及标识符与关键字的区分方法;加深对课堂教学的理解,提高词法分析方法的实践能力。
3 背景知识
词法分析对源程序从头到尾扫描一次,识别符合程序设计语言词法规则的单词并输出,为后续的语法分析和语义提供输入。词法分析程序的一般设计方案如下:
1、用正则表达式或正则文法描述程序设计语言的词法规则,通常采用正则表达式;一个正则表达式对应一条词法规则。
2、为每个正则表达式构造一个NFA,用来识别正则表达式描述的单词。
3、将多个NFA合并为一个NFA。
4、将NFA转换成等价的DFA。
5、最小化DFA。
6、确定单词的输出形式。
7、化简后的DFA+单词输出形式?构造词法分析程序
从上述设计方案可知,要构造词法分析程序,必须掌握以下三个知识点:文法、正则表达式和有穷自动机FA。
3.1文法的形式定义
一个形式文法 G 是下述元素构成的一个四元组(VN ,VT ,P,S )。其中:
1、 VT:非空有限的终结符号集;终结符:一个语言不可再分的基本符号。
2、 VN: 非空有限的非终结符号集;非终结符:一个非终结符是一个类(集合)记号,
而不是一个体记号。
3、S:开始符号或识别符号,S∈ VN ;
4、P:产生式规则集;产生式形如α → β或α ::= β的表达式,其中α为左部,β为右部。α∈(VT∪VN)+且至少含一个VN;β∈(VT∪VN)*。
5、VT∩VN =Ф。
3.2 正则表达式的形式定义
仅由字母表A={ai i=1,2,…,k}上的正则表达式α所组成的语言称为正则集,记为L(α )。正则集的形式化描述式称为正则表达式。字母表∑上的正则表达式和正则集递归定义如下:
1、∑ 中的a是正则表达式,其正则集为{a};
2、空串ε是∑上的正则表达式,其正则集为{ε};
3、空集Φ是∑上的正则表达式,其正则集为Φ ;
4、如果e1和e2是∑上的正则表达式,它们所表示的正则集分别为L(e1)与L(e2) ,则:
e1|e2也是∑上的正则表达式,其正则集为L(e1|e2)=L(e1) ∪L(e2)。
e1e2也是∑上的正则表达式,其正则集为L(e1e2)=L(e1) L(e2)。
(e1)* 也是∑上的正则表达式,其正则集为L((e1)* )=L(e1)*。
3.3有穷自动机定义
确定的有穷自动机DFA
M=(Q ,∑ ,t ,q0 ,F),其中:
1、Q ―有穷非空状态集;
2、∑ ―有穷输入字母表;
3、t ― 映射Q ? ∑ → Q(单值映射,下态确定);
4、q0 ―q0∈Q,称为开始状态(唯一);
5、F ―非空终止状态集;
非确定有穷自动机(NFA M) 定义与DFA M相比可以:允许ε弧;t多值的,即t(s, a)无法唯一地确定下一状态。
对于FA,最重要的是给出其映射。可以由状态转换矩阵,状态图或者直接给出。
1、直接给出:t(q ,a)=q’;
2、状态转换矩阵:状态为表列,字母为表行;
3、状态图:是由一组矢线连接的有穷个结点所组成的有向图。每一结点均代表在识别或分析过程中扫描器所处的状态。它是设计和实现扫描器的一种有效工具,是有穷自动机的
直观图示。
对任何两个有穷的自动机M1和M2,若有L(M1)=L(M2),则称M1与M2等价。可通过造表法求解NFA的等价DFA(NFA的确定化方法)。
NFA的确定化方法算法(表格法):
1、画一张具有n+1列的矩阵表P,n = NFA中出现的符号个数。各应列的名字分别为I,
Ia,Ib,IC,…,其中,a,b,c…是NFA中出的所有字符。
2、令I = ε-CLOSURE(S0)。S0:NFA的初态;ε-CLOSURE(S0) = S0∪Sε,Sε= {s| 从
S0出发经过任意条ε弧可达s}
3、 把I填入P的I列
4、计算Ia,Ib,IC,…,并填入相应的列。
Ia = ε-CLOSURE(Ja),Ja = {s | 从I的某一状态出发经过一条a弧可到s}
5、若J∈{ Ia,Ib,IC,…}未在I列出现,则令I = J。并重复3~5直列所有的J均在I
列中出现过。
6、把P中的各子集作为状态,并重新命名。
7、确定终态和初态:
初态:I列的第一个元素。
终态:含有原NFA任一终态的子集。
8、画出相应的DFA
3.4 正则文法到有穷自动机的转换步骤:
? Q,其中S?q0;
3、A中增加新状态Z作为终态;
? t(U,a)=V;
a∈VT或 a=ε,V∈VN 。
5、U →a (a∈VT)
? t(U,a)=Z。
3.5 正则表达式到有穷自动机的转换步骤:
对于任意的一个正则表达式e,从
按照变换规则,逐步扩弧、扩结,直到转换图上所有的弧上都是∑中的单个符号为止。对于引入的每一个新状态,应该赋予一个独有的名字。其变换规则如下:
3.6 单词输出
对于一个语言来说,如何对其单词进行分类和编码并没有一个原则性的规定,而主要取决于处理上的方便。
4 实验内容
编写TEST语言的词法分析程序,并完成词法分析程序的编程与调试。TEST 语言的词法规则如下:
TEST语言的词法规则如下:
1、标识符:字母打头,后接任意字母或数字,
2、保留字:标识符的子集,包括:if,else,for,while,do, int,write,read,
3、无符号整数:由数字组成,但最高位不能为0,允许一位的0,
4、分界符:(、)、;、{、}
5、运算符:+、-、*、/、=、&、&、&=、&=、!=、==
6、注释符:/*
5 实验要求
1. 根据TEST语言的词法规则,分别写出每条规则的正则文法或者正则表达式;
2. 将每一个正则文法或者正则表达式转换为NFA;
3. 将多个NFA合并后进行确定化并化简;
4. 根据化简后的DFA画出流程图;
5. 确定单词分类、单词输出方案;
6. 编写词法分析程序;
7. 对下面的TEST语言源程序进行词法分析,将合法单词存入lex.txt,并报告词法错误及
其位置。注:不能修改源程序
包含总结汇报、人文社科、经管营销、专业文献、IT计算机、外语学习、办公文档、旅游景点、行业论文、考试资料以及实验一
编写词法分析程序等内容。本文共2页
相关内容搜索问题对人有帮助,内容完整,我也想知道答案
问题没有实际价值,缺少关键内容,没有改进余地
这两天看了编译原理的语法分析,回过头去再看词法分析.里面涉及到了正则表达式,NFA 和 DFA 还有词法分析器的生成器,虎书中说这个生成器可以用来将增则表达式转化为DFA,那NFA的概念还有什么意义呢?
是不是说如果我要手工写这个词法生成器的时候, 从正则表达式到NFA 再人为改成DFA ,这是人的思考的过程, 然后如果用生成器的话这个过程是可以省略的. 还是说怎么样
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
目前大部分词法分析器仍然靠人工来写,实现方式也各有不同,你甚至可以直接通过正则来做词法分析,只要能得到你想要的结果即可。当然,虽然这种方式在处理歧义和运行效率上没有根据DFA实现的分析器效果好。
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
可以把NFA想成一种中间形式, 并不对应实际的代码
DFA和命令式语言的对应关系更直接, 因为跑程序的机器本身就是D (一个输入对应一个结果)的
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
建议看看这个:
同步到新浪微博
分享到微博?
Hi,欢迎来到 SegmentFault 技术社区!⊙▽⊙ 在这里,你可以提出编程相关的疑惑,关注感兴趣的问题,对认可的回答投赞同票;大家会帮你解决编程的问题,和你探讨技术更新,为你的回答投上赞同票。
明天提醒我
关闭理由:
删除理由:
忽略理由:
推广(招聘、广告、SEO 等)方面的内容
与已有问题重复(请编辑该提问指向已有相同问题)
答非所问,不符合答题要求
宜作评论而非答案
带有人身攻击、辱骂、仇恨等违反条款的内容
无法获得确切结果的问题
非开发直接相关的问题
非技术提问的讨论型问题
其他原因(请补充说明)
我要该,理由是:
扫扫下载 App}

我要回帖

更多关于 加压包扎止血法适用于 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信