多个LEX和YACC配合的问题
我正在编一个程序流程是这样的先用LEX和YACC编写预处理程序处理C代码
再运用LEX和YACC一遍分析处理完的C代码以创建语法树
也就是说要运用两遍LEX和YACC,但现在不能简单的将两次得到的.c放在一起因为两次生成的文件很多变量是重复的
有什么办法吗? 把变量改名字就行了 打个比方:
1.l 1.y为一组
2.l 2.y为一组
生成C文件和H文件的Makefile可以这样写
.PHONY:all clean
all : y.tab.1.c y.tab.2.c y.tab.1.h y.tab.2.hlex.yy.1.c lex.yy.2.c
y.tab.%.c y.tab.%.h : %.y
$(YACC) -d $<
sed 's/YY/YY'$(<:.l=)'/g;s/yy/yy'$(<:.l=)'/g' lex.yy.c > $(patsubst,%.y,y.tab.%.c,$<)
sed 's/YY/YY'$(<:.l=)'/g;s/yy/yy'$(<:.l=)'/g' lex.yy.h > $(patsubst,%.y,y.tab.%.h,$<)
$(RM) lex.yy.c lex.yy.h
lex.yy.%.c : %.l
$(LEX) $<
sed 's/YY/YY'$(<:.l=)'/g;s/yy/yy'$(<:.l=)'/g' lex.yy.c > $@
$(RM) lex.yy.c
clean:
$(RM)lex.yy.* y.tab.*
里面引用变量
比如extern char yytext[];
依然这样写,
不用写成extern char yy1text[];
因为编译的时候会被改掉的
[ 本帖最后由 cjaizss 于 2008-7-6 23:55 编辑 ] Makefile可以再做点改动:
假设一个目录里,xxx.l和xxx.y是一组
有很多组,都是除去后缀就是相同名字的才会相互引用
YACC_SRC:=$(wildcard *.y)
LEX_DRC:=$(wildcard *.l)
CFLAGS=
.PHONY:all clean
all:$(YACC_SRC:%.y=y.tab.%.o) $(LEX_SRC:%.y=lex.yy.%.o)
lex.yy.%.o:lex.yy.%.c
y.tab.%.o:y.tab.%.c y.tab.%.h
y.tab.%.c y.tab.%.h : %.y
$(YACC) -d $<
sed 's/YY/YY'$(<:.l=)'/g;s/yy/yy'$(<:.l=)'/g' lex.yy.c > $(patsubst,%.y,y.tab.%.c,$<)
sed 's/YY/YY'$(<:.l=)'/g;s/yy/yy'$(<:.l=)'/g' lex.yy.h > $(patsubst,%.y,y.tab.%.h,$<)
$(RM) lex.yy.c lex.yy.h
lex.yy.%.c : %.l
$(LEX) $<
sed 's/YY/YY'$(<:.l=)'/g;s/yy/yy'$(<:.l=)'/g' lex.yy.c > $@
$(RM) lex.yy.c
clean:
$(RM)lex.yy.* y.tab.*
[ 本帖最后由 cjaizss 于 2008-7-6 23:55 编辑 ] 我用的是parse generator这个软件,没有markfile这个文件,还有别的办法吗?
回复 #5 a02123230 的帖子
一个IDE?我最讨厌IDE了,不到万不得已绝不用它。
回复 #6 cjaizss 的帖子
:em21: :em21:[ 本帖最后由 a02123230 于 2008-7-10 19:29 编辑 ]
页:
[1]