我正在阅读有关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
是否有用于缩小java源代码的工具?
我知道这样的工具没有太多的实际需要,但我有兴趣将一些学生的代码减少到"裸骨",以显示他们的变量名称是如何被解释的(排序 - 它会严重地重新强制执行编译器忽略了他们对变量名的选择.(这个教学过程的下一步可能是向他们展示已编译的代码).
谢谢.