语义分析器实现

  • 语法树操作
  • 映射语法树为虚拟 DOM

语法树

  • 由语法分析器输出
  • 遍历该树即可执行语言功能
  • 隐式语义计算:耦合在语法分析器中

渲染真实 DOM

  • render 函数
  • renderNode 函数

参考代码

function trim (str) { return str.replace(/^<|>$/g, '') }

function renderNode (target, nodes) {
  nodes.forEach(node => {
    let newNode = document.createElement(trim(node.type))
    if (!node.val) newNode = renderNode(newNode, node.children)
    else newNode.innerHTML = node.val
    target.appendChild(newNode)
  })
  return target
}

function render (dom, targetId) {
  let target = document.getElementById(targetId)
  target.innerHTML = ''
  renderNode(target, dom.children)
}