为了账号安全,请及时绑定邮箱和手机立即绑定

面向对象的编程语言的AST(抽象语法树)是什么样的?

面向对象的编程语言的AST(抽象语法树)是什么样的?

达令说 2019-10-11 10:30:43
我正在阅读有关AST(抽象语法树)的信息,但是我看到的所有示例都使用如下表达式:a + b * c 可以用像这样的语法来表示:(+ a (* b c) )等效于:  + / \a   *    / \  b   c我的问题是OOPL中的类的AST看起来如何?我的幼稚尝试是针对此Java代码: class Person {      String name;     int    age;     public String toString() {         return "name";     } }是:;Hand written(classDeclaration Person      (varDeclaration String name)     (varDeclaration int    age )     (funcDeclaration String toString            (return "name")     ) )但是我不太确定我离真正的AST表示有多远。是否取决于我选择的语言。需要多少细节?那些“ xyzDeclaraction”是否需要或可能为: (Person (String name) (int age))在哪里可以看到实际编程语言的“真实”表示,以了解更多信息。
查看完整描述

3 回答

?
慕田峪7331174

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


查看完整回答
反对 回复 2019-10-11
  • 3 回答
  • 0 关注
  • 605 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信