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

PEG.js学习笔记

作者头像
IMWeb前端团队
发布于 2018-01-08 08:31:32
发布于 2018-01-08 08:31:32
1.2K00
代码可运行
举报
文章被收录于专栏:IMWeb前端团队IMWeb前端团队
运行总次数:0
代码可运行

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

PEG.js可以做什么?

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

安装

Node.js

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
npm install -g pegjs

Browser

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
bower install pegjs

生成解析器

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
pegjs xxx.pegjs

文法定义和语义

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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
代码运行次数:0
运行
AI代码解释
复制
pegjs lambda.pegjs

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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" 是描述信息,当你写的字符串不符合文法定义的时候,会根据描述信息生成对应的错误

后续会继续更新。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

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

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

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
手摸手实现一个编译器(上)
PEG.js 是一个简单的 JavaScript 解析器生成器,可以生成具有出色错误报告的快速解析器。您可以使用它来处理复杂的数据或计算机语言,并轻松构建转换器、解释器、编译器和其他工具。
码农小余
2022/06/16
8100
手摸手实现一个编译器(上)
lambda+reduce的一句艰深代码
一句话一脸懵逼 某天晚上看到一句lambda+reduce 组合的代码,看的头都炸了,愣是没看懂,不过也可能因为稀疏的脑神经经过一天的摧残已经运转不动了,这两天拿出来一看,一不留神理通了。 代码如下:
lonelydawn
2018/02/09
4760
lambda+reduce的一句艰深代码
AS3程序员小福利--as3js介绍及FlashDevelop工程的配置
IMWeb前端团队
2018/01/08
9600
AS3程序员小福利--as3js介绍及FlashDevelop工程的配置
从五大语言看函数和lambda表达式
张风捷特烈
2024/02/11
2100
从五大语言看函数和lambda表达式
简易理解设计模式之:解释器模式——语言和文法
先理解一些概念 语言: 指有限字符组成的字符串集合,也就是中文、英文、日语、德语…但对于程序员来说语言就是abcd这类字符了。
Twcat_tree
2022/11/29
4090
简易理解设计模式之:解释器模式——语言和文法
es6新语法+vue2的学习笔记分享
shigen
2023/09/15
2950
es6新语法+vue2的学习笔记分享
ES6篇(上)
前面文章所学均是ES5,而ES6就是提升,它提供了新的语法类型,接下来一起来认识一下吧🧐一、const1、概念声明常量,常量不可以重新赋值,不能改变<script> const BASE_URL = 'http' BASE_URL = 'baidu'</script>图片2、特点(1)当被修饰的表示符不会再次被赋值时,就可以用const保证数据的安全性(2)不可以重复声明,否则会报错<script> const BASE_URL = 'http' const BASE_URL = '
申小兮
2023/04/29
2730
ES6篇(上)
一篇文章把你带入到JavaScript中的闭包与高级函数
在JavaScript中,函数是一等公民。JavaScript是一门面向对象的编程语言,但是同时也有很多函数式编程的特性,如Lambda表达式,闭包,高阶函数等,函数式编程时一种编程范式。
达达前端
2019/11/19
8170
一篇文章把你带入到JavaScript中的闭包与高级函数
Javascript提升阶段学习
JavaScript 1:javascript简介   JavaScript是一种脚本语言,能实现网页内容的交互显示,当用户在客户端显示该网页时,浏览器就会执行JavaScript程序,用户通过交互
别先生
2017/12/29
1.3K0
每天3分钟,重学ES6-ES12(三)标签模版字符串
持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第13天,点击查看活动详情
虎妞先生
2022/10/27
4980
Stanford公开课《编译原理》学习笔记(2)递归下降法
课程里涉及到的内容讲的还是很清楚的,但个别地方有点脱节,建议课下自己配合经典著作《Compilers-priciples, Techniques and Tools》(也就是大名鼎鼎的龙书)作为补充阅读。
大史不说话
2019/10/08
1.1K0
Stanford公开课《编译原理》学习笔记(2)递归下降法
Vue之js的高阶函数
arr = [20,40,12,232,23,232]; 需求1:找出数组中数值低于100的元素,组成新数组并返回 需求2:对返回的数组中的每个元素都乘2 需求3:汇总元素,将每一个元素相加并返回新数组。
yuanshuai
2022/08/22
4200
Vue之js的高阶函数
JS手撕(六) trim、模板字符串、千分位分隔符
核心就是/^\s+|\s+$/这一段正则表达式,它会匹配字符串前后的空格,然后通过replace()把匹配到的部分替换成空串。
赤蓝紫
2023/01/01
1.6K0
ES6-语法基础
箭头函数是把函数简写成一个表达式;如果只有一个参数,()可以省略;如果只有一个行,{ }可以省略,return 可以省略。
用户10175992
2022/11/15
4960
ES6-语法基础
学习表达式树笔记 原
文章地址:  http://www.cnblogs.com/Ninputer/archive/2009/08/28/expression_tree1.html
申君健
2018/09/21
4580
前端学习笔记
2d转换和3d转换的区别: 参数 多了一个 3d 手机一般有3d 渲染引擎(GPU)更快
Fivecc
2022/11/21
1.4K0
ES6特性总结
ECMAScript6.0(以下简称ES6,ECMAScript是一种由Ecma国际(前身为欧洲计算机制造商协会,英文名称是EuropeanComputerManufacturersAssociation)通过ECMA-262标准化的脚本程序设计语言)是JavaScript语言的下一代标准,已经在2015年6月正式发布了,并且从ECMAScript6开始,开始采用年号来做版本。即ECMAScript2015,就是ECMAScript6。它的目标,是使得JavaScript语言可以用来编写复杂的大型应用程序,成为企业级开发语言。每年一个新版本。
后端码匠
2021/02/20
2.2K0
设计模式-解释器模式
解释器模式 解释器(Interpreter)模式的定义:给分析对象定义一个语言,并定义该语言的文法表示,再设计一个解析器来解释语言中的句子。也就是说,用编译语言的方式来分析应用中的实例。这种模式实现了文法表达式处理的接口,该接口解释一个特定的上下文。 1.优点 扩展性好。由于在解释器模式中使用类来表示语言的文法规则,因此可以通过继承等机制来改变或扩展文法。 容易实现。在语法树中的每个表达式节点类都是相似的,所以实现其文法较为容易。 2.缺点 执行效率较低。解释器模式中通常使用大量的循环和递归调用,当
cwl_java
2019/10/26
2910
JAVA保姆式上手教程之JAVAWEB day01-js基础
张哥编程
2024/12/13
620
手撕常见JS面试题
高阶函数实现AOP(面向切面编程) Function.prototype.before = function (beforefn) { let _self = this; // 缓存原函数的引用 returnfunction () { // 代理函数 beforefn.apply(this, arguments); // 执行前置函数 return _self.apply(this, arguments); // 执行原函数
helloworld1024
2022/10/14
5530
相关推荐
手摸手实现一个编译器(上)
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验