3 回答
TA贡献1828条经验 获得超13个赞
AST是CST的抽象(具体的语法树或解析树)。具体的语法树是从用于语法分析文件的结果(语法)中得到的树。因此,您的AST基本上是从您的语法定义派生的,但是已经转换为
Exp
/ | \
/ | \ *
Ident BinOp Ident into / \
/ | \ "x" "y"
/ | \
"x" * "y"
总而言之,我认为您帖子中的示例看起来不错。我可能会将变量声明包装在中varDeclList,将函数声明包装在中methDeclList,将return语句包装在中stmtList。(见下文。)
苹果在他的《 Java的现代编译器实现》一书中描述了AST的某种“真实”表示。(可在此处找到资源。)
使用这些类,您的程序将如下所示:
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
添加回答
举报