本文作者:IMWeb 黄龙 原文出处:IMWeb社区 未经同意,禁止转载
PEG.js 是一个JavaScript的表达式语法解析器,它使您能够轻松地建立复杂的数据或计算机程序语言的快速分析器。
Node.js
npm install -g pegjs
Browser
bower install pegjs
pegjs xxx.pegjs
上面的都没有什么卵用。我们能拿它来干啥?写一个简单的lambda表达式练手吧
lambda
= left:exp1 "=>" right:exp2 { return new Function(left,"return "+right);}
var "变量"
= strs:[a-zA-Z0-9]+ { return text(); }
exp1 "左侧表达式"
= var ("," var)* {return text();}
exp2 "右侧表达式"
= .+ {return text();}
保存为lambda.pegjs
pegjs lambda.pegjs
就会生成一个lambda.js的文件 在node里面我们就可以这样使用它
var lambda = require("./lambda");
var func=lambda.parse("a,b,c=>a+b+c;");
console.log(func(2,4,4)); //10
//例子:查找数组中大于3小于9的所有数的和
var lp=lambda.parse
,arr=[9,2,4,6,7,8,1,0]
,sum=0;
//lambda表达式写成一行
sum = arr.filter(lp(" a =>a>3&&a<9")).reduce(lp(" a ,b ,c ,d=> a + b"));
console.log(sum);//25
//标准写法
sum = arr.filter(function(a){
return a>3&&a<9;
}).reduce(function(a,b,c,d){
return a+b;
});
console.log(sum);//25
由于PEG.js的中文文档不多,学习起来还是挺费劲的。总结了几个规律仅供参考。
后续会继续更新。