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.
45 lines
1.0 KiB
JavaScript
45 lines
1.0 KiB
JavaScript
5 years ago
|
"use strict";
|
||
|
|
||
|
const template = require( "../templates/editor" );
|
||
|
|
||
|
const input = `
|
||
|
|
||
6 years ago
|
// 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"
|
||
5 years ago
|
= [ \\t\\n\\r]*
|
||
|
|
||
|
`;
|
||
|
|
||
|
module.exports = () => template( {
|
||
|
title: "Online Version",
|
||
|
lib: "/vendor/pegjs/peg.js",
|
||
|
input: input.trim(),
|
||
|
} );
|