blob: 3ae647e3cc8748f3c8ed4c4c691280c9a1d1b550 (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
|
package compiler
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 &spec.CompiledLexSpec{
Kinds: kinds,
DFA: tranTab,
}, nil
}
|