入力が与えられます<outer> Content <inner> Inner <single/> </inner> </outer>
。
<single>
一致する終了ノードを持つノードとともにノードを解析する文法をどのように記述しますか?
hereから取得した現在の文法は次のとおりです。
Content =
(Element / Text)*
Element =
startTag:StartTag content:Content endTag:EndTag {
if (startTag != endTag) {
throw new Error(
"Expected </" + startTag + "> but </" + endTag + "> found."
);
}
return {
name: startTag,
content: content
};
}
StartTag =
"<" name:TagName ">" { return name; }
EndTag =
"</" name:TagName ">" { return name; }
TagName = chars:[a-z]+ { return chars.join(""); }
Text = chars:[^<]+ { return chars.join(""); }
これは、終了ノードを持つノードでのみ機能します。
問題は Text ルールにあると思います。だから私はそれを変更して、次のような否定的な先読みを含めることを実験してきました:
Text = chars:(!EndTag .)* EndTag { return chars.join(""); }
しかし、それはまだ成功したものをもたらしていません。
何か案は?