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

了解 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

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

Tags:了解 DParser for

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