WEB开发网
开发学院软件开发Python 了解 DParser for Python 阅读

了解 DParser for Python

 2007-03-29 12:13:45 来源:WEB开发网   
核心提示: 后面跟有问号的结果是推测性的尝试;那些后面其实没有最终的结果,与此相关,了解 DParser for Python(6), DParser 让您有能力当结果成为推测的或者是最终解析时采取不同的动作,默认情况下,但是假如是简单含糊短语,则微调结束优先级是一个非常好的工具,函数体中的动作只作用

后面跟有问号的结果是推测性的尝试;那些后面其实没有最终的结果。与此相关, DParser 让您有能力当结果成为推测的或者是最终解析时采取不同的动作。默认情况下,函数体中的动作只作用于最终解析。不过,您可以向结果指定两个额外参数中的一个来处理推测性解析。(还有很多本文中没有讨论的选项参数。)

清单 9. 推测性解析过程中的动作

def d_prod1(t, spec_only):
  'prod1 : this that+ other?'
  print "Speculative parse of prod1"
def d_prod2(t, spec):
  'prod2: spam* eggs toast'
  if spec:
    print "Speculative parse of prod2"
  else:
    print "Final parse of prod2"

当然,通过指定 dparser.Parser.parse() 的 print_debug_info 参数,我的推测性解析所显示的所有信息也都显示出来(以稍微不同的格式)。不过您也可以决定采取其他动作 —— 比如触发外部事件。

深入探讨优先级

我承认,前面 ABC 结果所使用的指定优先级有些不太正统。但是假如是简单含糊短语,则微调结束优先级是一个非常好的工具。让我来给出另一个关于简单含糊短语的语法:

清单 10. 逐项的二义性语法,ibm.py

def d_phrase(t, s):
  'phrase : word ( vowel | caps | threeletter ) word'
  print "Head:", ''.join(s[0])
  print t[1][0]+":", ''.join(s[1])
  print "Tail:", ''.join(s[2])
def d_word(t): 'word : "[A-Za-z]+" '
def d_vowel(t):
  'vowel : "[AEIOUaeiou][A-Za-z]*"'
  return 'VOWEL'
def d_caps(t):
  'caps : "[A-Z]+"'
  return 'CAPS'
def d_threeletter(t):
  'threeletter : "[A-Za-z][A-Za-z][A-Za-z]"'
  return '3LETT'
#-- Parse STDIN
from dparser import Parser
from sys import stdin
Parser().parse(stdin.read())

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

Tags:了解 DParser for

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