【发布时间】:2011-09-14 05:01:52
【问题描述】:
我正在尝试使用 llvm 来实现一种简单、愚蠢的类 c 语言。 而且我一直致力于设计一个好的 AST。
例如,我想知道将变量分成两种节点是否是个好主意: 一个用于分配,一个用于加载。我试过了,但遇到了一些障碍:
Foo = asd = 3;
在这种情况下 Foo 和 add 将是一个分配,但 add 也将是一个加载。 但是 ast 节点是在它们的 code() 方法中加入的。
有没有关于设计 ast 的好资源? (我试图找到 clang 的,但从它的源文件中轻松理解有点复杂。)
【问题讨论】:
-
对左值和右值有不同的表示是有意义的。在这里,您的 AST 可能类似于:
(AssignExpr (LVar Foo) (AssignExpr (LVar asd) (IntLiteral 3))),注意赋值的右关联性,并注意它是一个表达式,而不是一个语句。
标签: compiler-construction llvm abstract-syntax-tree