实验Yacc与Lex快速门.pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
实验Yacc与Lex快速门

Lex与Yacc 快速入门 授课教师:程细柱 系别:计算机科学系 Lex 和 Yacc 介绍 lex 和 yacc 是什么 Lex :Lexical Analyzar, 是一种生成扫描器的工具。 Yacc :Yet Another Compiler Compiler lex 和 yacc 是自动编译代码的工具,适合于解析简单的语言。 lex 和 yacc 是一对配对工具。lex 将文件分解为成组的“记号(tokens) ”,大体上类似于单词。yacc 接受成组的记号,并将它们装配为高层次的结构,类似于句子。 yacc 设计用来处理 lex 的输出,不过您也可以编写自己的代码来完成此任务。同样,lex 的输出很大程度上设计用于为某类解析器提供数据。 实验工具简介总揽(1/2) LEX YACC 代码产生支撑函数 实验工具简介总揽(2/2) 实验工具简介-LEX Lex:一个词汇分析器生成器 。 当 Lex 接收到文件或文本形式的输入时,它试图将文本与常规表达式进行匹配。它一次读入一个输入字符,直到找到一个匹配的模式。如果能够找到一个匹配的模式,Lex 就执行相关的动作(可能包括返回一个标记)。另一方面,如果没有可以匹配的常规表达式,将会停止进一步的处理,Lex 将显示一个错误消息。 程序有三个部分,用 %% 符号隔开。第一部分和最后一个部分是普通而古老的 C 代码。中间是有趣的一部分。它由一系列规则构成,lex 将这些规则翻译为词汇分析器。每一个规则依次包含一个正则表达式以及该正则表达式得到匹配时要运行的一些代码。任何没有得到匹配的文本则简单地拷贝到标准输出。 Lex 的常规表达式(1) 字符 含义 A-Z, 0-9, a-z 构成了部分模式的字符和数字。 . 匹配任意字符,除了 \n。 - 用来指定范围。例如:A-Z 指从 A 到 Z 之间的所有字符。 [ ] 一个字符集合。匹配括号内的 任意 字符。如果第一个字符是 ^ 那么它表示否定模式。例如:[abC] 匹配 a, b 和 C中的任何一个。 * 匹配 0个或者多个上述的模式。 + 匹配 1个或者多个上述模式。 ? 匹配 0个或1个上述模式。 $ 作为模式的最后一个字符匹配一行的结尾。 Lex 的常规表达式(2) 字符 含义 { } 指出一个模式可能出现的次数。 例如:A{1,3} 表示 A 可能出现1次或3次。 \ 用来转义元字符。同样用来覆盖字符在此表中定义的特殊意义,只取字符的本意。 ^ 否定。 | 表达式间的逻辑或。 一些符号 字符的字面含义。元字符具有。 / 向前匹配。如果在匹配的模版中的“/”后跟有后续表达式,只匹配模版中“/”前面的部分。如:如果输入 A01,那么在模版 A0/1 中的 A0 是匹配的。 ( ) 将一系列常规表达式分组。 常规表达式举例 常规表达式 含义 joke[rs] 匹配 jokes 或 joker。 A{1,2}shis+ 匹配 AAshis, Ashis, Ashiss, Ashisss。 (A[b-e])+ 匹配在 A 出现位置后跟随的从 b 到 e 的所有字符中的 1 个或 多个。 标记声明举例 标记 相关表达式 含义 数字(number) ([0-9])+ 1个或多个数字 字符(chars) [A-Za-z] 任意字符 空格(blank) 一个空格 字(word) (chars)+ 1个或多个 chars 变量(variable) (字符)+(数字)*(字符)*(数字)* Lex 编程 Lex 编程可以分为三步: 以 Lex 可以理解的格式指定模式相关的动作。 在这一文件上运行 Lex,生成扫描器的 C 代码。 编译和链接 C 代码,生成可执行的扫描器。 Lex 的输入格式 一个 Lex 程序分为三个段: 第一段:是 C 和 Lex 的全局声明 第二段:包括模式(C 代码) 第三段:是补充的 C 函数。 这些段以%%来分界。 (1)C 和 Lex 的全局声明 这一段中我们可以增加 C 变量声明。 %{ int wordCount = 0; /*保存统计出来的字数 */ %} chars [A-Za-z] numbers ([0-9])+ delim [ \n\t] whitespace {delim}+ words {chars}+ %% 两个百分号标记指出了 Lex 程序中这一段的结束和三段中第二段的开始。 (2)Lex 的模式匹配规则 {words} { wordCount++; /* increase the

文档评论(0)

181****7127 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档