编译原理Lab5
实验过程
本次实验通过重新设计符号表,使用Visitor函数遍历语法树并在合适的函数内调用LLVM的API完成了对函数定义和函数调用,以及局部变量的声明、定义和使用的翻译。
==重新设计符号表==:整体上符号表的结构没有改变,只是需要记录的信息变成了LLVMValueRef
和LLVMTypeRef
。注意存在符号表里的LLVMValueRef
是指针,而不是变量本身。
==翻译==:翻译过程并不复杂,但是需要注意很多细节!
遇到的问题
==BUGs==:1、void
函数可以没有返回语句,但是翻译时要将其加上;2、(exp)
的visitor
函数需要重写使其返回exp
的LLVMValueRef
;3、形如x[x[0]]
的翻译中,当其作为左值时要注意,里面的x[0]
返回的应是本身的值,而外面的x[]
返回的应该是指针,由于两者都属于LVal
,所以在遍历翻译是需要加以区分。
编译原理Lab5
http://example.com/2022/12/30/compilation-principle/compilation-principle-lab5/