如何使用 "Modern Compiler Implementation in C" 书中的 $TIGER?
How use $TIGER from the "Modern Compiler Implementation in C" book?
我正在按照 Modern Compiler Implementation in C 一书学习编译器构造。介绍里有一个"PROGRAM STRAIGHT-LINE PROGRAM INTERPRETER",说是"available in the directory $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
目录是一个完整的工程,但不知道chap1
目录在TIGER编译器中的作用和使用方法
文件main.c中没有main函数。请在此文件中提供。这是模板:
#include "util.h"
#include "slp.h"
#include "prog1.h"
int main()
{
A_stm stm = prog();
return 0;
}
我正在按照 Modern Compiler Implementation in C 一书学习编译器构造。介绍里有一个"PROGRAM STRAIGHT-LINE PROGRAM INTERPRETER",说是"available in the directory $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
目录是一个完整的工程,但不知道chap1
目录在TIGER编译器中的作用和使用方法
文件main.c中没有main函数。请在此文件中提供。这是模板:
#include "util.h"
#include "slp.h"
#include "prog1.h"
int main()
{
A_stm stm = prog();
return 0;
}