WEB开发网
开发学院软件开发Python Python 创建声明性迷你语言 阅读

Python 创建声明性迷你语言

 2007-03-30 12:31:54 来源:WEB开发网   
核心提示: 继承的魔力让支持库到处插入并操作应用程序的名称空间,这会启用精妙的声明性样式,Python 创建声明性迷你语言(7),但通常,将继承结构和自省一起使用会使灵活性更佳,我只想研究创建有效性类的声明性样式,与前面的 DTD 样本相匹配的一组规则/类包括:清单 10. gnosis.xml.va

继承的魔力

让支持库到处插入并操作应用程序的名称空间,这会启用精妙的声明性样式。但通常,将继承结构和自省一起使用会使灵活性更佳。

模块 gnosis.xml.validity 是用来创建直接映射到 DTD 产品的类的框架。任何 gnosis.xml.validity 类 只能用符合 XML 方言有效性约束的参数进行实例化。实际上,这并不十分正确;当只存在一种明确的方式可将参数“提升”成正确类型时,模块也可从更简单的参数中推断出正确类型。

由于我已经编写了 gnosis.xml.validity 模块,所以我倾向于思考其用途自身是否有趣。但是对于本文,我只想研究创建有效性类的声明性样式。与前面的 DTD 样本相匹配的一组规则/类包括:

清单 10. gnosis.xml.validity 规则声明

from gnosis.xml.validity import *
class figure(EMPTY):   pass
class _mixedpara(Or):   _disjoins = (PCDATA, figure)
class paragraph(Some):  _type = _mixedpara
class title(PCDATA):   pass
class _paras(Some):    _type = paragraph
class chapter(Seq):    _order = (title, _paras)
class dissertation(Some): _type = chapter

您可以使用以下命令从这些声明中创建出实例:

ch1 = LiftSeq(chapter, ("1st Title","Validity is important"))
ch2 = LiftSeq(chapter, ("2nd Title","Declaration is fun"))
diss = dissertation([ch1, ch2])
print diss

请注意这些类和前面的 DTD 非常匹配。映射基本上是一一对应的;除了有必要对嵌套标记的量化和交替使用中介体之外(中介体名称用前导下划线标出来)。

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

Tags:Python 创建 声明

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