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

可爱的 Python: 使用 Spark 模块解析

 2007-03-29 12:07:02 来源:WEB开发网   
核心提示: 清单 1. typographify.defpara:= (plain / markup)+plain := (word / whitespace / punctuation)+whitespace:= [ ]+alphanums := [a-zA-Z0-9]+word:= alphanu

清单 1. typographify.defpara    := (plain / markup)+
plain    := (word / whitespace / punctuation)+
whitespace := [   
]+
alphanums  := [a-zA-Z0-9]+
word    := alphanums, (wordpunct, alphanums)*, contraction?
wordpunct  := [-_]
contraction := "'", ('am'/'clock'/'d'/'ll'/'m'/'re'/'s'/'t'/'ve')
markup   := emph / strong / module / code / title
emph    := '-', plain, '-'
strong   := '*', plain, '*'
module   := '[', plain, ']'
code    := "'", plain, "'"
title    := '_', plain, '_'
punctuation := (safepunct / mdash)
mdash    := '--'
safepunct  := [!@#$%^&()+=|{}:;<>,.?/"]

Spark 简介

Spark 解析器与 EBNF 语法有一些共同之处,但它将解析/处理过程分成了比传统的 EBNF 语法所允许的更小的组件。Spark 的优点在于,它对整个过程中每一步操作的控制都进行了微调,还提供了将定制代码插入到过程中的能力。您如果读过本系列的 SimpleParse 那篇文章,您就会回想起我们的过程是比较粗略的:1)从语法(并从源文件)生成完整的标记列表,2)使用标记列表作为定制编程操作的数据。

Spark 与标准的基于 EBNF 的工具相比缺点在于,它比较冗长,而且缺少直接的出现计量符(即表示存在的“+”,表示可能性的“*”和表示有限制性的“?”)。计量符可以在 Spark 记号赋予器(tokenizer)的正则表达式中使用,并可以用解析表达式语法中的递归来进行模拟。如果 Spark 允许在语法表达式中使用计量,那就更好了。另一个值得一提的缺点是,Spark 的速度与 SimpleParse 使用的基于 C 的底层 mxTextTools 引擎相比逊色很多。

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

Tags:可爱 Python 使用

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