On Tue, Sep 3, 2019 at 6:23 AM Vincent Blanchon <blanchon.vinc...@gmail.com> wrote: > > The compiler documentation mentions a syntax tree in the parsing phase when > the AST transformation phase mentions a conversion from the syntax tree to > the compiler's AST representation. > If I do not misunderstand, the command "go tool compile -W" will display the > AST. > > I was wondering how far is different the syntax tree from the AST? Where > could I get documentation or an example of this syntax tree?
Note that AST just means Abstract Syntax Tree, so it's a little confusing to talk converting a syntax tree to an AST. What we really have is two different ASTs. Unfortunately none of this stuff is well documented. The parser generates a syntax tree as defined in cmd/compile/internal/syntax. That is then converted to the Node tree defined in cmd/compile/internal/gc/syntax.go. The -W option dumps the latter. I don't know of a way to dump the former, but perhaps there is one. > Also, is this syntax tree mandatory? Is it not possible to build the AST > directly from the lexer+parser? The use of two different syntax trees is entirely historical due to the evolution of the compiler. The original code base was a C compiler written in C which became a Go compiler written in C which was machine translated from C to Go. There has been a lot of cleanup but there is still a lot of historical cruft. As far as I know the most likely next evolutionary step in this area will be to replace the Node tree with the cmd/compile/internal/syntax tree. Hope this helps, and I hope someone will correct me if I made a mistake. Why do you ask? Ian -- You received this message because you are subscribed to the Google Groups "golang-nuts" group. To unsubscribe from this group and stop receiving emails from it, send an email to golang-nuts+unsubscr...@googlegroups.com. To view this discussion on the web visit https://groups.google.com/d/msgid/golang-nuts/CAOyqgcWpRLeV1_jGnGszRUfLviQ0B1a%2BgTJfOeNjZUHV0tSDnA%40mail.gmail.com.