前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >PEG.js学习笔记

PEG.js学习笔记

作者头像
IMWeb前端团队
发布2019-12-03 18:28:07
7530
发布2019-12-03 18:28:07
举报
文章被收录于专栏:IMWeb前端团队IMWeb前端团队

本文作者:IMWeb 黄龙 原文出处:IMWeb社区 未经同意,禁止转载

PEG.js可以做什么?

PEG.js 是一个JavaScript的表达式语法解析器,它使您能够轻松地建立复杂的数据或计算机程序语言的快速分析器。

安装

Node.js

代码语言:javascript
复制
npm install -g pegjs

Browser

代码语言:javascript
复制
bower install pegjs

生成解析器

代码语言:javascript
复制
pegjs xxx.pegjs

文法定义和语义

上面的都没有什么卵用。我们能拿它来干啥?写一个简单的lambda表达式练手吧

代码语言:javascript
复制
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

代码语言:javascript
复制
pegjs lambda.pegjs

就会生成一个lambda.js的文件 在node里面我们就可以这样使用它

代码语言:javascript
复制
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的中文文档不多,学习起来还是挺费劲的。总结了几个规律仅供参考。

  1. a:b 表达式 可以理解为取别名 在后面a就可以替代b
  2. text()方法 取值
  3. \ 表示或者
  4. "xxx" 是描述信息,当你写的字符串不符合文法定义的时候,会根据描述信息生成对应的错误

后续会继续更新。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2015-09-22 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • PEG.js可以做什么?
    • 安装
      • 生成解析器
        • 文法定义和语义
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档