Mercurial > jsparser
diff jsparser.js @ 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 |
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});