aboutsummaryrefslogtreecommitdiff
path: root/compiler
diff options
context:
space:
mode:
Diffstat (limited to 'compiler')
-rw-r--r--compiler/compiler.go26
-rw-r--r--compiler/dfa.go12
2 files changed, 27 insertions, 11 deletions
diff --git a/compiler/compiler.go b/compiler/compiler.go
index 153ad77..3ae647e 100644
--- a/compiler/compiler.go
+++ b/compiler/compiler.go
@@ -1,9 +1,29 @@
package compiler
-func Compile(regexps map[int][]byte) (*DFA, error) {
- root, symTab, err := parse(regexps)
+import "github.com/nihei9/maleeni/spec"
+
+func Compile(lexspec *spec.LexSpec) (*spec.CompiledLexSpec, error) {
+ var kinds []string
+ var patterns map[int][]byte
+ {
+ kinds = append(kinds, "")
+ patterns = map[int][]byte{}
+ for i, e := range lexspec.Entries {
+ kinds = append(kinds, e.Kind)
+ patterns[i+1] = []byte(e.Pattern)
+ }
+ }
+ root, symTab, err := parse(patterns)
+ if err != nil {
+ return nil, err
+ }
+ dfa := genDFA(root, symTab)
+ tranTab, err := genTransitionTable(dfa)
if err != nil {
return nil, err
}
- return genDFA(root, symTab), nil
+ return &spec.CompiledLexSpec{
+ Kinds: kinds,
+ DFA: tranTab,
+ }, nil
}
diff --git a/compiler/dfa.go b/compiler/dfa.go
index fec93ce..b07954f 100644
--- a/compiler/dfa.go
+++ b/compiler/dfa.go
@@ -2,6 +2,8 @@ package compiler
import (
"sort"
+
+ "github.com/nihei9/maleeni/spec"
)
type DFA struct {
@@ -99,13 +101,7 @@ func genDFA(root astNode, symTab *symbolTable) *DFA {
}
}
-type TransitionTable struct {
- InitialState int `json:"initial_state"`
- AcceptingStates map[int]int `json:"accepting_states"`
- Transition [][]int `json:"transition"`
-}
-
-func GenTransitionTable(dfa *DFA) (*TransitionTable, error) {
+func genTransitionTable(dfa *DFA) (*spec.TransitionTable, error) {
state2Num := map[string]int{}
for i, s := range dfa.States {
state2Num[s] = i + 1
@@ -125,7 +121,7 @@ func GenTransitionTable(dfa *DFA) (*TransitionTable, error) {
tran[state2Num[s]] = entry
}
- return &TransitionTable{
+ return &spec.TransitionTable{
InitialState: state2Num[dfa.InitialState],
AcceptingStates: acc,
Transition: tran,