WEB开发网
开发学院软件开发Python 可爱的 Python: 使用 SimpleParse 模块进行解析 阅读

可爱的 Python: 使用 SimpleParse 模块进行解析

 2008-11-13 13:16:18 来源:WEB开发网   
核心提示: EBNF 样式的浮点数描述floatnumber:pointfloat | exponentfloatpointfloat: [intpart] fraction | intpart "."exponentfloat:(nonzerodigit digit* | poi

EBNF 样式的浮点数描述

floatnumber:  pointfloat | exponentfloat
pointfloat:   [intpart] fraction | intpart "."
exponentfloat: (nonzerodigit digit* | pointfloat) exponent
intpart:    nonzerodigit digit* | "0"
fraction:    "." digit+
exponent:    ("e"|"E") ["+"|"-"] digit+

或者您可能见过以 EBNF 样式定义的 XML DTD 元素。例如,developerWorks 教程的 <body> 类似于:

developerWorks DTD 中 EBNF 样式的描述

<!ELEMENT body ((example-column | image-column)?, text-column) >

拼写稍有不同,但是量化、交替和定序这些一般概念都存在于所有 EBNF 样式的语言语法中。

使用 SimpleParse 构建标记列表

SimpleParse 是一个有趣的工具。要使用这个模块,您需要底层模块 mxTextTools ,它用 C 实现了一个“标记引擎”。 mxTextTools (请参阅本文后面的 参考资料)的功能强大,但是相当难用。一旦在 mxTextTools 上放置了 SimpleParse 后,工作就简单多了。

使用 SimpleParse 确实很简单,因为不需要考虑 mxTextTools 的大部分复杂性。首先,应该创建一种 EBNF 样式的语法,用来描述要处理的语言。第二步是调用 mxTextTools 来创建一个 标记列表,当语法应用于文档时,该列表描述所有成功的产品。最后,使用 mxTextTools 返回的标记列表来进行实际操作。

对于本文,我们要解析的“语言”是“智能 ASCII”所使用的一组标记代码,这些代码用来表示诸如黑体、模块名以及书籍标题之类的内容。这就是先前使用 mxTextTools 来标识的同一种语言,在先前的部分中,使用正则表达式和状态机。该语言比完整的编程语言简单得多,但已经足够复杂而有代表性。

上一页  1 2 3 4 5 6 7  下一页

Tags:可爱 Python 使用

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接