XML,S表达式和重叠范围......它叫什么?

时间:2010-08-02 02:43:02

标签: html xml lisp scope s-expression

我正在阅读XML is not S-Expressions。 XML范围是一种严格的,S表达式也是如此。在我看过的每种编程语言中,你都不能拥有以下内容:

<b>BOLD <i>BOTH </b>ITALIC</i> == BOLD BOTH ITALIC

S-Expressions甚至无法表达:

(bold "BOLD" (italic "BOTH" ) "ITALIC" ) == :(

是否有任何编程语言支持这种“重叠”范围?它有什么实际用途吗?

2 个答案:

答案 0 :(得分:3)

重叠标记结构有许多实际用途。考虑concurrent markup for text analysis in the humanities的应用程序。 International Workshop on Markup of Overlapping Structures注意到:

  

重叠结构无处不在,出现在文本标记的应用中,如飞机维护手册和古代圣经和礼仪作品。每当文本编码超出特定层次结构的快照视图以表示和处理文本的多个并发方面时,“重叠问题”就会抬起它的丑陋头脑,包括反映文本在多个版本和变体中的演变的特征,无论是排版还是表达,结构,注释或参考,分类学或专题。

     

重叠是文本中的一个问题,如技术文档和产品手册(版本控制),法律代码(有效性),文学作品(经验与戏剧结构,修辞结构,注释),神圣文本(章节加上诗歌参考与句子)结构和评论)和语言语料库(多层语言注释)。

Text Encoding Initiative(TEI)发布Guidelines to handle non-nesting information并提供重叠的XML语法。他们在2004年表示:

  

[N] o解决方案尚未被提出,它结合了形式简单的所有理想属性,表示所有正在发生或可想象的结构的能力,正式或机械验证的适用性,以及与简单案例所需的符号的清晰认同(即文本特征正确嵌套的情况)。

处理重叠结构的一些选项包括:

SGML具有CONCUR功能,可用于支持重叠结构,尽管Goldfarb(标准的作者)写道“”因此我建议不要使用CONCUR来创建多个逻辑文件的观点“。

GODDAG提供了一种表示具有重叠结构的文档的数据结构。

XCONCUR是一种实验性标记语言,其主要目标是提供一种方便的方法,以类似XML的方式表达并发层次结构。

答案 1 :(得分:2)

可能没有任何编程语言支持其正式定义中的重叠范围。虽然技术上可行,但它会使实施更加复杂。它也会使语言模糊不清,以至于接受有可能是错误的有效。

我现在能够想到的唯一实际用途是它更少打字并且更直观地书写,就像在标记中写入属性时没有不必要的引号更直观,如<foo id=45 />而不是{{ 1}}。

我认为强制嵌套结构也可以提高处理效率。通过强制嵌套结构,解析器可以将节点推送到单个堆栈以跟踪打开的节点列表。对于重叠的范围,您需要一个有序的开放范围列表,当您遇到 begin-new-scope 令牌时,您必须附加该列表,然后在每次遇到 end-scope 标记,以查看哪个开放范围最有可能是它关闭的范围。

虽然没有编程语言支持重叠范围,但有一些HTML解析器支持它作为错误恢复算法的一部分,包括所有主流浏览器中的算法。

此外, C 中的<foo id="45" />语句允许看起来像重叠范围的结构,如Duff's Device中所示:

switch

因此,从理论上讲,编程语言通常可以为范围提供类似的语义,以便在需要时允许这些类型的优化,但可读性非常低。

switch(count%8) { case 0: do{ *to = *from++; case 7: *to = *from++; case 6: *to = *from++; case 5: *to = *from++; case 4: *to = *from++; case 3: *to = *from++; case 2: *to = *from++; case 1: *to = *from++; } while(--n>0); } 语句以及某些语言中的gotobreak也可让您将程序结构化为重叠范围:

continue