From 64b2b5d33237599cbc048b1990154832a775c556 Mon Sep 17 00:00:00 2001 From: Sorrel Bri Date: Sun, 1 Mar 2020 23:17:57 -0800 Subject: [PATCH] stub AST parser --- src/reducers/reducer.latl.js | 11 +++++++++++ src/reducers/reducer.latl.test.js | 21 ++++++++++++++++++++- 2 files changed, 31 insertions(+), 1 deletion(-) diff --git a/src/reducers/reducer.latl.js b/src/reducers/reducer.latl.js index cf74b31..84bb3fe 100644 --- a/src/reducers/reducer.latl.js +++ b/src/reducers/reducer.latl.js @@ -38,12 +38,23 @@ export const tokenize = latl => { } } +const addToken = (tree, token, index, tokens) => { + console.log(tokens[index - 1], token) + return tree; +} + +export const buildTree = tokens => { + return tokens.reduce(addToken, {}) +} + export const generateAST = latl => { // tokenize const tokens = tokenize(latl); // build tree + const tree = buildTree(tokens); + return tree; } const tokenTypes = [ diff --git a/src/reducers/reducer.latl.test.js b/src/reducers/reducer.latl.test.js index 36769d9..f786835 100644 --- a/src/reducers/reducer.latl.test.js +++ b/src/reducers/reducer.latl.test.js @@ -1,6 +1,6 @@ import { stateReducer } from './reducer'; import { initState } from './reducer.init'; -import { tokenize } from './reducer.latl'; +import { tokenize, buildTree } from './reducer.latl'; describe('LATL', () => { it('returns state unaltered with no action body', () => { @@ -35,6 +35,11 @@ describe('LATL', () => { expect(tokens).toStrictEqual(tokenizedLatl); }); + it('returns AST from well-formed epoch tokens', () => { + const tree = buildTree(tokenizedEpoch); + expect(tree).toStrictEqual(treeEpoch); + }) + }) const epochDefinitionLatl = ` *PROTO @@ -56,6 +61,20 @@ const tokenizedEpoch = [ { type: "pipe", value: "|" }, { type: "variable", value: "CHILD" } ] +const treeEpoch = { + epochs: [ + { + parent: 'PROTO', + name: 'CHILD', + index: 0, + changes: [ + '[+ FEATURE]>[- FEATURE]/._.', + 'n>m/#_.' + ] + } + ] +} + const featureDefinitionLatl = ` [+ PLOSIVE] = kp / p / b / d / t / g / k [- PLOSIVE] = m / n / s / z