YaK:: golang : Parser & Abstract Syntax Tree | [Changes] [Calendar] [Search] [Index] [PhotoTags] |
package main import "flag" import "go/ast" import "go/parser" import _ "go/printer" import "go/token" import "go/types" import "os" const FOO = 23 var BAR int = FOO type TYPE int type Worm struct { wormlen int64 } type Apple struct { Worm color string rotation complex128 } type WormLener interface { WormLen() int64 } func (p *Worm) WormLen() int64 { return p.wormlen } func main() { flag.Parse() aaa := new(Apple) xxx := aaa.WormLen() var www WormLener = aaa println(www.(*Apple).rotation, xxx) fset := token.NewFileSet() files := make(map[string]*ast.File) for _, filename := range flag.Args() { tree, err := parser.ParseFile(fset, filename, nil, 0) if err != nil { panic(err) } /* println("#####################################") //_, err = ast.Fprint(os.Stdout, fset, tree, nil) println("#####################################") //if err = printer.Fprint(os.Stdout, fset, tree); err != nil { panic(err) } println("#####################################") println("## Universe"); for k, v := range types.Universe.Objects { println("k=", k, " v=", v) } println("## Unsafe"); for k, v := range types.Unsafe.Objects { println("k=", k, " v=", v) } */ println("#####################################") importer := types.GcImporter univ := types.Universe files[filename] = tree pkg, err := ast.NewPackage(fset, files, importer, univ) if err != nil { panic(err) } _ = pkg n, err := ast.Fprint(os.Stdout, fset, tree, nil) println("n=", n) } for name, tree := range files { println("#####################################") println("#######################") println("####################### ", name) println("#######################") n, err := ast.Fprint(os.Stdout, fset, tree, nil) if err != nil { panic(err) } println("n=", n) println("") } }
./6.out ast.go | grep -v 'ast[.]go:' | grep -v '}$' | grep -v ": -$" | grep -v " nil$"
(last modified 2011-05-06) [Login] |