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


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

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


update:

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

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

xml 解析文本 HTML

春原阳平君 11 years, 1 month 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, 1 month ago

Your Answer