相关疑难解决方法(0)

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

我正在阅读有关AST(抽象语法树)的内容,但我看到的所有示例都使用了以下表达式:

a + b * c 
Run Code Online (Sandbox Code Playgroud)

哪个可以用类似lispy的语法表示为:

(+ a (* b c) )
Run Code Online (Sandbox Code Playgroud)

这相当于:

  +
 / \
a   * 
   / \
  b   c
Run Code Online (Sandbox Code Playgroud)

我的问题是OOPL中一个类的AST会是什么样子?

我天真的尝试是为了这个Java代码:

 class Person { 
     String name;
     int    age;
     public String toString() { 
        return "name";
     }
 }
Run Code Online (Sandbox Code Playgroud)

方法是:

;Hand written
(classDeclaration Person 
     (varDeclaration String name)
     (varDeclaration int    age )
     (funcDeclaration String toString 
           (return "name")
     )
 )
Run Code Online (Sandbox Code Playgroud)

但我不太确定我对真正的AST代表有多近或多远.

这取决于我选择的语言.需要多少细节?这些"xyzDeclaraction"是否需要或可能如下:

 (Person (String name) (int age))
Run Code Online (Sandbox Code Playgroud)

在哪里可以看到实际编程语言的"真实"表示以了解更多信息.

java compiler-construction programming-languages abstract-syntax-tree

21
推荐指数
2
解决办法
6831
查看次数

术语解析树和派生树之间的任何差异?

当引用符合语法的文本的解析结果时,术语AST(抽象语法树),解析树和派生树由不同的人围绕.假设我们正在谈论解析计算机语言,他们的差异是否足够小,我们可以互换使用这些术语?如果没有,我们如何正确使用这些条款?

grammar parsing lex abstract-syntax-tree

9
推荐指数
2
解决办法
6085
查看次数