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