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

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

    前面谈到了关于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. [Python程序设计] Django架构流程分析 7 个条目
  2. [软件工程与项目管理] 开始使用Git 3 个条目
  3. [Python程序设计] Django Web环境配置 2 个条目
  4. [PHP程序设计] httpd.conf设置相关 3 个条目
  5. [移动开发] Android与SQLite数据库 7 个条目
  6. [PHP程序设计] 声明式编程范式 12 个条目
  7. [移动开发] 简单了解Android Fragment 3 个条目
  8. [Python程序设计] Django 入门知识浅介 10 个条目
  9. [移动开发] 从代码角度去认识 Activity 4 个条目
  10. [PHP程序设计] htaccess 设置技巧 6 个条目
  11. [移动开发] Android 开发调试工具 ADB 3 个条目
  12. [软件工程与项目管理] 开始了解Git 5 个条目
窗口 -- [八点]