aboutsummaryrefslogtreecommitdiff
path: root/cordova/node_modules/pegjs/examples/arithmetics.pegjs
diff options
context:
space:
mode:
Diffstat (limited to 'cordova/node_modules/pegjs/examples/arithmetics.pegjs')
-rw-r--r--cordova/node_modules/pegjs/examples/arithmetics.pegjs40
1 files changed, 40 insertions, 0 deletions
diff --git a/cordova/node_modules/pegjs/examples/arithmetics.pegjs b/cordova/node_modules/pegjs/examples/arithmetics.pegjs
new file mode 100644
index 0000000..e7bdc44
--- /dev/null
+++ b/cordova/node_modules/pegjs/examples/arithmetics.pegjs
@@ -0,0 +1,40 @@
+/*
+ * Simple Arithmetics Grammar
+ * ==========================
+ *
+ * Accepts expressions like "2 * (3 + 4)" and computes their value.
+ */
+
+Expression
+ = head:Term tail:(_ ("+" / "-") _ Term)* {
+ var result = head, i;
+
+ for (i = 0; i < tail.length; i++) {
+ if (tail[i][1] === "+") { result += tail[i][3]; }
+ if (tail[i][1] === "-") { result -= tail[i][3]; }
+ }
+
+ return result;
+ }
+
+Term
+ = head:Factor tail:(_ ("*" / "/") _ Factor)* {
+ var result = head, i;
+
+ for (i = 0; i < tail.length; i++) {
+ if (tail[i][1] === "*") { result *= tail[i][3]; }
+ if (tail[i][1] === "/") { result /= tail[i][3]; }
+ }
+
+ return result;
+ }
+
+Factor
+ = "(" _ expr:Expression _ ")" { return expr; }
+ / Integer
+
+Integer "integer"
+ = [0-9]+ { return parseInt(text(), 10); }
+
+_ "whitespace"
+ = [ \t\n\r]*