Javascript PEGjs:请求定义算术函数的帮助/指南
我正在学习PEGjs语法,我请求以下方面的帮助或指导: 我的函数有,Javascript PEGjs:请求定义算术函数的帮助/指南,javascript,context-free-grammar,pegjs,Javascript,Context Free Grammar,Pegjs,我正在学习PEGjs语法,我请求以下方面的帮助或指导: 我的函数有,PRODUCT()、SUM()、DIVIDE() PRODUCT可以使用number/PRODUCT()/SUM()/DIVIDE()作为参数(除逗号分隔外的任何数字) 同样的方法,总和可以接受任何数量的参数,这些参数用逗号分隔 Ex: SUM(4, 5, 10, DIVIDE(SUM(2, 5, 6), 3)) “除法”将采用两个参数(2个必须)、数字或其他函数 Ex: DIVIDE(3, PRODUCT(3, 4, SUM
PRODUCT()、SUM()、DIVIDE()
PRODUCT可以使用number/PRODUCT()/SUM()/DIVIDE(
)作为参数(除逗号分隔外的任何数字)
同样的方法,总和可以接受任何数量的参数,这些参数用逗号分隔
Ex: SUM(4, 5, 10, DIVIDE(SUM(2, 5, 6), 3))
“除法”将采用两个参数(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]
上述规则仅支持两个数字的乘积/和。我怎样才能实现上述目标
提前谢谢
Manjunath Reddy这是一个很好的开始,但您需要弄清楚如何解析参数列表并进行更多的递归 我发现最好的学习方法是通过例子() 请尝试以下步骤: 示例:
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
通常,如果您想要解析一个无界列表,例如
1, 2, 3, 4
您可以按如下方式创建递归规则:
args = head:Integer rest:(_ "," _ r:args{ return r; })? {
return rest != null ? [head].concat(rest) : [head];
}
Integer = [0-9]+ { return parseInt(text(), 10); }
_ = [ \t\n\r]*
非常感谢你的帮助。
1, 2, 3, 4
args = head:Integer rest:(_ "," _ r:args{ return r; })? {
return rest != null ? [head].concat(rest) : [head];
}
Integer = [0-9]+ { return parseInt(text(), 10); }
_ = [ \t\n\r]*