2009-11-16 41 views
0

當我在下面的Makefile上運行make時,什麼時候構建的符號表,如果它甚至是?什麼時候編寫這個程序的符號表

LEX = flex 
YACC = yacc 
CC = gcc 

calcu: y.tab.o lex.yy.o 
    $(CC) -o calcu y.tab.o lex.yy.o -ly -lfl 

y.tab.c y.tab.h: parser.y 
    $(YACC) -d parser.y 

y.tab.o: y.tab.c parser.h 
    $(CC) -c y.tab.c 

lex.yy.o: y.tab.h lex.yy.c 
    $(CC) -c lex.yy.c 

lex.yy.c: calclexer.l parser.h 
    $(LEX) calclexer.l 

clean: 
    rm *.o 
    rm *.c 
    rm calcu 

回答

2

make不會構建符號表(顯然它調用的編譯器和鏈接器必須這樣做!)。我假設你指的是二進制文件輸入的結果,而不是其結果。

如果像calcu曾經構建過任何「符號表」這樣的東西,它將通過插入parser.y的代碼被移入yacc.tab.c;對於,當時,它將在calcu的運行過程中運行,無論其輸入是什麼 - 遞增地,因爲包括「符號表構建代碼」的每個語法生成都匹配。

+0

我認爲符號表是在程序運行之前完全構建的。 – neuromancer 2009-11-16 07:15:44