-
Notifications
You must be signed in to change notification settings - Fork 0
Lite PEG
duangsuse edited this page May 7, 2018
·
6 revisions
Work in progress, 也有可能不会出,因为 duangsuse 现在还太菜,不会用解析器生成器, 垃圾 @duangsuse
- PEG 是什么?
P arser E xpression G rammar, 一种描述解析器语法规则的语法
- 看起来怎么样?
// Simple Arithmetics Grammar
// ==========================
//
// Accepts expressions like "2 * (3 + 4)" and computes their value.
Expression
= head:Term tail:(_ ("+" / "-") _ Term)* {
return tail.reduce(function(result, element) {
if (element[1] === "+") { return result + element[3]; }
if (element[1] === "-") { return result - element[3]; }
}, head);
}
Term
= head:Factor tail:(_ ("*" / "/") _ Factor)* {
return tail.reduce(function(result, element) {
if (element[1] === "*") { return result * element[3]; }
if (element[1] === "/") { return result / element[3]; }
}, head);
}
Factor
= "(" _ expr:Expression _ ")" { return expr; }
/ Integer
Integer "integer"
= _ [0-9]+ { return parseInt(text(), 10); }
_ "whitespace"
= [ \t\n\r]*
能吃吗
不能吃呦 😺