解析器(上)

56 阅读2分钟

1,文本模式及其对解析器的影晌 文本模式主要分为四种,第一中是DATA就是HTM模式,能正常的识别HTML标签,第二种RCDATA 能识别HTML标签但会将其子元素识别为文本第三种,RAWTEXT 无法识别HTML标签只识别文本,CDATA 2,递归睛降算法构造模板AST 在解析器函数里建立一个上下文对象,其上下文对象中有一个资源字符串属性存着所有的VUE模版中的所有字符,一个MODE属性存着当前解析的字符串文本模式,之后使用递归下降算法函数将字符解析成树并返回,在递归解析树中每个传递执行的函数都会获取当前上传文对象中的MODE,并且会传入一个数组这个数组在每解析一个开始标签时进行压栈,解析一个结束标签时进行弹栈,这样就能实现对DOM树的结构解析,在递归下降函数中通过WHILE循环并判断如果VUE模版字符会部清空或者匹配到结束标签字符与数组栈中所有标签对比如果有相同则终止WHILE循环,否则进行判断文本模式是DATA或都是RCDATA则判断其相应的文本不使用几个函数解析对应的内容字符,如果字符中没有内容则当其做为文本解析直到文本模式改变,然后将解析的值层层归并出去当处理DATA模式中会有解析元素方法,其方法首先将字符中的标签解析出来,在解析过程中判断是否是自闭合标签如果是则加上自闭合属性true,关返回元素,如果标签名为textarea或者title时设置MODE 为RCDATA如果是style类时切换MODE为RAWTEXT否则切换为DATA,调用属性解析方法,其返回值为解析出来的属性数组每一个值为对象,对象中有属性类型,属性名称,属性值,,然后对元素进行压栈,然后调用新的解析,并将其返回值设置为当前元素解析方法中元素的children ,然后进行弹栈,之后判断当前字符紧跟着是否是当前标签的标签的结束标签如果是则解析结束标签前弹栈,否则提示缺少结束标签,最后返回当前元素,每解析一个内容就会将解析的内容从字符串清除,并清除当前空格,