From ee9a05d3c4fbdcb34777ae75a9ae1499b1098add Mon Sep 17 00:00:00 2001 From: Marcin Chrzanowski Date: Tue, 22 Aug 2017 15:15:07 -0400 Subject: Change arithmetic lexing - Rename tokens from symbols ('+', '-'), to words - Differentiate between symbols with and without surrounding whitespace - Update parser to work with new token names --- __tests__/lexer.test.js | 14 +++++++------- __tests__/parser.test.js | 4 ++-- src/lexer.js | 5 +++-- src/parser.js | 6 +++--- 4 files changed, 15 insertions(+), 14 deletions(-) diff --git a/__tests__/lexer.test.js b/__tests__/lexer.test.js index 04a95e1..76cb421 100644 --- a/__tests__/lexer.test.js +++ b/__tests__/lexer.test.js @@ -55,7 +55,7 @@ describe('lex', () => { { type: 'constant', value: 1 }, { type: 'd' }, { type: 'constant', value: 6 }, - { type: '+' }, + { type: 'bigPlus' }, { type: 'constant', value: 1 }, { type: 'd' }, { type: 'constant', value: 4 } @@ -67,7 +67,7 @@ describe('lex', () => { { type: 'constant', value: 2 }, { type: 'd' }, { type: 'constant', value: 17 }, - { type: '+' }, + { type: 'bigPlus' }, { type: 'constant', value: 4 } ]) }) @@ -79,7 +79,7 @@ describe('lex', () => { { type: 'constant', value: 1 }, { type: 'd' }, { type: 'constant', value: 6 }, - { type: '-' }, + { type: 'bigMinus' }, { type: 'constant', value: 1 }, { type: 'd' }, { type: 'constant', value: 4 } @@ -91,7 +91,7 @@ describe('lex', () => { { type: 'constant', value: 2 }, { type: 'd' }, { type: 'constant', value: 17 }, - { type: '-' }, + { type: 'bigMinus' }, { type: 'constant', value: 4 } ]) }) @@ -110,13 +110,13 @@ describe('lex', () => { ]) }) - it('2d(6+3)d4', () => { - expect(lex('2d(6+3)d4')).toEqual([ + it('2d(6 + 3)d4', () => { + expect(lex('2d(6 + 3)d4')).toEqual([ { type: 'constant', value: 2 }, { type: 'd' }, { type: '(' }, { type: 'constant', value: 6 }, - { type: '+' }, + { type: 'bigPlus' }, { type: 'constant', value: 3 }, { type: ')' }, { type: 'd' }, diff --git a/__tests__/parser.test.js b/__tests__/parser.test.js index fb554f9..bc88894 100644 --- a/__tests__/parser.test.js +++ b/__tests__/parser.test.js @@ -152,8 +152,8 @@ describe('parse', () => { }) }) - test('2d(6+3)d4', () => { - expect(parse('2d(6+3)d4')).toEqual({ + test('2d(6 + 3)d4', () => { + expect(parse('2d(6 + 3)d4')).toEqual({ type: 'd', left: { type: 'constant', value: 2 }, right: { diff --git a/src/lexer.js b/src/lexer.js index fd0d0a3..5831541 100644 --- a/src/lexer.js +++ b/src/lexer.js @@ -20,8 +20,9 @@ const newSkippableLexeme = (type, regex) => { newValueLexeme('constant', '\\d+', Number) newLexemeType('d', 'd') -newLexemeType('+', '\\+') -newLexemeType('-', '-') +newLexemeType('bigPlus', ' \\+ ' ) +newLexemeType('bigMinus', ' - ') +newLexemeType('minus', '-') newLexemeType('(', '\\(') newLexemeType(')', '\\)') newLexemeType('E', 'E') diff --git a/src/parser.js b/src/parser.js index fd974bc..588f480 100644 --- a/src/parser.js +++ b/src/parser.js @@ -63,9 +63,9 @@ newSymbol('d', (parser) => { newDieOperation('E') newDieOperation('K') -newInfix('+', 20, { type: 'add' }) -newInfix('-', 20, { type: 'subtract' }) -newSymbol('-', (parser) => { +newInfix('bigPlus', 20, { type: 'add' }) +newInfix('bigMinus', 20, { type: 'subtract' }) +newSymbol('minus', (parser) => { return { type: 'negative', value: parser.expression(40) -- cgit v1.2.3