可爱的 Python: 使用 SimpleParse 模块进行解析
2008-11-13 13:16:18 来源:WEB开发网这里,我们可能需要回顾一下。 mxTextTools 提供给我们的“标记列表”是什么东西?这基本上是一个嵌套结构,它只是给出了每个产品在源文本中匹配的字符偏移量。 mxTextTools 快速遍历源文本,但是它不对源文本本身 做任何操作(至少当使用 SimpleParse 语法时不进行任何操作)。让我们研究一个简化的标记列表:
从 SimpleParse 语法生成的标记列表
(1,
[('plain',
0,
15,
[('word', 0, 4, [('alphanums', 0, 4, [])]),
('whitespace', 4, 5, []),
('word', 5, 10, [('alphanums', 5, 10, [])]),
('whitespace', 10, 11, []),
('word', 11, 14, [('alphanums', 11, 14, [])]),
('whitespace', 14, 15, [])]),
('markup',
15,
27,
...
289)
中间的省略号表示了一批更多的匹配。但是我们看到的部分叙述了下列内容。根产品(“para”)取得成功并结束于偏移量 289 处(源文本的长度)。子产品“plain”的偏移量为 0 到 15。“plain”子产品本身由更小的产品组成。在“plain”产品之后,“markup”产品的偏移量为 15 到 27。这里省略了详细信息,但是第一个“markup”由组件组成,并且源文本中稍后还有另外的产品取得成功。
“智能 ASCII”的 EBNF 样式的语法
我们已经浏览了 SimpleParse + mxTextTools 所能提供的标记列表。但是我们确实需要研究用来生成这个标记列表的语法。实际工作在语法中发生。EBNF 语法读起来几乎不需加以说明(尽管 确实需要一点思考和测试来设计一个语法):
更多精彩
赞助商链接