"use strict"; const template = require( "../templates/editor" ); const input = ` // 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]* `; module.exports = () => template( { title: "Online Version", lib: "/vendor/pegjs/peg.js", input: input.trim(), } );