调用
static void Driver() {
while (true) {
switch (current_token) {
case EOF_TOKEN : return;
case ';' : next_token(); break;
case DEF_TOKEN : HandleDefn(); break;
default : HandleTopExpression(); break;
}
}
}
int main(int argc, char* argv[]) {
LLVMContext &context = getGlobalContext();
init_precedence();
file = fopen(argv[1], "r");
if (file == NULL) perror("Error opening file");
next_token();
Module_Ob = new Module("my compiler", context);
Driver();
Module_Ob->dump();
return 0;
}
运行
clang++ toy.cpp -O3 -p toy
从实现来看,程序读入源码文件,不断调用 next_token()
,对于每次获得的token要么是关键字,要么是分号(行结束符),要么是文件结尾,要么就是top表达式。
网友评论