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

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

 2007-03-29 12:07:02 来源:WEB开发网   
核心提示: 理解树结构很直观,但我们真正要寻找的修改过的标记怎么办呢?幸运的是,可爱的 Python: 使用 Spark 模块解析(9),只需要几行代码就可以遍历树并生成它:清单 8. 从 AST(prettyprint.py)输出标记def emitHTML(node):from typo_html

理解树结构很直观,但我们真正要寻找的修改过的标记怎么办呢?幸运的是,只需要几行代码就可以遍历树并生成它:

清单 8. 从 AST(prettyprint.py)输出标记  def emitHTML(node):
  from typo_html import codes
  if hasattr(node, 'attr'):
    beg, end = codes[node.type]
    sys.stdout.write(beg+node.attr+end)
  else: map(emitHTML, node._kids)

typo_html.py 文件与 SimpleParse 那篇文章中的一样 — 它只是包含一个将名称映射到开始标记/结束标记对的字典。显然,我们可以为标记使用除 HTML 之外的相同方法。如果您不清楚,下面是我们的示例将生成的内容:

清单 9. 整个过程的 HTML 输出Text with <strong>bold</strong>, and <em>itals phrase</em>,
and <em><code>module</code></em>--this should be a good
<code>practice run</code>.

结束语

很多 Python 程序员都向我推荐 Spark。虽然 Spark 使用的少见的协定让人不太容易习惯,而且文档从某些角度来看可能比较含混不清,但 Spark 的力量还是非常令人惊奇。Spark 实现的编程风格使最终程序员能够在扫描/解析过程中在任何地方插入代码块 — 这对最终用户来说通常是“黑箱”。

比起它的所有优点来说,我发现 Spark 真正的缺点是它的速度。Spark 是我使用过的第一个 Python 程序,而我在使用中发现,解释语言的速度损失是其主要问题。Spark 的速度的确 很慢;慢的程度不止是“我希望能快一点点”,而是“吃了一顿长时间的午餐还希望它能快点结束”的程度。在我的实验中,记号赋予器还比较快,但解析过程就很慢了,即便用很小的测试案例也很慢。公平地讲,John Aycock 已经向我指出,Spark 使用的 Earley 解析算法比更简单的 LR 算法全面得多,这是它速度慢的主要原因。还有可能的是,由于我经验不足,可能设计出低效的语法;不过就算是这样,大部分用户也很可能会象我一样。

上一页  4 5 6 7 8 9 

Tags:可爱 Python 使用

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