You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
pegjs/examples/arithmetics.pegjs

31 lines
779 B
Plaintext

// Simple Arithmetics Grammar
// ==========================
//
// Accepts expressions like "2 * (3 + 4)" and computes their value.
14 years ago
Expression
= head:Term tail:(_ @("+" / "-") _ @Term)* {
return tail.reduce(function(result, [operator, factor]) {
if (operator === "+") return result + factor;
if (operator === "-") return result - factor;
}, head);
}
14 years ago
Term
= head:Factor tail:(_ @("*" / "/") _ @Factor)* {
return tail.reduce(function(result, [operator, factor]) {
if (operator === "*") return result * factor;
if (operator === "/") return result / factor;
}, head);
}
Factor
= "(" _ @Expression _ ")"
/ Integer
Integer "integer"
= _ [0-9]+ { return parseInt(text(), 10); }
_ "whitespace"
= [ \t\n\r]*