[阅读: 436] 2010-04-16 00:52:04
您定义的那个ini格式,从语言形式上来说,属于枚举语言,这是已经被证明最没有效率的语言之一了。简单的说,枚举语言要构造语义树,得不断的进行迭代或递归。
2.type=div
2.count=2
2.1.type=
2.1.text=Hello,
2.2.type=href
2.2.text=CNDEV
2.2.url=www.cndev.org
从形式上说,这个语言不是收敛的,它实际上处于形式语言的第二层,即黑田范式,黑田范式的解析开销远大于巴克斯诺尔范式
就上面一段片断,从文法上说是上下文无关的,语法上说是有界的,但语言上却是非收敛的,举个例子
2.2.3.type=
2.2.3.text=abcd
2.2.3.1.type=
2.2.3.1.1.type=
2.2.3.1.1.1.type=
......
HTML语言本身是一棵树,因此构造语言树只需要一次扫描即可;海大师的ini是一个非收敛的列表,要构造语言树至少是递归ini group的数量
那么可不可以定义为收敛的?当然是可以,只要定义终结符即可,但是ini的枚举特性没法改变,而且在列表中定义终结符仍然无法解决递归的问题,除非像COBOL语言那样严格定义层次格式
结论我就不多说了,INI现在用得越来越少,那不是没有原因的,当然海大师仍然可以在他认为合适的地方继续使用,不过我推荐各位新人还是多关注一下XML