我最近编写了一种动态类型的解释性编程语言作为学习练习。我现在正在寻求通过LLVM的C绑定来生成LLVM bitcode,但是在处理无类型的'变量。由于IR是强类型的,我最初的想法是将IR中的值表示为结构,如此(其中type
表示数字,bool或字符串值):
typedef struct
{
ValueType type;
double double_value;
bool bool_value;
char *string_value;
} Value;
为了帮助操作Value
结构,我将生成的bitcode链接到我的LLVM IR可以调用的静态库。静态库将处理诸如字符串连接和数学运算符的执行之类的事情,返回结果Value
,如下所示:
Value apply_op(char *op, Value *lhs, Value *rhs);
但这是最好的方法吗?如上所述,这主要是一个学习练习,所以我想确保我不会过度复杂化,或者从根本上误解一个核心的LLVM功能。