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

了解 DParser for Python

 2007-03-29 12:13:45 来源:WEB开发网   
核心提示: 让我们给出一些短语来运行这个解析器,如下:清单 2. 简单地解析短语$ echo -n "alpha" | ./abc.pyHead:A: alphaTail:echo -n "xavier alpha beta charlie will" | ./

让我们给出一些短语来运行这个解析器,如下:

清单 2. 简单地解析短语

$ echo -n "alpha" | ./abc.py
Head:
A: alpha
Tail:
echo -n "xavier alpha beta charlie will" | ./abc.py
Head: xavier
ABC: alpha beta charlie
Tail: will
$ echo -n "mable delta xavier bruce" | ./abc.py
Traceback (most recent call last): [...]
dparser.SyntaxError:
syntax error, line:1
mable delta xavier bruce[syntax error]

显然,到目前为止,一切都没问题。我的语法当其条件允许时找到了一个 ABC,但是当只能找到 A 或者 AB 时,也能满足于此。

不过说实话,当遇到含糊的短语时,我的语法会有很多问题。在大部分情况下,当 DParser 不能确定如何解析一个短语时,它会陷入一个无限循环(可能是最坏的结果;至少回溯或者报告的错误可以告诉您哪里出现了问题)。有时(至少在我的 Mac OSX 机器上),它会转而生成一个“Bus error”。那些情形我哪个都不喜欢。

处理含糊的短语

由于所有的最终结果都有相同的优先级,所以解析器不能确定如何解析类似如下的内容:

清单 3. 尝试解析一个含糊的短语

$ echo -n "alex bruce alice benny carl" | ./abc.py

AB 在前然后是单词?单词在前然后是 ABC?对于那个问题来说,它是全部都是单词吗(包括五个单词结果),它是不是应该引发一个 dparser.SyntaxError ?我最后会得到一个“Bus error” 或停止了的任务,而不是一个解析。在先前的例子中,含糊的短语碰巧被解析出来的原因在于每个结果的急切性(eagerness);一旦找到一个 ABC,则先导和结尾单词就都各就其位。

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

Tags:了解 DParser for

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