Selaa lähdekoodia

source mapper

kpmy 9 vuotta sitten
vanhempi
commit
dbf7512189
2 muutettua tiedostoa jossa 90 lisäystä ja 0 poistoa
  1. 51 0
      map.go
  2. 39 0
      tier_test.go

+ 51 - 0
map.go

@@ -0,0 +1,51 @@
+package tier
+
+import (
+	"fmt"
+)
+
+type MappedSymbol struct {
+	Symbol
+	Pos         int
+	Row, Column int
+}
+
+func (m MappedSymbol) String() string {
+	return fmt.Sprint(m.Symbol.Code, " ", m.Pos, "[", m.Row, ":", m.Column, "]")
+}
+
+type Mapper interface {
+	Scanner
+	Map() []MappedSymbol
+}
+
+type mp struct {
+	sc   Scanner
+	data []MappedSymbol
+}
+
+func (m *mp) Count() int      { return m.sc.Count() }
+func (m *mp) Pos() (int, int) { return m.sc.Pos() }
+func (m *mp) Error() error    { return m.sc.Error() }
+
+func (m *mp) Get() Symbol {
+	sym := m.sc.Get()
+	if m.sc.Error() == nil {
+		msym := MappedSymbol{}
+		msym.Symbol = sym
+		msym.Pos = m.Count()
+		msym.Row, msym.Column = m.Pos()
+		m.data = append(m.data, msym)
+	}
+	return sym
+}
+
+func (m *mp) Map() []MappedSymbol {
+	return m.data
+}
+
+func NewMapper(s Scanner) Mapper {
+	ret := &mp{}
+	ret.sc = s
+	return ret
+}

+ 39 - 0
tier_test.go

@@ -76,3 +76,42 @@ func TestRunner(t *testing.T) {
 	run.Expect(100, "begin expected", 102)
 	run.Run(207)
 }
+
+func TestMapper(t *testing.T) {
+	const testString = `
+		BEGIN
+
+		f asdf asdf xx x23 (* dfa3asd *) 33FH 3FU 234U 3.3  : := :== > < 0.12314 003141 -efef23 asdfd asf "dfsdfa sdf asdf " 'df' df'd' ;;      ;
+	`
+	defaultOpts := Opts{}
+	defaultOpts.IdentMap = make(map[string]SymCode)
+	defaultOpts.IdentMap["BEGIN"] = 100
+
+	defaultOpts.SpaceMap = make(map[string]SymCode)
+	defaultOpts.SpaceMap[" "] = 101
+	defaultOpts.SpaceMap["\n"] = 102
+
+	defaultOpts.NumContains = "ABCDEF"
+	defaultOpts.NumModifiers = "UH"
+
+	defaultOpts.CombinedMap = make(map[string]SymCode)
+	defaultOpts.CombinedMap[":"] = 200
+	defaultOpts.CombinedMap[":="] = 201
+	defaultOpts.CombinedMap[":=="] = 203
+	defaultOpts.CombinedMap[">"] = 204
+	defaultOpts.CombinedMap["<"] = 205
+	defaultOpts.CombinedMap["-"] = 206
+	defaultOpts.CombinedMap[";"] = 207
+
+	defaultOpts.CommentTriplet = [3]rune{'(', '*', ')'}
+
+	sc := NewScanner(bufio.NewReader(bytes.NewBufferString(testString)), defaultOpts)
+	mp := NewMapper(sc)
+	run := NewRunner(mp, NewMarker(sc, func(msg ...interface{}) {
+		t.Log(msg...)
+	}))
+	Debug(run)
+	run.Expect(100, "begin expected", 102)
+	run.Run(207)
+	t.Log(mp.Map())
+}