m-chrzan.xyz
aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarcin Chrzanowski <marcin.j.chrzanowski@gmail.com>2017-08-22 15:15:07 -0400
committerMarcin Chrzanowski <marcin.j.chrzanowski@gmail.com>2017-08-22 15:15:07 -0400
commitee9a05d3c4fbdcb34777ae75a9ae1499b1098add (patch)
tree46a48f46c10497a4b35b647edc96334a0f703fa8
parent56d36c9129292cd0dd0b5e79eea14d79a4219a94 (diff)
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
-rw-r--r--__tests__/lexer.test.js14
-rw-r--r--__tests__/parser.test.js4
-rw-r--r--src/lexer.js5
-rw-r--r--src/parser.js6
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)