changeset 7:e758b89c7c92

added support for parentheses
author Atul Varma <varmaa@toolness.com>
date Sat, 30 May 2009 15:26:31 -0700
parents d62acb57d95b
children 0c62f0d3ddf7
files jsparser.js
diffstat 1 files changed, 16 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/jsparser.js	Sat May 30 13:36:15 2009 -0700
+++ b/jsparser.js	Sat May 30 15:26:31 2009 -0700
@@ -141,7 +141,10 @@
 
   tokens.reverse();
 
-  this.advance = function advance() {
+  this.advance = function advance(expectedToken) {
+    if (expectedToken && self.token.name != expectedToken)
+      throw new Error("Expected " + expectedToken + " but found " +
+                      self.token.name);
     self.token = tokens.pop();
   };
 
@@ -173,6 +176,17 @@
                                  match: '-',
                                  leftBindingPower: 60}),
 
+    new Parsing.Symbol({name: 'leftParenthesis',
+                        match: '(',
+                        nullDenotation: function(parser) {
+                          var contents = parser.expression(0);
+                          parser.advance('rightParenthesis');
+                          return contents;
+                        }}),
+
+    new Parsing.Symbol({name: 'rightParenthesis',
+                        match: ')'}),
+
     new Parsing.BinaryOp({name: 'multiply',
                           match: '*',
                           leftBindingPower: 70}),
@@ -195,7 +209,7 @@
                         ignore: true})
   ];
 
-  var code = '5+1-3 * 4+       \n     -4';
+  var code = '5+(1-3) * 4+       \n     -4';
   var tokens = Parsing.tokenize({lexicon: MyLexicon,
                                  text: code});