了解 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())
- ››Form Reset Function
- ››FOREACH 宏之GCC实现
- ››了解Windows Mobile文件结构
- ››了解 IBM Smart Business Development and Test o...
- ››ForeFront让企业VPN连接高枕无忧
- ››Forefront TMG日志记录功能
- ››了解 Apache Click:使用轻量模型快速编写 Web 应...
- ››了解 IBM Data Studio Version 2 软件打包方式
- ››了解微软Office 2010数字签名的新特性
- ››了解Sybase IQ服务剑桥天文观测台
- ››了解 Eclipse 中的 JFace 数据绑定,第 1 部分: 数...
- ››了解 Eclipse 中的 JFace 数据绑定,第 2 部分: 绑...
更多精彩
赞助商链接