2013-07-11 36 views
0

現在我想解析PHP文件,ASP文件或JSP文件, lex_php.l yacc_php.y用於解析PHP文件, lex_asp.l yacc_asp.y更多的lex文件用於解析asp文件,我怎麼可以編譯兩個或在我的日常

的話,我都主,主會調用由輸入型

不同的解析,但是當編譯和鏈接它們,輸出重新定義錯誤,我該怎麼辦? 生成文件這樣

LEX=flex 
YACC=bison 
CC=g++ 
OBJECT=main   #the execute target 

$(OBJECT): main.o lex_php.o yacc_php.o lex_asp.o yacc_asp.o 
    $(CC) yacc_php.o yacc_asp.o -o $(OBJECT) 

main.o: main.c yacc_php.h lex_yacc_php.h yacc_asp.h lex_yacc_asp.h Token.h  WebShellFilter.h 
    $(CC) -c main.c 

lex_php.o: lex_php.c yacc_php.h lex_yacc_php.h 
    $(CC) -c lex_php.c 

lex_php.c: lex_php.l 
$(LEX) -o lex_php.c lex_php.l 

yacc_php.o: yacc_php.c lex_yacc_php.h 
$(CC) -c yacc_php.c 

yacc_php.c yacc_php.h: yacc_php.y 
$(YACC) -d yacc_php.y -o yacc_php.c 

############### ASP 
lex_asp.o: lex_asp.c yacc_asp.h lex_yacc_asp.h 
$(CC) -c lex_asp.c 

lex_asp.c: lex_asp.l 
$(LEX) -o lex_asp.c lex_asp.l 

yacc_asp.o: yacc_asp.c lex_yacc_asp.h 
$(CC) -c yacc_asp.c 

yacc_asp.c yacc_asp.h: yacc_asp.y 
$(YACC) -d yacc_asp.y -o yacc_asp.c 

clean: 
    @rm -f $(OBJECT) *.o 

我想,yacc_asp.o和yacc_php.o既包括yyparse,yytext中,和其它瑪米相同的功能,所以也許輸出重新定義錯誤。

但如何解決這個問題,幫幫我,謝謝你這麼多

回答

1

您可以使用Flex選項--prefix=foo(或%option prefix="foo"在.L文件)來改變所有符號的名稱(所以你得到一個功能代替foolex功能)。使用野牛,您可以使用.y文件中的%name-prefix "foo"選項獲得相同的效果。

只需爲每個解析器/詞法分析器對選擇一個不同的前綴。

+0

非常感謝你,添加前綴可以解決重定義問題,:-) – user2570900