Electronic Joint Business

Solution for E-Business

利用 Python 工具和库实现语法解析

想用 Python 来解析编程语言或者文档,一般有三种做法:1 利用现成的库来支持语言的解析,如 XML 类库:对于那些使用广泛的语言如 XML 和 HTML,这是无疑是最好的选择。好的类库通常还会包括创建或修改语言的可编程 API,这要比基础解析器的功能多得多。不过只有最常见的语言才有这种类库。 从头构造一个解析器:有时候你可能要自己构造解析器。比如语言无法用传统的解析器生成器来解析,或者生成器的功能无法满足性能需求或者无法和其他组件深度集成。 利用工具或者库来帮助生成解析器,例如 ANTLR 可以为任何语言生成解析器。 在前两种选项之外的场合,生成器应该是默认的选择,因为它既灵活又可以大大缩短开发时间。这就是为什么本文重点关注此种类库和工具的原因。 用工具创建解析器 在后续的章节中我们会看到: 利用工具来生成 Python 可用(或其他语言可用)的解析器 用来创建解析器的 Python 类库 生成解析器代码的工具称一般为解析器生成器(parser generators)或者编译器的编译器(compiler compiler)。生成解析器的类库则称为解析器组合器(parser combinator)。 不管是生成器还是组合器都不是易上手的工具,你需要花时间学习它们的使用方法。请注意并不是所有生成器都适用于所有的语言。在这里, 我们列出了一些最常见的生成器并对它们逐一进行简单介绍。并且我们的目标语言定为 Python。这意味一般来说这些工具和库自身也是用 Python 编写的。 枚举所有语言的生成器或组合器也许十分有趣,但没什么实际用途。太多的选择会让人眼花缭乱。只关注一种编程语言能让我们更好地进行横向比较,从而为项目作出最优的选择。 解析器的一些小常识 为了方便理解,本节先简单介绍解析器的一些名词和概念。 解析器的结构 解析器通常由两个部分组成:词法分析器 Lexer, 也叫扫描器(scanner)或者标记器(tokenizer)和语法分析器 parser。不过不是所有解析器都采用这种两步设计:有些解析器不依赖于词法分析器,这种解析器称为无扫描式解析器。词法分析器和语法分析器一般依序工作:首先词法分析器扫描输入并生成匹配的标记,然后语法分析器扫描这些标记并生成解析结果。 我们来看看它们是如何解析一个简单的数学算式: 437 + 734 首先词法分析器扫描文本并找到 ‘4’, ‘3’, ‘7’ 和一个空格,词法分析器的任务是分析出前面几个字母因组合成一个类型为 NUM 标记。紧接着又找到符号 “+” ,它对应第二个标记,类型为 PLUS, 最后又找到一个类型为 […]

, , , , , ,

Comments are currently closed.