From 6f107b7a0ccfbcd3e2ec05d91c98877d9b2e0fc7 Mon Sep 17 00:00:00 2001 From: Charlie Stanton Date: Sun, 5 Mar 2023 10:00:28 +0000 Subject: Renames TransducerOutput to OutputContent (and related types) and moves into main/subexstate.go --- subex/main.go | 23 ----------------------- subex/parse.go | 8 ++++---- subex/subexast.go | 2 +- subex/subexstate.go | 24 +++++++++++++++++++++++- 4 files changed, 28 insertions(+), 29 deletions(-) (limited to 'subex') diff --git a/subex/main.go b/subex/main.go index fd0d356..0b87dc9 100644 --- a/subex/main.go +++ b/subex/main.go @@ -8,29 +8,6 @@ import ( "strings" ) -// A part of an insertion, either an Atom or a slot from which to load -// TODO rename this -type TransducerOutput interface { - // Given the current store, return the []Atom produced by the TransducerOutput - build(Store) []walk.Atom -} - -// A TransducerOutput which is just an Atom literal -type TransducerReplacementAtom struct { - atom walk.Atom -} -func (replacement TransducerReplacementAtom) build(store Store) []walk.Atom { - return []walk.Atom{replacement.atom} -} - -// A TransducerOutput which is a slot that is loaded from -type TransducerReplacementLoad struct { - slot rune -} -func (replacement TransducerReplacementLoad) build(store Store) []walk.Atom { - return store[replacement.slot] -} - // Where slots are stored type Store map[rune][]walk.Atom // Return a new store with all the data from this one diff --git a/subex/parse.go b/subex/parse.go index 16bc620..f2c77bc 100644 --- a/subex/parse.go +++ b/subex/parse.go @@ -29,7 +29,7 @@ func parseTerminatorAtomLiteral(termType rune, l *RuneReader) walk.Atom { } } -func parseReplacement(l *RuneReader) (output []TransducerOutput) { +func parseReplacement(l *RuneReader) (output []OutputContent) { // TODO escaping loop: for { r := l.next() @@ -43,11 +43,11 @@ func parseReplacement(l *RuneReader) (output []TransducerOutput) { if slot == eof { panic("Missing slot character") } - output = append(output, TransducerReplacementLoad{slot: slot}) + output = append(output, OutputLoad{slot: slot}) case '@', '~', '#': - output = append(output, TransducerReplacementAtom{atom: parseTerminatorAtomLiteral(r, l)}) + output = append(output, OutputAtomLiteral{atom: parseTerminatorAtomLiteral(r, l)}) default: - output = append(output, TransducerReplacementAtom{atom: r}) + output = append(output, OutputAtomLiteral{atom: r}) } } return output diff --git a/subex/subexast.go b/subex/subexast.go index c49f215..0c5c676 100644 --- a/subex/subexast.go +++ b/subex/subexast.go @@ -120,7 +120,7 @@ func (ast SubexASTCopyAny) String() string { // Output a series of Atoms without reading anything from input type SubexASTOutput struct { - replacement []TransducerOutput + replacement []OutputContent } func (ast SubexASTOutput) compileWith(next SubexState) SubexState { return &SubexOutputState{ diff --git a/subex/subexstate.go b/subex/subexstate.go index 12ace42..5a38d0b 100644 --- a/subex/subexstate.go +++ b/subex/subexstate.go @@ -62,9 +62,31 @@ func (state SubexStoreState) accepting(store Store) (outputs [][]walk.Atom) { return outputs } +// A part of an output literal, either an Atom or a slot from which to load +type OutputContent interface { + // Given the current store, return the []Atom produced by the TransducerOutput + build(Store) []walk.Atom +} + +// An OutputContent which is just an Atom literal +type OutputAtomLiteral struct { + atom walk.Atom +} +func (replacement OutputAtomLiteral) build(store Store) []walk.Atom { + return []walk.Atom{replacement.atom} +} + +// An OutputContent which is a slot that is loaded from +type OutputLoad struct { + slot rune +} +func (replacement OutputLoad) build(store Store) []walk.Atom { + return store[replacement.slot] +} + // Don't read in anything, just output the series of data and slots specified type SubexOutputState struct { - content []TransducerOutput + content []OutputContent next SubexState } // Given a store, return what is outputted by an epsilon transition from this state -- cgit v1.2.3