From c5b9b7d03a37b807b212c29a9bdf7afc837c5423 Mon Sep 17 00:00:00 2001 From: Marcin Chrzanowski Date: Fri, 14 Jul 2017 23:34:55 -0400 Subject: Lex and parse parentheses --- src/lexer.js | 2 ++ src/parser.js | 8 ++++++++ 2 files changed, 10 insertions(+) (limited to 'src') diff --git a/src/lexer.js b/src/lexer.js index fd347c6..f559816 100644 --- a/src/lexer.js +++ b/src/lexer.js @@ -22,6 +22,8 @@ newValueLexeme('constant', '\\d+', Number) newLexemeType('d', 'd') newLexemeType('+', '\\+') newLexemeType('-', '-') +newLexemeType('(', '\\(') +newLexemeType(')', '\\)') newSkippableLexeme('whitespace', '\\s+') const lex = (expressionString) => { diff --git a/src/parser.js b/src/parser.js index 6c39c77..9f2c6ac 100644 --- a/src/parser.js +++ b/src/parser.js @@ -16,6 +16,14 @@ newSymbol('constant', function() { return { type: 'constant', value: this.value } }) +newSymbol('(', function(parser) { + const value = parser.expression(1) + parser.match(')') + return value +}) + +newSymbol(')') + newSymbol('d', null, 30, (left, parser) => { return { type: 'd', -- cgit v1.2.3