了解 DParser for Python
2007-03-29 12:13:45 来源:WEB开发网核心提示: 实际上,在先前的语法可以生效的情况下,了解 DParser for Python(4),要确切地理解为什么能够 生效很令人迷惑 —— 在某种程度上,比理解为什么它有时不能生效更令人迷惑,我发现了一些难以解释的异常现象,例如,让我们假定我们希望解析一个短语,并当存在
实际上,在先前的语法可以生效的情况下,要确切地理解为什么能够 生效很令人迷惑 —— 在某种程度上,比理解为什么它有时不能生效更令人迷惑。
让我们假定我们希望解析一个短语,并当存在 ABC 结果时找它,即便在从左到右的遍历过程中,有一些其他的结果(也就是 AB)得到了满足。我可以通过提高 ABC 最终结果的优先级来完成:
清单 4. abc2.py 中修订的 d_ABC() 结果函数
def d_ABC(t):
'ABC : AB "c[a-z]*" $term 1'
return 'ABC'
如果没有指定优先级,则结果的优先级是 0。否则,任何正整数或负整数都可以用来对结果排序。现在我们可以运行:
清单 5. 成功地找到后面的 ABC
$ echo -n "alex bruce alice benny carl" | ./abc2.py
Head: alex bruce
ABC: alice benny carl
Tail:
注意,在解析器寻找末尾的单词之前,会尝试(ABC|AB|A)系列中的全部可选项。所以这样不需要任何优先级规范就可以成功。
清单 6. A 与 AB 之间不存在含糊短语问题
$ echo -n "alex alice benny" | ./abc.py Head: alex
AB: alice benny
Tail:
在处理含糊短语时 DParser 的行为中,我发现了一些难以解释的异常现象。例如,添加一个绝对不是 A 的末尾单词,解析器可以工作 —— 但 只能 在有调试信息的条件下运行!
清单 7. 处理含糊短语时的不稳定行为
$ echo -n "alex bruce alice benny carl dave" | ./abc.py
[...process freezes...]
$ echo -n "alex bruce alice benny carl dave" | ./abc.py --debug
[...debugging trace of speculative and final productions...]
Head: alex bruce
ABC: alice benny carl
Tail: dave
- ››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 部分: 绑...
更多精彩
赞助商链接