不是
请参见下面的编辑说明。
这要看情况。
如果您只考虑理论上的HTML子集,那么是的。
但是,如果您还包括实际生活中可访问和成功使用的HTML,这些HTML每天在互联网上的许多顶级站点上被数百万人使用,那么不是。
这就是HTML灵活性的来源。解析引擎会添加标记、关闭标记并处理一些理论上的CFG无法完成的任务。如果您学过自动机,可能会记得正式语法中的产生式规则不能为空(也称为epsilon/lambda)在lhs(左侧)。由于解析引擎基本上使用了正式语法和自动机没有的知识,因此它不受限于此,而“语法”将具有epsilon/lambda -> result
,其中特定的epsilon/lambda规则是根据语法中不可用的信息选择的。
由于我认为任何正式语法都不允许空的lhs,因此HTML无法通过正式语法定义,根本不是正式语言。
当然,HTML5可能会尝试朝着“更正式”的语言描述方向发展,但它成为上下文无关语言的现实可能性(即未被语法匹配的字符串被拒绝)与XHTML 2.0席卷全球并取代HTML的可能性相同(XHTML是他们试图使HTML成为正式语言的尝试...由于其脆弱性而被大规模拒绝)。
值得注意的是,HTML 5是第一个在实现之前定义的HTML标准!没错,HTML 1-4由某人在浏览器中实现的随机想法组成,并根据受欢迎和广泛实现的功能制定标准。然后他们尝试了XHTML,但它完全未被采用。即使是在网上,“xhtml”在几乎所有情况下都会自动解析为HTML,以防止出现加密的语法错误而导致的问题。现在您可以看到我们是如何到达这里以及为什么不太可能很快正式化。
教训:“从理论上讲,理论和实践没有区别。实际上,有。” - 约吉·贝拉
编辑:
实际上,在阅读文件后,发现即使按照HTML 4.01规范,HTML也不符合SGML。要自行查看,请查看http://www.w3.org/TR/html4/strict.dtd处的HTML 4.01 Strict文档类型定义(doctype),并注意以下行:
HTML 4.01规范包括无法在DTD中表达的其他语法约束。
因此,我会说由于这些特性,它可能不是CFL(上下文无关语言),尽管它在技术上并没有证明存在一些可能接受HTML 4.01的PDA,但它确实阻止了SGML是CFL因此HTML是CFL的论点。
HTML5摒弃了对SGML的隐含一致性,但可能可以通过CFG进行描述。然而,它仍将提供基于最佳尝试的解析,而不是基于CFG的解析。因此,在这方面,目前的情况(即语言规范在形式上被定义,无效的字符串仍然被接受、解析和以最佳方式呈现)不太可能在很长时间内发生重大变化。请注意保留"
"和""和html标签。