func toMap(tree antlr.Tree) *linkedhashmap.Map {
m := linkedhashmap.New()
traverseMap(tree, m)
return m
}
func traverseMap(tree antlr.Tree, m *linkedhashmap.Map) {
if (reflect.TypeOf(tree) == reflect.TypeOf(&antlr.TerminalNodeImpl{})) {
token := tree.(antlr.TerminalNode).GetSymbol()
m.Put("type", token.GetTokenType())
m.Put("text", token.GetText())
} else {
children := arraylist.New()
s := reflect.ValueOf(tree).Type().Elem().Name()
m.Put(s, children)
for i := 0; i < tree.GetChildCount(); i++ {
nested := linkedhashmap.New()
children.Add(nested)
traverseMap(tree.GetChild(i), nested)
}
}
}
func main() {
input, _ := antlr.NewFileStream("../input/sample-mvbag-rich.toml")
lexer := parser.NewVeloLexer(input)
stream := antlr.NewCommonTokenStream(lexer, 0)
p := parser.NewVeloParser(stream)
p.RemoveErrorListeners()
p.AddErrorListener(errorListiner)
p.BuildParseTrees = true
tree := p.Velo()
j := toMap(tree)
println(j.Size())
strB, _ := j.ToJSON()
print(string(strB))
//antlr.ParseTreeWalkerDefault.Walk(NewVeloListener(), tree)
}