gpt4 book ai didi

javascript - PEGjs:请求定义算术函数的帮助/指南

转载 作者:行者123 更新时间:2023-12-02 15:25:19 26 4
gpt4 key购买 nike

我正在学习 PEGjs 语法,我请求以下方面的帮助或指导:

我有诸如 PRODUCT()、SUM()、DIVIDE() 之类的函数

PRODUCT 可以将数字/PRODUCT()/SUM()/DIVIDE() 作为参数(任何数字,但以逗号分隔)

ex: PRODUCT(2, 5, SUM(5, 6, 7), DIVIDE(5, 2), PRODUCT(4, 6, 20, 12))

与 SUM 相同,可以采用任意数量的以逗号分隔的参数。

Ex: SUM(4, 5, 10, DIVIDE(SUM(2, 5, 6), 3))

DIVIDE 将采用两个参数(必须 2 个)、数字或其他函数

Ex: DIVIDE(3, PRODUCT(3, 4, SUM(2, 3)))

有人可以帮助或指导我如何实现这一目标吗?

到目前为止我的规则

start = sum
/multiply

multiply = "PRODUCT("a:digit "," __ b:digit ")" {return a * b}

sum = "SUM("a:digit "," b:digit ")" {return a + b}

digit = [0-9]

__ = WhiteSpace*

WhiteSpace "whitespace"
= [ \t\r\n]

上述规则仅支持两个数字的乘积/和。如何才能实现上述目标?

提前致谢曼朱纳特·雷迪

最佳答案

良好的开始,但您需要弄清楚如何解析参数列表并进行更多递归。

我发现最好的学习方法是通过示例 ( https://github.com/pegjs/pegjs/tree/master/examples )。

online editor 中尝试此操作:

start
= sum
/ multiply
/ divide

multiply
= "PRODUCT(" _ args:arguments _ ")" { return args.reduce(function(a,b) {return a*b;}); }

sum
= "SUM(" _ args:arguments _ ")" { return args.reduce(function(a,b) {return a+b;}); }

divide
= "DIVIDE(" _ dividend:argument _ "," _ divisor:argument _ ")" { return dividend / divisor; }

arguments
= first:argument rest:(_ ',' _ arg:argument { return arg; })* { return [first].concat(rest); }

argument
= multiply
/ sum
/ divide
/ number

number
= digits:(digit)+ { return parseInt(digits.join(''), 10); }

digit = [0-9]

_ "optionalWhitespace"
= whitespace *

whitespace
= [ \t\n\r]+

示例:

PRODUCT(2, 5, SUM(5, 6, 7), DIVIDE(5, 2), PRODUCT(4, 6, 20, 12))
2592000
SUM(4, 5, 10, DIVIDE(SUM(2, 5, 6), 3))
23.333333333333332
DIVIDE(3, PRODUCT(3, 4, SUM(2, 3)))
0.05

关于javascript - PEGjs:请求定义算术函数的帮助/指南,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33739868/

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