我正在阅读有关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
我想知道创建源译者的策略是什么,即从一种高级语言到另一种高级语言的翻译.我想到的两种方式是
1-将一种语言的语法树更改为其他语言语法树2-将其更改为中间语言,然后将其转换为其他高级语言
我的问题是,是否有可能使用这两种策略进行转换,哪种更可行,任何人都可以参考某些转换器完成的任何理论或实现,如上述任何方法.有没有任何标准的基于xml的中间语言,我知道xmlvm使用xml作为中间语言,但它没有提供任何适当的中间语言规范.