当前位置: 代码迷 >> Web前端 >> 浏览器内核发动机――渲染引擎续(解析)
  详细解决方案

浏览器内核发动机――渲染引擎续(解析)

热度:72   发布时间:2012-11-23 22:54:33.0
浏览器内核引擎――渲染引擎续(解析)
本节涉及众多编译原理的知识,望各位读者先认真解读下编译原理的基本知识,以免看着生涩
解析文档就是把它翻译成有意义的结构以供代码使用,解析的结果通常是一个表征文档的节点组成的树
例子:解析”2+3-1“可以返回下面的树

?
解析的格式有确定的语法和词汇组成,这种被称作”上下文无关文法“
解析器:
解析器有两个处理过程―词法分析和句法分析,词法分析负责把输入分成序号符号,例如可以分割成符号,标示符,单词
语法分析是对语言句法的应用,语法的任务是在词法分析的基础上将单词序列组成各类语法短语,如”语句“,”表达式“等
具体的流程如下图所示:                       


?
源文件――词法分析――语法分析――解析树
词法分析器知道如何过滤像空格,换行之类的无关字符,语法分析会从此法分析器获取新符号并尝试匹配语法规则,如果
匹配成功,就在解析数上创建相应的节点,并继续从词法分析器获取下一个符号,如果没有匹配的规则,语法分析器会
从内部保存这个符号,并继续从词法分析器获取符号,直到内部保存的所有符号能够成功匹配一个规则,如果最终无法
匹配,语法分析器会抛出异常,这意味着文档无效,含有语法错误。
转换:
多数情况下,解析树,并非最终结果,解析经常是为了从输入文档转换成另一种格式,例如:会先解析成解析树,在把
解析树转换成机器码,这就是编译过程
?

源码――解析――解析数――转换――机器码
解析事例:
上面的”2+3-1“的事例
词法:定义语言包含整数,加法,减法
语法:1语法块由表达式,术语及操作符组成
         2.语言可以任意数量表达式
         3.表达式定义为紧跟着操作符,在跟另一个术语
         4.操作符由加号或者减号
         5.术语可以为整数或者表达式
当输入”2+3-1“时,根据规则#5,它是一个术语,第二个匹配的是”2+3“,符合规则#3,下一个匹配出现在输入
结束时,”2+3-1“符合规则#3,进而符号规则#2,则输入的符合我们的语法
语法分析器的类型:
解析器有两种基本类型―自上而下和自下而上,主观上可以认为语法分析自上而下是从上层开始尝试匹配,自下而上则
是从输入开始,慢慢转换成语法规则,从底层开始指导上层全部匹配
用两种不同的方式解析下面的例子:
.自上而下从上层开始,它把”2+3"定义为表达式,然后定义”2+3-1“为表达式
组下而上的解析器扫描输入,直到有匹配的规则,它会把输入转换成规则,这样一直到输入结束,部分匹配的规则会
放到解析堆栈

stack ? ? ? ? ? ? ? ? ? ? input ? ? ? ? ? ? ? ? ??
2+3-1
术语 +3-1
操作符 3-1
表达式 -1
表达式操作符 1
表达式
     这种自下而上的语法分析叫做移动规约法,因为输入被向右移动并逐渐规约到语法树
自动创建语法分析器:
有一些工具可以为你创建语法分析器,通常被称作解析器生成器,你只需要提供语法――词汇与语法规则――他就可
以生成一个可以工作的解析器,创建解析器需要对解析器有深入的了解,Webkit使用两款知名的语法分析器生成工具
Flex用于创建词法分析器,bison用于创建解析器,Flex的输入的文件是正则表达式定义,bison的输入文件是BNF
的句子定义
请看下节:html的语法分析器详解




 
  相关解决方案