【发布时间】:2014-12-08 14:32:44
【问题描述】:
给定输入<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 = chars:(!EndTag .)* EndTag { return chars.join(""); }
但这还没有取得任何成功。
有什么想法吗?
【问题讨论】:
-
嘎——你改变了我的标签分隔符,你这个傻瓜! :)
-
糟糕,抱歉!这首先是一个错字。但它似乎仍然不起作用? peg.arcanis.fr/fwvT9/1
标签: javascript xml peg