個人的なプロジェクトとして、単純な 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
には 2 つの子 と がhead
ありbody
、それぞれに独自の子のリストがあります。
p
下部のタグを見ると、[span {class: $test-class} this]
角かっこを使用してインライン HTML 要素を示す行が表示されます。そのスパンは、 の子ノードとしてツリーに表示されますp
。
プログラムの実行の後半で、構築された構文ツリーに基づいて HTML ファイルを出力します。ただし、インライン HTML 要素が存在する場合にその HTML ファイルを作成するときに、メンタル ブロックにぶつかっています。
あなたへの私の質問: 親ノードがその子を参照する簡単な方法は何ですか?具体的には、コンパイルされたファイルを出力するときにブロック要素がその子のインライン要素からデータを取得できるようにする方法は?