相关疑难解决方法(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
查看次数

创建源代码转换器

我想知道创建源译者的策略是什么,即从一种高级语言到另一种高级语言的翻译.我想到的两种方式是

1-将一种语言的语法树更改为其他语言语法树2-将其更改为中间语言,然后将其转换为其他高级语言

我的问题是,是否有可能使用这两种策略进行转换,哪种更可行,任何人都可以参考某些转换器完成的任何理论或实现,如上述任何方法.有没有任何标准的基于xml的中间语言,我知道xmlvm使用xml作为中间语言,但它没有提供任何适当的中间语言规范.

translation programming-languages compilation

8
推荐指数
1
解决办法
1669
查看次数