• 解析树与上下文无关语法

    补充一些基础知识
    服务器君一共花费 24.590 ms 进行了 3 次数据库查询,努力地为您提供了这个页面。
    广告很萌的

    前面谈到了关于DOM解析树和词法语法分析,如果没有相关解析的知识,我们将很难再前行去深入了解浏览器的相关知识。所以我们需要退而结网,回过头来看看解析的一些相关知识。

    关于解析与解析树

    解析是呈现引擎中非常重要的一个环节,因此我们要更深入地讲解。首先,来介绍一下解析。

    解析文档是指将文档转化成为有意义的结构,也就是可让代码理解和使用的结构。解析得到的结果通常是代表了文档结构的节点树,它称作解析树或者语法树。

    举一个简单的例子,解析 2 + 3 - 1 这个表达式,会返回下面的树:

    数学表达式树节点

    在图中,我们通过一个数学表达式建立了解析树。现在,让我们试着定义一个简单的数学语言,用来演示解析的过程。

    词汇:我们用的语言可包含整数、加号和减号。

    语法:

    1. 构成语言的语法单位是表达式、项和运算符。
    2. 我们用的语言可以包含任意数量的表达式。
    3. 表达式的定义是:一个“项”接一个“运算符”,然后再接一个“项”。
    4. 运算符是加号或减号。
    5. 项是一个整数或一个表达式。

    让我们分析一下 2 + 3 - 1。

    匹配语法规则的第一个子串是 2,而根据第 5 条语法规则,这是一个项。匹配语法规则的第二个子串是 2 + 3,而根据第 3 条规则(一个项接一个运算符,然后再接一个项),这是一个表达式。

    下一个匹配项已经到了输入的结束。2 + 3 - 1 是一个表达式,因为我们已经知道 2 + 3 是一个项,这样就符合“一个项接一个运算符,然后再接一个项”的规则。2 + + 不与任何规则匹配,因此是无效的输入。

    关于上下文无关语法

    解析是以文档所遵循的语法规则(编写文档所用的语言或格式)为基础的。所有可以解析的格式都必须对应确定的语法(由词汇和语法规则构成)。这称为与上下文无关的语法。人类语言并不属于这样的语言,因此无法用常规的解析技术进行解析。

    关于上下文无关语法,这涉及到编译原理的相关知识,不是短短几句能够说清楚,但是我们现在应先知道,上下文无关语法可以用来描述和生成自然语言,自然语言的大部现象可以使用上下文无关文法来描述,上下文无关文法是生成语法的基础部分。

更多 推荐条目

Welcome to NowaMagic Academy!

现代魔法 推荐于 2013-02-27 10:23   

本章最新发布
随机专题
  1. [JavaScript程序设计] Web实时通信技术名词解析 5 个条目
  2. [Python程序设计] urls.py设置技巧 8 个条目
  3. [Python程序设计] Django模板系统 11 个条目
  4. [运维管理] 路由器与交换机 4 个条目
  5. [移动开发] Android 网络通信框架Volley 1 个条目
  6. [移动开发] Android加载器Loaders 5 个条目
  7. [移动开发] Content Provider内容提供者 3 个条目
  8. [Linux操作系统] 基本 Linux Shell 命令 2 个条目
  9. [JavaScript程序设计] 关于HTTP Keep-Alive 6 个条目
  10. [移动开发] 使用support-v7 ActionBar前的那些坑 3 个条目
  11. [移动开发] ListView 使用相关问题集 1 个条目
  12. [智力开发与知识管理] 整体性学习步骤 9 个条目
窗口 -- [协会]