编译原理Lab5

实验过程

本次实验通过重新设计符号表,使用Visitor函数遍历语法树并在合适的函数内调用LLVM的API完成了对函数定义和函数调用,以及局部变量的声明、定义和使用的翻译。

==重新设计符号表==:整体上符号表的结构没有改变,只是需要记录的信息变成了LLVMValueRefLLVMTypeRef注意存在符号表里的LLVMValueRef是指针,而不是变量本身。

==翻译==:翻译过程并不复杂,但是需要注意很多细节!

遇到的问题

==BUGs==:1void函数可以没有返回语句,但是翻译时要将其加上;2(exp)visitor函数需要重写使其返回expLLVMValueRef3、形如x[x[0]]的翻译中,当其作为左值时要注意,里面的x[0]返回的应是本身的值,而外面的x[]返回的应该是指针,由于两者都属于LVal,所以在遍历翻译是需要加以区分。


编译原理Lab5
http://example.com/2022/12/30/compilation-principle/compilation-principle-lab5/
作者
zhc
发布于
2022年12月30日
许可协议