对于个人项目,我正在构建一个简单的HTML编译器。编译器读入模板文件,逐行解析,将每行添加到语法树作为单个节点。子节点由制表符缩进表示,类似于Python。这是一个示例模板文件:
$doctype
html {lang: $lang}
head
meta {charset: $encoding}
title Hello World!
body
h1 {class: $test-class, foo: $bar} Hello world!
p {class: $bar} How are you today? Is [span {class: $test-class} this] class total foobar?
对于此示例,doctype
标记将是树的根,html
是其唯一的子项。 html
又有两个孩子,head
和body
,每个孩子都有自己的孩子列表。
如果查看底部的p
标记,您会看到行[span {class: $test-class} this]
,使用方括号表示内联HTML元素。该跨度将在树中表示为p
的子节点。
稍后在程序执行中,我将基于构造的语法树输出HTML文件。但是,如果存在内联HTML元素,那么在构建HTML文件时,我会遇到一个心理障碍。
我的问题:父节点引用其子节点的简单方法是什么,特别是在输出编译文件时块元素可以从其子内联元素中提取数据的方式?