yacc 与 lex 编写文本分析器 1.docVIP

  • 27
  • 0
  • 约1.11万字
  • 约 16页
  • 2018-06-14 发布于福建
  • 举报
yacc 与 lex 编写文本分析器 1

yacc 和 lex 编写文本分析器 1 使用yacc和lex编写文本分析器[1]2011年01月18日星期二上午11:28在UNIXreg;中,许多操作系统组成部分都依赖于文本分析,从用来与系统进行交互的shell,到诸如awk or Perl等各种常用的工具和命令,再到用来构建软件和应用程序的C编译器。您可以在UNIX应用程序(以及其他的应用程序)中使用分析器来构建简单的配置分析器,甚至构建最终的目标:您自己的编程语言。?xml:namespace prefix=o/ 本文将研究使用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工具 l

文档评论(0)

1亿VIP精品文档

相关文档