例如我有这个功能:
def max(a,b) {
if(a < b) return b;
if(a > b) return a;
}
我很好奇如何将其解析为AST。 如果我理解这一点,那么它的身体节点应该返回一个ReturnInst *。
但在我的AST中,这个主体包含两个节点(作为表达式),一个用于第一个if,另一个用于另一个。
是否有一些技巧或设计错误开始?
编辑:我只是强调一个可能是一个解决方案:
这是个好主意吗?以及如何使用llvm跳转/转到?
答案 0 :(得分:1)
您可以尝试在线演示:http://llvm.org/demo/在C或C ++中键入您要执行的操作,它将显示LLVM输出。
答案 1 :(得分:0)
如果我正确理解,你使用alloca + store + jump概述的解决方案肯定有效。是的,LLVM优化器可以很好地处理它。或者,对给定函数中的ret指令数没有任何限制。
不确定你要求生成goto;如果你已经设法写了一个if语句,它就是你在一个语句结束时需要的那种br指令。通常,在一些简单的代码上运行“clang -S -emit-llvm”是一种很好的技术,可以看到如何生成简单的结构。另外,“llc -march = cpp”是了解如何在C ++中构建指令的好方法。