给定输入<outer> Content <inner> Inner <single/> </inner> </outer>
。
我将如何编写语法来解析<single>
节点以及具有匹配关闭节点的节点?
这是我目前的语法,取自这里:
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 = chars:(!EndTag .)* EndTag { return chars.join(""); }
但这还没有取得任何成功。
有任何想法吗?