了解 DParser for Python
2007-03-29 12:13:45 来源:WEB开发网核心提示: 尽管如此,还是有很多读者推荐说用于 Python DParaser 值得关注,了解 DParser for Python(2),虽然我更喜欢单独的 EBNF 定义,顺便提一句,所有没有被包括进来的单词只是短语的“head”或“tail”的部分
尽管如此,还是有很多读者推荐说用于 Python DParaser 值得关注,虽然我更喜欢单独的 EBNF 定义。顺便提一句,如您将在示例中所看到的,DParser 不使用任何单独的标记传递,而只是直接解析。您可以通过定义保留的 d_whitespace() 函数来控制空格的识别(它分离解析符号);这样就使得您可以随意使用标记。
找到最长的结果
作为用于 Python 的 DParser 程序的第一个示例,我创建了一个查找几个模式的语法,这些模式依次为另一个的子结果。这个语法处理的问题类似于很多解析器遇到的“dangling else”问题。具体说,也就是您如何才能知道什么时候停止查找更长的结果?(例如,“if”后是否跟有“else”?)我的语法会去分析的短语可能按次序包括有以“a”、“b”和“c” 结尾的单词。所有没有被包括进来的单词只是短语的“head”或“tail”的部分。这需要一些例子来展示。首先,程序本身:
清单 1. 解析器 abc.py
#!/usr/bin/env python2.3
"Identify sequence of a-, b-, c- words"
#
#-- The grammar
def d_phrase(t, s):
'phrase : words ( ABC | AB | A ) words'
print "Head:", ''.join(s[0])
print t[1][0]+":", ''.join(s[1])
print "Tail:", ''.join(s[2])
def d_words(t):
'words : word*'
def d_word(t):
'word : "[a-z]+" '
def d_A(t):
'''A : "a[a-z]*" '''
return 'A'
def d_AB(t):
'''AB : A "b[a-z]*" '''
return 'AB'
def d_ABC(t):
'''ABC : AB "c[a-z]*" '''
return 'ABC'
#
#-- Parse STDIN
from dparser import Parser
from sys import argv, stdin
phrase, arg = stdin.read(), argv[-1]
Parser().parse(phrase,
print_debug_info=(arg=='--debug'))
- ››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 部分: 绑...
更多精彩
赞助商链接