- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
* 六、编写词法分析程序 根据画出的状态转换图(识别单词)构造词法分析程序,每个状态对应一段程序,完成到达此状态的工作;词法分析程序的控制程序模拟状态转换图的状态转换。 在识别标识符的过程中,要拼写出来,并和保留字区别开来。 * = 8 0 ; 0 1 3 4 2 5 6 e n i L 字母 字母 数字 数字 = ; 0 字母 1 2 数字 4 5 6 3 L i n e = 8 0 ; ? id , ‘Line’? ? = , ?? ? ? num, ‘80’? ? ;, ?? ? 数字 数字 字母 字母 字母 1 1 = = 0 0 0 = 3 ; ; ; 1 输入 输出 有限控制器 * * 本 章 要 点 词法分析程序是编译第一阶段的工作,它读入字符流的源程序,按照词法规则识别单词,并给出它们的种别和属性——输出二元组序列。交由语法分析程序接下去。 词法分析器的作用和接口,用高级语言编写词法分析器等内容,它们与词法分析器的实现有关。 本章讲述了词法分析程序设计原则,并介绍了分别作为正规集的描述机制和识别机制的正规式和有穷动机。 * 本 章 要 点 高级语言的单词组成一个3型语言。 3型语言可以用RE、RG、FA描述。 掌握下面涉及的一些概念,它们之间转换的技巧、方法或算法。 非形式描述的语言 ? 正规式 正规式 ? NFA 非形式描述的语言 ? NFA NFA ? DFA DFA ? 最简DFA 非形式描述的语言 ? DFA(或最简DFA) * 本 章 要 点 词法分析程序的编写: 用正规式编写词法,设置单词种别和属性 从单词的描述出发,逐步实现词法分析程序 正规表达式 ↓ 正规文法 ↓ 状态图 ↓ 识别过程的实现算法 ↓ 程序实现和测试 * 词法分析技术的其他应用: 查询语言,信息检索系统 识别由正规式描述的字符串 命令语言 识别命令格式 报文的处理 识别报文格式 应用范围: 数据格式可以用三型文法描述。 * 4.9 LEX语言 一组单词的正规式及其相应的语义动作叫做LEX语言。 它是用来描述词法分析程序的,因此通过LEX编译程序便可生成词法分析程序。 LEX编译程序 LEX 源程序 词法 分析器L 词法分析器L 输入串 单词 符号串 * LEX语言的组成 LEX源程序主要包括两部分,正规式的辅助定义和识别规则。 辅助定义是如下形式的LEX语句: D1?R1 D2?R2 …… Dn?Rn 每个Ri是一个正规式, Di是代表这个正规式的简名。 限定:在Ri中只许出现字母表Σ中的字符和前面已定义的简名D1,D2,…,Di-1,不得出现未定义的的简名。 * 语义动作的组成 当为每个正规式配上相应的语义规则后便形成LEX语句形式: P1 {A1} P2 {A2} … … Pm {Am} Pi为正规式,表明了这种词法分析程序只能识别具有句型为P1,P2,…,Pm的单词符号。 {Ai}为对应的语义子程序,式一段子程序,当识别出句型为Pi的单词之后,所应采取的动作,最基本的是返回Pi的二元式形式。 * 词法分析程序的控制程序的约定: 最长子串匹配原则 逐一扫描输入串的每一个字符,寻找一个最长子串匹配某个Pi,把这个串放入TOKEN缓冲区,然后调用相应Ai子程序,输出该单词的二元式交给语法分析程序处理。 优先原则 在LEX源程序中,语句的前后顺序是有意义的,认为排在前面的语句优先级高。 * LEX编译程序的构造 LEX编译程序旨在把一个LEX源程序改造成一个词法分析程序L。 LEX编译程序的生成过程: (1)对每个正规式Pi构造一个相应的NFA Mi; (2)引进一个初态X,通过弧,把这些NFA Mi连成一个新的NFA; (3)用子集法把它改造成一个等价的DFA。 * 1. ∑={a,b},为下面所描述的串写正规式: 以ab结尾的所有串 偶数个b但不包含a的所有串 偶数个b、任意个a的所有串 只包含一个a的所有串 包含ab子串的所有串 不包含ab子串的所有串 练 习 (a|b)*ab (bb)* (a*ba*ba*)* b*ab* (a|b)*ab(a|b)* b*a* * 2. ∑={0,1},请描述下面正规式所定义的串: 0*(100*)*0* (0|1)*(00|11)(0|1)* 1(0|1)*0 答案: 每个1至少有一个0跟在后边的串 所有含两个相继的0或两个相继的1的串 必须以1开头、以0结尾的串 * 3. 给出下列文法所对应的正规式: S?0A|1B A?1S|1 B?0S|0 答案: 解方程组S的解,将A、B代入S得: S=01S|01|10S|1=(01|10)S|(01|10) 所以:S=(01|10)*(01|10) * 4. 构造有穷自动机:
文档评论(0)