| 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] |