第 16 章 解析器(1)
霍春阳(HcySunYang)
第 16 章 解析器
在第 15 章中,我们初步讨论了解析器(parser)的工作原理,知道了解析器本质上是一个状态机。但我们也曾提到,正则表达式其实也是一个状态机。因此在编写 parser 的时候,利用正则表达式能够让我们少写不少代码。本章我们将更多地利用正则表达式来实现 HTML 解析器。另外,一个完善的 HTML 解析器远比想象的要复杂。我们知道,浏览器会对 HTML 文本进行解析,那么它是如何做的呢?其实关于 HTML 文本的解析,是有规范可循的,即 WHATWG 关于 HTML 的解析规范,其中定义了完整的错误处理和状态机的状态迁移流程,还提及了一些特殊的状态,例如 DATA、CDATA、RCDATA、RAWTEXT 等。那么,这些状态有什么含义呢?它们对解析器有哪些影响呢?什么是 HTML 实体,以及 Vue.js 模板解析器需要如何处理 HTML 实体呢?这些问题都会在本章中讨论。
16.1 文本模式及其对解析器的影响
文本模式指的是解析器在工作时所进入的一些特殊状态,在不同的特殊状态下,解析器对文本的解析行为会有所不同。具体来说,当解析器遇到一些特殊标签时,会切换模式,从而影响其对文本的解析行为。这些特殊标签是:
<title> 标签、<textarea> 标签,当解析器遇到这两个标签时,会切换到 RCDATA 模式;
<style>、<xmp>、<iframe>、<noembed>、<noframes>、<noscript> 等标签,当解析器遇到这些标签时,会切换到 RAWTEXT 模式;
当解析器遇到 <![CDATA[ 字符串时,会进入 CDATA 模式。
解析器的初始模式则是 DATA 模式。对于 Vue.js 的模板 DSL 来说,模板中不允许出现 <script> 标签,因此 Vue.js 模板解析器在遇到 <script> 标签时也会切换到 RAWTEXT 模式。
公开
同步至部落
取消
完成
0/2000
笔记
复制
AI
- 深入了解
- 翻译
- 解释
- 总结
![](https://static001.geekbang.org/resource/image/d0/e4/d0880927e2a522a038be2d04bf19dfe4.png)
本文深入介绍了HTML解析器的工作原理和状态机的应用。作者详细介绍了不同文本模式对解析器的影响,包括RCDATA、RAWTEXT和CDATA模式。通过图示和代码示例生动地解释了解析器在不同模式下的工作方式,以及不同模式的特性和区别。文章重点介绍了解析器函数的核心,即解析器如何递归地调用来不断地消费模板内容。通过具体的例子和图示,生动地展示了解析器在HTML解析过程中的工作原理和状态机的应用。对于想深入了解HTML解析器工作原理的读者来说,是一篇值得阅读的文章。文章通过模拟状态机的运行过程,解释了状态机何时停止运行的问题,展示了递归下降算法的含义。整体而言,本文以清晰的语言和生动的例子,深入解析了HTML解析器的工作原理和状态机的应用,对读者快速了解文章概览有很好的帮助。
仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《Vue.js 设计与实现》
《Vue.js 设计与实现》
立即购买
登录 后留言
精选留言
由作者筛选后的优质留言将会公开显示,欢迎踊跃留言。
收起评论