yacc 与 lex 入门案例教程.docVIP

  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 入门案例教程

使用 yacc 和 lex 编写文本分析器 简介:? 本文将研究使用 lex/flex 和 yacc/bison 工具构建分析器所需的步骤。首先构建一个简单的计算器,然后深入地研究如何采用相同的原则进行文本分析。分析文本,即理解和提取文本中的关键部分,是许多应用程序中一个重要的部分。在 UNIX? 中,许多操作系统组成部分都依赖于文本分析,从用来与系统进行交互的 shell,到诸如 awk or Perl 等各种常用的工具和命令,再到用来构建软件和应用程序的 C 编译器。您可以在 UNIX 应用程序(以及其他的应用程序)中使用分析器来构建简单的配置分析器,甚至构建最终的目标:您自己的编程语言。 开始之前 UNIX? 程序员常常发现他们需要去理解文本和其他一些具有灵活的标准化格式的结构。通过使用 lex 和 yacc 工具,您可以构建一个分析引擎,根据特定的规则来处理文本。然后,可以将它集成到您的应用程序中以完成各项工作,从配置分析到构建您自己的编程语言。在学习了本教程之后,您将了解如何定义词法元素、编写 yacc 规则,并使用相应的规则机制来构建和定义各种不同的分析引擎和应用程序。 关于本教程 在 UNIX 中,有许多用来理解和提取文本的方法。您可以使用 grep、awk、Perl 和其他的解决方案。但有的时候,您需要理解和提取结构化的但格式不受限制的数据。在这种情况下,UNIX lex 和 yacc 工具就很有用处了。前面提到的那些工具,如 awk、Perl 以及 shell 和许多其他的编程语言,都使用 lex 和 yacc 来生成分析应用程序以分析和理解文本,并将其转换为所需的信息或数据结构。 Lex 是一种词法分析工具,它可以用来从源文本识别特定结构的文本字符串。Yacc 是一种语法分析器,它可以读取文本并用来将单词序列转换为便于处理的结构化的格式。 在本教程中,首先您将研究如何使用 lex 和 yacc 来构建一个计算器。使用该计算器作为示例,您将进一步研究 lex 和 yacc 系统生成的输出和信息,并学习如何使用它来分析其他类型的信息。 先决条件 要使用在本教程中的示例,您需要使用到下列工具: Lex:这个工具是大多数 UNIX 操作系统的标准组件。GNU flex 工具提供了相同的功能。 Yacc:这个工具是大多数 UNIX 操作系统的标准组件。GNU bison 工具提供了相同的功能。 C 编译器:任何标准的 C 编译器都可以,其中包括 Gnu CC。 Make 工具:这个工具是使用示例 Makefile 来简化构建过程所必需的。 可以从 GNU Web 站点或本地的 GNU 镜像站点下载 GNU 工具。 使用 lex 进行词法分析 编写文本分析器的第一步是要能够识别所读取的内容。有许多不同的方法可以完成这项任务,但是最简单的方法是使用 lex,它是将输入信息转换为一系列标记的工具。 什么是词法分析? 当使用编程语言编写程序或在命令行中输入命令时,您是否想过究竟执行了什么操作将您输入的内容转换为一组指令呢? 这个处理过程非常简单,却又相当复杂。它很复杂,这是因为对于可能输入的信息,表面上看起来似乎存在无限种可能的组合和序列。例如,要使用 Perl 语言遍历一个哈希表,您可以使用如清单 1 所示的序列。 清单 1. 在 Perl 中遍历一个哈希表 foreach $key (keys %hash) { ... } 其中的每一项都是有意义的,虽然方式有所不同,这正是该处理过程的简单明了之处。清单 1 中所示的表达式存在一个对应的结构,也就是说,与人类语言一样,编程语言中也存在着特定的规则。因此,如果将输入分解为您所看到的和该信息结构的组合,那么对该内容的分析过程则相当简单。 要理解提供给文本分析应用程序的信息,通常有两个阶段。第一个阶段是识别输入的或提供给应用程序的内容是什么。您必须能够从输入源中识别关键字、短语或字符序列,以便能够确定对其进行何种处理。第二个处理阶段是理解该信息的结构,即语法,以便对输入进行验证和操作。有关语法的一个很好的示例是,大多数编程语言中圆括号的使用。很明显,下面的表达式是错误的: { function)( { 其中,大括号不匹配,而圆括号的出现顺序错误。为了让分析器理解和识别表达式,那么分析器必须知道正确的序列,以及匹配该序列后应该进行何种操作。 词法分析首先进行识别输入数据的处理,并且可以使用 lex 工具来完成该处理过程。 lex 工具 lex 工具(或 GNU 工具 flex)使用一个配置文件来生成相应的 C 源代码,然后,可以用它来创建独立的应用程序,或者在您自己的应用程序中使用它。配置文件定义了需要在待分析的文件中查找

文档评论(0)

almm118 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档