python中parse的含义_在Python中使用SimpleParse模块进行解析的教程

与大多数程序员一样,

我经常需要标识存在于文本文档中的部件和结构,

这些文档包括:

日志文件、配置文件、分隔的数据以及格式更自由的(但还是半结构化的)报表格式。所有

这些文档都拥有它们自己的“小语言”

,用于规定什么能够出现在文档内。

我编写处理这些非正式解析任务的程序的方法总是有点象大杂烩,其中包括定制状态

机、正则表达式以及上下文驱动的字符串测试。这些程序中的模式大概总是这样:

“读一些

文本,弄清是否可以用它来做些什么,然后可能再多读一些文本,一直尝试下去。

各种形式的解析器将文档中部件和结构的描述提炼成简明、清晰和

说明性的规则,该

规则规定了如何标识文档的组成部分。

这里,

说明性方面是最引人注目的。

我所有的旧的特

别的解析器都采用了这种风格:读一些字符、作决定、累加一些变量、清空、重复。正如本

专栏关于函数型编程的部分文章中所评述的,

程序流的方法风格相对来说容易出错并且难以

维护。

正式解析器几乎总是使用扩展巴科斯范式

(

Extended Backus-Naur Form(EBNF)

)

上的变

体来描述它们所描述语言的“语法”

。我们在这里研究的工具是这样做的,流行的编译器开

发工具

Y

ACC

(及其变体)

也是这样做的。

基本上,

EBNF

语法对您可能在文档中找到的

件赋予名称;

另外,

经常将较小的部件组成较大的部件。

由运算符

通常和您在正则表达

式中看到的符号相同

来指定小部件在较大的部件中出现的频率和顺序。在解析器交谈

(

parser-talk

)中,语法中每个命名的部件称为一个“产品(

production

)

可能读者甚至还不知道

EBNF

,却已经看到过运行的

EBNF

描述了。例如,大家熟悉

Python

语言参考大全

(

Python Language Reference

)

定义了浮点数在

Python

中是什么样

子:

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

返回的标记列表来进行实际操作。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值