但是仅使用正则表达式来解析,会发现非常难以阅读,可维护性比较差,而PegJs 则是一种更加简便可维护的 parser 工具。 下面是基于PegJS语法的一个官方示例,它的语法有这样两个特点: PegJS的语法由一组规则组成,从上至下进行解析。 默认情况下,使用了+和* 匹配出的结果会返回一个数组,PegJS 提供在表达式中通过变量名和一个format函数来自定义返回值。 number = float / integer 为避免歧义,如果定义规则start = a / b,当输入即可以匹配a也可以匹配b,那么PegJS则优先使用a来进行解析。 interface.png 最后,将struct规则和interface规则进行整合后,就可以得到一个简单的Pegjs语法的JCE解析器了。
安装 Node.js npm install -g pegjs Browser bower install pegjs 生成解析器 pegjs xxx.pegjs 文法定义和语义 上面的都没有什么卵用。 exp1 "左侧表达式" = var ("," var)* {return text();} exp2 "右侧表达式" = .+ {return text();} 保存为lambda.pegjs pegjs lambda.pegjs 就会生成一个lambda.js的文件 在node里面我们就可以这样使用它 var lambda = require(".
安装 Node.js npm install -g pegjs Browser bower install pegjs 生成解析器 pegjs xxx.pegjs 文法定义和语义 上面的都没有什么卵用。 exp1 "左侧表达式" = var ("," var)* {return text();} exp2 "右侧表达式" = .+ {return text();} 保存为lambda.pegjs pegjs lambda.pegjs 就会生成一个lambda.js的文件 在node里面我们就可以这样使用它 var lambda = require(".
,因为你要引入包 npm install pegjs 本文就只演示 CLI 去生成编译器的用法,JavaScript API 在官方文档中有说明,参数都是一致的。 /simple-arithmetics.pegjs 那么生成的解析器会以 middle 作为语法入口,我们测试一下: const { parse } = require('. /simple-arithmetics.pegjs 生成的解析器再来解析上述代码: const { parse } = require('. { return parseFloat(text()); } 到这里就把 PEG.js 中才有的表达式结合 json.pegjs 过了一遍,了解完它们的基本用法。 最后基于 json.pegjs 去详细分析了解析表达式的用法。
验证 最后,将上述规则生成编译器: npx pegjs -o zh-template-compiler.js src/zh-template-compiler.pegjs 文章开头的 生成的 AST
另外也有一些根据文法自动生成 parser 的库,比如兼容多语言的 antlr4 或者对 js 支持比较友好的 pegjs。