From de517d06737f77a0cfc818c159b388b4e0c4d6b1 Mon Sep 17 00:00:00 2001 From: Marcin Chrzanowski Date: Fri, 14 Jul 2017 23:35:23 -0400 Subject: Lex and parse negatives --- src/parser.js | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/parser.js b/src/parser.js index 9f2c6ac..5b9b718 100644 --- a/src/parser.js +++ b/src/parser.js @@ -40,7 +40,12 @@ newSymbol('+', null, 20, (left, parser) => { } }) -newSymbol('-', null, 20, (left, parser) => { +newSymbol('-', (parser) => { + return { + type: 'negative', + value: parser.expression(40) + } +}, 20, (left, parser) => { return { type: 'subtract', left: left, @@ -56,10 +61,17 @@ const newParser = (tokens) => { currentToken: 0, token: function() { return this.tokens[this.currentToken] }, advanceToken: function() { this.currentToken++ }, + match: function(token) { + if (this.token().type === token) { + this.advanceToken() + } else { + throw 'error' + } + }, expression: function(rbp) { let symbol = this.token() - let left = symbol.nud() this.advanceToken() + let left = symbol.nud(this) while (rbp < this.token().lbp) { symbol = this.token() -- cgit v1.2.3