各种标记语言都有关闭标签, 是解析器太弱的原因吗?


HTML 有关闭标签, 微软的 XAML 有关闭标签, Flex 开发有关闭标签, 基于 XML 衍生的也都有,
感觉比较反人类的设计...

我尝试过 pegjs, 相比关闭标签的方式, 缩进似乎难得多, 其他的词法解析方案是不是也类似, 成本太大所以人们都宁愿别人开发时候搞一堆关闭标签?


update:

主要讨论常用开发中的 HTML, XML 衍生语言等等, 文本标记语言比如 Markdown 不在讨论范围里.

现在已有 Jade, HAML, Slim, Blade 等多种编译解析到 HTML 的语言, 证明技术上完全是成熟的, 这样大家都用 XML 这样的标记语言, 多少让人怀疑是为了那么一点点开销么?

xml 解析文本 HTML

春原阳平君 11 years ago

有闭合标签更容易于解析,而且反之容易造成歧义。

比如我举个 HTML 的例子:


 <div>
    <span>
        <a href="#tag2">tag 2</a>
    </span>
    <a href="#tag3">tag 3</a>
</div>

如果省略闭合标签:


 <div>
    <span>
        <a href="#tag2">tag 2
    <a href="#tag3">tag 3

解析器便无法确定代码的真正意图了:tag 3 究竟是在 span 的外面还是里面?傻傻分不清楚 :-)


其实其他编程语言的语句块也是一样:C++ 的 {...} ,Ruby 的 begin...end ,Lisp 的 (...) 等,都需要有明确的层次分割。毕竟没闭合的标签人类都解析不了 ;)

寻找真心人 answered 11 years ago

Your Answer