m-chrzan.xyz
aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--__tests__/parser.test.js24
-rw-r--r--src/parser.js8
2 files changed, 32 insertions, 0 deletions
diff --git a/__tests__/parser.test.js b/__tests__/parser.test.js
index 004e18b..b0dc28d 100644
--- a/__tests__/parser.test.js
+++ b/__tests__/parser.test.js
@@ -32,4 +32,28 @@ describe('parse', () => {
}
})
})
+
+ it('parses constant addition', () => {
+ expect(parse('1 + 2')).toEqual({
+ type: 'add',
+ left: { type: 'constant', value: 1 },
+ right: { type: 'constant', value: 2 }
+ })
+ })
+
+ it('parses dice addition', () => {
+ expect(parse('1d6 + 2d8')).toEqual({
+ type: 'add',
+ left: {
+ type: 'd',
+ left: { type: 'constant', value: 1 },
+ right: { type: 'constant', value: 6 }
+ },
+ right: {
+ type: 'd',
+ left: { type: 'constant', value: 2 },
+ right: { type: 'constant', value: 8 }
+ }
+ })
+ })
})
diff --git a/src/parser.js b/src/parser.js
index 01b5494..c7d91c3 100644
--- a/src/parser.js
+++ b/src/parser.js
@@ -24,6 +24,14 @@ newSymbol('d', null, 30, (left, parser) => {
}
})
+newSymbol('+', null, 20, (left, parser) => {
+ return {
+ type: 'add',
+ left: left,
+ right: parser.expression(20)
+ }
+})
+
newSymbol('end', null, -1)
const newParser = (tokens) => {