作家
登录

AST解析基础: 如何写一个简单的html语法分析库

作者: 来源: 2017-08-22 09:25:22 阅读 我要评论

  •     | null;                 // 如不雅肇端标签未停止, 则为null 
  •   close: IText              // 封闭标签部分, 存在则为一个文本节点 
  •     | void                  // 自闭合的标签没有封闭部分 
  •     | null;                 // 非自闭合标签, 然则没有封闭标签部分 
    1. export function parse(input: string): INode[] { 
    2.   init(input) 
    3.   while (index < count) { 
    4.     token = tokens[index
    5.     switch (token.type) { 
    6.       case TokenKind.Literal: 
    7.         if (!node) { 
    8.           node = createLiteral() 
    9.           pushNode(node) 
    10.         } else { 
    11.           appendLiteral(node) 
    12.         } 
    13.         break 
    14.       case TokenKind.OpenTag: 
    15.         node = void 0 
    16.         par搜刮引擎优化penTag() 
    17.         break 
    18.       case TokenKind.CloseTag: 
    19.         node = void 0 
    20.         parseCloseTag() 
    21.         break 
    22.       default
    23.         unexpected() 
    24.         break 
    25.     } 
    26.     index++ 
    27.   } 
    28.   const _nodes = nodes 
    29.   init() 
    30.   return _nodes 

    标签的属性是一个键值对, 包含名称 name 及值 value 部分, 定义构造如下:

    个中名称是通俗的文本节点, 然则值比较特别, 表示在其可能被单/双引号包起来, 而引号是无意义的, 是以定义一个标签值构造:

    Token解析

    AST解析起首须要解析原始文本获得符号列表, 然后再经由过程高低文语境分析获得最终的语法树.

    Token分析时并没有推敲属性的键/值关系, 均同一视为属性中的一个片段, 同时, 视 = 为一个

    相对于JSON, html固然看起来简单, 然则高低文是必须的, 所以固然JSON可以直接经由过程token分析获得最终的结不雅, 然则html却不克不及, token分析是第一步, 这是必须的. (JSON解析可以参考我的另一篇文┞仿: 徒手写一个JSON解析器(Golang) ).

    token解析时, 须要根据当前的状况来分析token的含义, 然后得出一个token列表.


      推荐阅读

      传统IT七大职业的云计算转型之路

    【51CTO晃荡】8.26 带你与清华大年夜学、搜狗、京东大年夜咖们一路商量基于算法的IT运维实践 对于体系治理员来说,云职业之路要大年夜转移到云运算,做一名cloudop开端。这是云运算中的一>>>详细阅读


    本文标题:AST解析基础: 如何写一个简单的html语法分析库

    地址:http://www.17bianji.com/lsqh/36839.html

    关键词: 探索发现

    乐购科技部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与乐购科技进行文章共享合作。

    网友点评
    自媒体专栏

    评论

    热度

    精彩导读
    栏目ID=71的表不存在(操作类型=0)