可爱的 Python: 使用 SimpleParse 模块进行解析
2008-11-13 13:16:18 来源:WEB开发网typographify.def
para := (plain / markup)+
plain := (word / whitespace / punctuation)+
whitespace := [ trn]+
alphanums := [a-zA-Z0-9]+
word := alphanums, (wordpunct, alphanums)*, contraction?
wordpunct := [-_]
contraction := "'", ('am'/'clock'/'d'/'ll'/'m'/'re'/'s'/'t'/'ve')
markup := emph / strong / module / code / title
emph := '-', plain, '-'
strong := '*', plain, '*'
module := '[', plain, ']'
code := "'", plain, "'"
title := '_', plain, '_'
punctuation := (safepunct / mdash)
mdash := '--'
safepunct := [!@#$%^&()+=|{}:;<>,.?/"]
这种语法和您口头描述“智能 ASCII”的方式几乎完全相同,非常清晰。段落由一些纯文本和一些标记文本组成。纯文本由某些字、空白和标点符号的集合组成。标记文本可能是强调文本、着重强调文本或模块名等等。着重强调文本由星号环绕。标记文本就是由诸如此类的部分组成的。需要考虑的是几个特性,类似于到底什么是“字”,或者可以用什么符号结束缩写,但是 EBNF 的句法不会成为障碍。
相比之下,使用正则表达式可以更精练地描述同类规则。“智能 ASCII”标记程序的第一个版本就是这样做的。但是编写这种精练难度大得多,并且以后调整也更为困难。下列代码表示了很大程度上(但不精确地)相同的规则集:
更多精彩
赞助商链接