gpt4 book ai didi

peg - 使用 PEG.js 进行简单的搜索/替换

转载 作者:行者123 更新时间:2023-12-04 16:48:06 26 4
gpt4 key购买 nike

我试图了解如何使用 PEG.js 在文本中进行简单的搜索/替换。当然,这不是解析器的预期用途,但无论如何我对这些语言背后的逻辑感到好奇,以产生一些搜索/替换。

我遇到的问题是很难积极定义某些定义的互补性。一个例子:想象一下我想搜索和替换这样的语法:

rule = (whatever_is_not_my_syntax* m:my_syntax)+ {replace m}
word = [a-z0-9_]+
my_syntax = word "." word
whatever_is_not_my_syntax = ???

很难正面描述什么是 whatever_is_not_my_syntax在 PEG.js 中没有与 my_syntax 部分冲突(以及随之而来的解析器错误) ,或者至少我不知道该怎么做,因为 PEG.js 上唯一的否定解析器函数是 !expression[^characters] .

你能帮助我吗?如果存在关于此主题的任何书籍或引用书目,我将不胜感激。先感谢您。

最佳答案

您不必指定语法中没有的内容。首先尝试匹配您的语法,然后再进行其他任何操作。

这里rule是语法中所有模式的列表。当不匹配时,other将匹配。

expr =
a:rule " " b:expr
{return [a].concat(b)}
/ a:rule
{return [a]}
/ a:other " " b:expr
{return [a].concat(b)}
/ a:other
{return [a]}

word =
a:[a-z0-9_]+
{return a.join("")}

rule =
word "." word
{return "rule1"} // Put replace logic here
/ word ":" word
{return "rule2"} // Put replace logic here

other =
word
{return "other"}

您可以在线试用: http://pegjs.org/online

关于peg - 使用 PEG.js 进行简单的搜索/替换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34831734/

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