带有预定义函数和变量的PEG.js扩展
PEG.js extension with predefined functions and variables
我已经了解了用于JavaScript的PEG.js语法分析器生成器。它看起来很漂亮!
我在指定语法方面没有太多经验。我正在寻找帮助,将示例语法扩展到1位,以允许
- 十进制数字
- 操作员^
- 预定义函数(不是函数声明,只是为了调用我预先指定的一些函数),其中参数本身是一阶表达式,例如f(g(2+4)+3)
- 变量A-Z(不是声明,只是用法定义——这些是指指向一个也包含程序的输入框,字母A到Z就足够了)
你能帮我在哪里找到帮助吗?
下面是快速演示:
{
variables = {
PI : Math.PI,
E : Math.E
};
functions = {
squared : function(n) { return n * n; },
incr : function(n) { return n + 1; }
}
}
start
= additive
additive
= left:multiplicative "+" right:additive { return left + right; }
/ multiplicative
multiplicative
= left:power "*" right:additive { return left * right; }
/ power
// evaluated left to right!
power
= left:primary "^" right:additive { return Math.pow(left, right); }
/ primary
primary
= integer
/ "(" e:additive ")" { return e; }
/ i:id "(" e:additive ")" { return functions[i.join("")](e); }
/ i:id { return variables[i.join("")]; }
integer
= digits:[0-9]+ { return parseInt(digits.join(""), 10); }
id
= [a-zA-Z]+
如果您现在使用以下输入测试解析器(在线):
PI+incr(squared(3))^2
你会看到它被评估为:
103.1415926535898
{
variables = {
PI : Math.PI,
E : Math.E
};
functions = {
squared : function(n) { return n * n; },
incr : function(n) { return n + 1; }
}
}
start
= additive
additive
= left:multiplicative "+" right:additive { return left + right; }
/ multiplicative
multiplicative
= left:power "*" right:power { return left * right; }
/ power
// evaluated left to right!
power
= left:primary "^" right:primary { return Math.pow(left, right); }
/ primary
primary
= number
/ integer
/ "(" e:additive ")" { return e; }
/ i:id "(" e:additive ")" { return functions[i.join("")](e); }
/ i:id { return variables[i.join("")]; }
number_frac
= "." chars:[0-9]* { return "." + chars.join(''); }
number
= chars:[0-9]+ frac:number_frac? { return parseFloat(chars.join('') + frac); }
integer
= digits:[0-9]+ { return parseInt(digits.join(""), 10); }
id
= [a-zA-Z]+
相关文章:
- 可以't让我的if语句处理js中的html表单输入
- 使用agility.js进行页面布局和合成
- 使用Clipboard.js复制span文本
- 使用JS如何动态更改显示的html文件中的文本背景颜色
- 强制模板刷新ember.js
- 如何编写HTML输入的JS内联
- Angular JS IE9 Hashbang url rewriting
- 使用JS将数组转换为json对象
- 使用 PEG.js 解析缩进级别
- 为 STRING 创建一个语法表达式.字符串.PEG上的绳子.js
- 使用 PEG.js 解析完整的数学表达式
- 如何在PEG中制作可选词.js
- PEG.JS解析逻辑变量名称,其操作数和值
- 带有预定义函数和变量的PEG.js扩展
- 使用peg.js进行XML单节点解析
- 使用peg.js进行反向引用
- 允许在PEG.js语法定义中使用引号和unicode
- 指定PEG.js中的数量
- 在PEG.js中忽略空白
- 在PEG.js中测试所有备选模式