gpt4 book ai didi

javascript - 使用 peg.js 进行反向引用

转载 作者:行者123 更新时间:2023-11-28 00:57:18 25 4
gpt4 key购买 nike

给定输入[tag]内容[inner-tag]内部[/inner-tag][/tag],我如何验证是否存在结束[/tag]与 [tag] 匹配的

现在我的规则检查下一个直接标记是否与最后一个开始标记匹配:

tagblock =
opentag:opentag content:content? closetag:closetag
{ if(opentag.name != closetag.name) {
throw new this.SyntaxError("No closing tag found for " + opentag.name);
} else {
return { name:opentag.name, content:content }
}
}

这适用于[tag]内容[/tag],但不适用于上面的嵌套输入。

如何使用 peg.js 处理这样的内部递归?

最佳答案

这是我想出的一个。

Content =
(Element / Text)*

Element =
startTag:sTag content:Content endTag:eTag {
if (startTag != endTag) {
throw new Error(
"Expected [/" + startTag + "] but [/" + endTag + "] found."
);
}

return {
name: startTag,
content: content
};
}

sTag =
"[" name:TagName "]" { return name; }

eTag =
"[/" name:TagName "]" { return name; }

TagName = chars:[a-z-]+ { return chars.join(""); }
Text = chars:[^[]+ { return chars.join(""); }

将其加载到nodejs后:

var PEG=require('./markup.js'); 
var str = '[tag] Content [inner-tag] Inner [/inner-tag][/tag]';
PEG.parse(str);

结果是:

[ { name: 'tag',
content: [
' Content ',
{ name: 'inner-tag',
content: [ ' Inner ' ] }
]
} ]

关于javascript - 使用 peg.js 进行反向引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26083300/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com