- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
DFA M转换成正规文法的规则 已知DFA为M =(S,Σ, f, s0, Z) (1) 若s0不属于Z时,相应的正规文法G=(Σ,S,s0,ξ): 对任何a ∈Σ,A,B ∈ S,若有f(A,a)=B,则: 当B不属于Z时,在ξ中添加产生式 A → aB; 当B属于Z时,在ξ中添加产生式 A → aB∣a 。 (2) 若s0属于Z时,我们在上述文法G中添加新的非终结符s0’和产生式s0’→ s0∣ε,并用s0’代替s0作开始符。 2.2.3 正规表达式与上下文无关文法 1.正规表达式到上下文无关文法的转换 正规表达式所描述的语言结构均可以用上下文无关文法描述,反之则不一定。 由正规表达式构造上下文无关文法的一种方法如下: (1) 构造正规表达式的NFA; (2) 若0为初始状态,则A0为开始符号; (3) 如果存在映射关系f(i, a)= j,则定义产生式 Ai →aAj; (4) 如果存在映射关系f(i, ε)= j,则定义产生式 Ai →Aj; (5) 若i为终态,则定义产生式 Ai →ε。 例3.21 用上下文无关文法描述正规表达式 (a∣b)*abb。 [解答] 首先构造识别正规表达式(a∣b)*abb的NFA M如下图所示。 由构造上下文无关文法的方法得到上下文无关文法G[A0]如下:A0→aA0∣bA0∣aA1 A1→bA2 A2→bA3 A3→ε 图3–31 例3.21的NFA M 事实上,由正规表达式构造上下文无关文法还可以采用另一种方法,即通过分析正规表达式的特性凭经验直接构造。 如可把(a∣b)*abb看作由(a∣b)*和abb两部分组成,第一部分是由0个或若干个a和b组成的字符串,而第二部分则仅由abb字符串组成,由此得到上下文无关文法G[A0]如下: G[A0]: ?A→HT H→aH∣bH∣ε T→abb 2.正规表达式与上下文无关文法描述的对象 上下文无关文法既可以描述程序语言的语法,又可以描述程序语言的词法,但基于下述原因,应采用正规表达式描述词法: (1) 词法规则简单,采用正规表达式已足以描述; (2) 正规表达式的表示比上下文无关文法更加简洁、直观和易于理解; (3) 有限自动机的构造比下推自动机简单且分析效率高。 贯穿词法分析和语法分析始终如一的思想是: 语言的描述和语言的识别是表示一个语言的两个不同的侧面,二者缺一不可。 用正规表达式和上下文无关文法描述语言时的识别方法(即自动机)不同。 正规表达式适合于描述线性结构,如标识符、关键字和注释等; 上下文无关文法则适合于描述具有嵌套(层次)性质的非线性结构,如不同结构的语句if-else、while等。 3.5 词法分析器的自动生成 由于各种不同的高级程序语言中单词的总体结构大致相同,基本上都可用一组正规表达式描述,因而人们希望构造这样的自动生成系统: 只要给出某高级语言各类单词词法结构的一组正规表达式以及识别各类单词时词法分析程序应采取的语义动作,该系统便可自动产生此高级程序语言的词法分析程序。 所生成的词法分析程序的作用如同一台有限自动机,可以用来识别和分析单词符号。 正规表达式与有限自动机的理论研究产生了自动生成词法分析程序的技术和工具。 LEX是由美国Bell实验室的M.Lesk和Schmidt于1975年用C语言研制的一个词法分析程序的自动生成工具。 对任何高级程序语言,用户必须用正规表达式描述该语言的各个词法类(这一描述称为LEX的源程序),LEX就可以自动生成该
文档评论(0)