如何使用《 C语言中的现代编译器实现》一书中的$ TIGER?

时间:2019-02-17 04:38:30

标签: c compiler-construction

我正在学习 C中的现代编译器实现一书。在简介中有一个“程序直线程序解释器”,它说“在目录$TIGER/chap1中可用”,因此我从https://www.cs.princeton.edu/~appel/modern/c/project.html下载了TIGER编译器。

chap1目录中,有一些文件:

chap1$ ls
1.png    makefile prog1.h  slp.h    util.h
main.c   prog1.c  slp.c    util.c

所以我在'chap1'目录中执行了make命令,但是它显示了一个错误:

chap1$ make
cc -g -c main.c
cc -g -c prog1.c
cc -g -c slp.c
cc -g -c util.c
cc -g main.o prog1.o slp.o util.o
Undefined symbols for architecture x86_64:
  "_main", referenced from:
     implicit entry/start for main executable
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make: *** [a.out] Error 1

这里是makefile

a.out: main.o prog1.o slp.o util.o
    cc -g main.o prog1.o slp.o util.o

main.o: main.c slp.h util.h
    cc -g -c main.c

prog1.o: prog1.c slp.h util.h
    cc -g -c prog1.c

slp.o: slp.c slp.h util.h
    cc -g -c slp.c

util.o: util.c util.h
    cc -g -c util.c

clean: 
    rm -f a.out util.o prog1.o slp.o main.o

看来chap1目录是一个完整的项目,但是我不知道TIGER编译器中chap1目录的功能以及如何使用它。

1 个答案:

答案 0 :(得分:1)

在main.c文件中,没有main函数。请在此文件中提供。这是模板:

#include "util.h"
#include "slp.h"
#include "prog1.h"

int main()
{
   A_stm stm = prog();

   return 0;
}