summaryrefslogtreecommitdiff
path: root/grammar.lua
diff options
context:
space:
mode:
Diffstat (limited to 'grammar.lua')
-rw-r--r--grammar.lua91
1 files changed, 0 insertions, 91 deletions
diff --git a/grammar.lua b/grammar.lua
deleted file mode 100644
index bdc7347..0000000
--- a/grammar.lua
+++ /dev/null
@@ -1,91 +0,0 @@
-local module = {}
-setmetatable(module, {__index=_G})
-setfenv(1, module)
-
-
-local Grammar = {}
-
-function module.createGrammar(nonterminals, triggers)
- local self = {
- nonterminals = nonterminals,
- triggers = triggers,
- context = {},
- }
- setmetatable(self, {__index=Grammar})
- return self
-end
-
-
-function Grammar.pushContext(self)
- local newContext = {}
- setmetatable(newContext, {__index=self.context})
- self.context = newContext
-end
-function Grammar.popContext(self)
- local mt = getmetatable(self.context)
- local oldContext = (mt and mt.__index) or {}
- self.context = oldContext
-end
-
-
-function Grammar.expandSymbol(self, sequence, index, expansion)
- table.remove(sequence, index)
- for i=1,#expansion do
- table.insert(sequence, index+i-1, expansion[i])
- end
-end
-
-
-function Grammar.expandSequence(self, sequence, n, debug)
- local i = 1
- while i <= #sequence do
- if debug then print(sequence[i]) end
- local choices = self.nonterminals[sequence[i]] or self.context[sequence[i]]
- if choices then
- local trigger = self.triggers[sequence[i]]
- if trigger then trigger(self) end
- if #choices == 1 then
- self:expandSymbol(sequence, i, choices[1])
- return true, 0
- else
- local choice = choices[1 + (n % #choices)]
- self:expandSymbol(sequence, i, choice)
- return true, 1
- end
- else
- i = i+1
- end
- end
- return false, 0
-end
-
-
-function Grammar.expand(self, genome, geneIndex, maxLoops, debug)
- geneIndex = geneIndex or 0
- maxLoops = maxLoops or 2
- local sequence = { '<start>' }
- local count = 0
- local continue = true
- while continue do
- local gene
- if (count > maxLoops * #genome) then
- gene = 0
- else
- gene = genome[1 + (geneIndex % #genome)]
- end
- local increment
- if debug then print(geneIndex, gene) end
- continue, increment = self:expandSequence(sequence, gene, debug)
- if not continue then break end
- geneIndex = geneIndex+increment
- count = count + 1
- end
- local result = ''
- for _, s in ipairs(sequence) do
- result = result .. s
- end
- return result, geneIndex
-end
-
-
-return module