gpt4 book ai didi

javascript - 帮助创建 peg.js 解析器

转载 作者:数据小太阳 更新时间:2023-10-29 04:58:37 25 4
gpt4 key购买 nike

我想在 peg.js 中创建解析器和表达式语法,以允许我执行这些操作

基本上我想传入一个掩码并输出一个数字。

面具具有这些能力。

1) 生成一个0-9之间的随机数(字符n for expression?)
2) 在x和y之间生成一个随机数( (x,y) for expression?)
3) 字面数字是有效的(希望不需要表达什么?)
4) 重复之前的表达式 x 次({x} for expression?)
5) 在 x 和 y 之间重复之前的表达式 ({x,y} for expression?)

所以一个示例表达式可以是

027n(5,9){4}n12{2,8}(2,4)

上面建议的表达式语法只是一个例子,它可以改变。

任何人都可以在 peg.js 中为此创建解析器提供帮助吗? ?

最佳答案

想法是让它生成一个 JavaScript 函数,该函数在执行时会根据掩码返回一个随机字符串。

文字数字是 0 到 9 之间的任何字符,所以让它生成一个返回自身的函数。

literal_number
= num:[0-9]
{ return function() {
return num;
}; }

那么n就是一个随机数。同样,这会生成一个返回随机数的函数。我添加了 + '' 以在返回之前将其转换为字符串。

random_number
= "n"
{ return function() {
return Math.floor(Math.random() * 10) + '';
}; }

(a,b)语法中,ab是数字,所以我们需要让它解析并返回一个数字.使用计算器示例中的声明:

number
= digits:[0-9]+ { return parseInt(digits.join(""), 10); }

然后我们可以继续为 (a,b) 语法创建规则。

random_number_between
= "(" a:number "," b:number ")"
{ return function() {
return a + Math.floor(Math.random() * (b - a + 1)) + ''
}; }

因此,这 3 个东西(literal_number、random_number、random_number_between)组合成一个生成有效函数的表达式。

single_expression
= random_number
/ random_number_between
/ literal_number

单个表达式,后跟 {n}{a,b} 形成重复表达式。单个表达式也是重复表达式,重复一次。

重复表达式的思想是,给定一个函数,返回一个调用输入函数N次的函数,收集结果并返回。

repeated_expression
= ex:single_expression "{" n:number "}" {
return function() {
var result = '';
for (var i = 0; i < n; i ++) {
result += ex();
}
return result;
};
}
/ ex:single_expression "{" a:number "," b:number "}" {
return function() {
var result = '';
var n = a + Math.floor(Math.random() * (b - a + 1))
for (var i = 0; i < n; i ++) {
result += ex();
}
return result;
};
}
/ ex:single_expression

最后,重复的表达式可以并排放置。

expression
= list:repeated_expression* {
return function() {
var result = '';
for (var i = 0; i < list.length; i ++) {
result += list[i]();
}
return result;
};
}

最后,您需要一个起点,它定义了一个 mask 。最后一位扫描返回一个生成函数的表达式,并调用它。 将下面的放在最上面,当你在线尝试时,它会根据你的掩码生成一串数字。

mask
= ex:expression
{ return ex() }

示例运行:027n(5,9){4}n12{2,8}(2,4) 给出 0271568891222224

关于javascript - 帮助创建 peg.js 解析器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5241264/

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