AST is an abstraction of the CST (concrete syntax tree, or, parse tree). The concrete syntax tree is the tree resulting from the productions (in the grammar) used to parse the file. So your AST is basically derived from your grammar definition, but has for transformed
Exp
/ | \
/ | \ *
Ident BinOp Ident into / \
/ | \ "x" "y"https://stackoverflow.com/" \
"x" * "y"
All in all I think the example in your post looks fine. I would probably wrap the variable declarations in a varDeclList
and the function declaration in a methDeclList
, and the return statement in a stmtList
. (See below.)
One more or less “real” representation of an AST is described by Apple in his book “Modern Compiler Implementation in Java”. (Resources can be found here.)
Using those classes, your program would be represented as follows:
Program
ClassDeclList
ClassDecl
Identifier
id: Person
VarDeclList
VarDecl
type: String
id: name
VarDecl
type: int
id: age
MethDeclList
MethodDecl
modifiers: public
returnType: String
id: toString
Formals
(empty)
StmtList
returnStmt
Identifier
id: name