diff options
Diffstat (limited to 'cordova/node_modules/pegjs/examples/arithmetics.pegjs')
| -rw-r--r-- | cordova/node_modules/pegjs/examples/arithmetics.pegjs | 40 |
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]* |
