검색결과 리스트
Bison에 해당되는 글 1건
- 2013.10.25 Yacc, Bison으로 인한 문제
글
이전 포스트에서 lex, flex만은 Makefile을 작성하기 무척 쉬웠다. 꽤나 만족스럽다.
하지만 yacc, bison을 함께 하면서 모든게 어긋나기 시작했다.
문제의 발단은 lex도 .c파일을 만들어내고 yacc 또한 .c파일을 만들어내는데서 있다.
이게 왜 문제냐하면 두 소스를 같은 이름으로 못 한다는 것이다.
예로 계산기 소스를 작성하는데 calc.l파일과 calc.y파일을 만들었다고 치자.
bison을 먼저 돌려야 하지만(사실 아직 왜 먼저 돌리는지 모른다...) lex를 먼저 공부했기에 lex의 결과물을 보자.
'flex calc.l' 을 수행한다면 결과물은 lex.yy.c가 된다. 하지만 난 이게 싫어 -o 옵션으로 calc.c로 지정을 했다.
머...이유는 단순히 '.'문자가 두번 있는게 보기 싫어서이다.
이런 상황에서 bison을 돌려야 한다면...'bison -d calc.y' 명령을 사용하겠지만 이 또한 calc.tab.c와 calc.tab.h 파일을 만들어 낼테니 -o 옵션을 사용하려 한다. 하지만 calc.c파일은 이미 flex가 만들어낸 결과물이 있기 때문에 같은 이름을 사용할 수 없다.
젠장...결국 두 소스의 이름을 달리 가거나 두 소스의 컴파일 결과물의 파일이름을 다르게 지정해야한다.
결과적으로 현재는 두 소스의 이름을 별도로 가져갔다. 머가 옳은지 머가 일반적인지 모르겠다.
그래서 만들어진 Makefile
calc : calc.c parser.c $(CC) -o $@ $^ -l$(LIBS) calc.c : calc.l parser.h $(LEX) -o $@ $< parser.c : parser.y $(YACC) -o $*.c $< parser.h : parser.y $(YACC) -o $*.c $<
'개발관련 > (Fast)Lex' 카테고리의 다른 글
lex 간단한 예제2 (0) | 2013.10.25 |
---|---|
lex 시작하기 (0) | 2013.10.24 |
시작하기에 앞서... (0) | 2013.10.24 |
확장자 규칙의 사용 (0) | 2013.10.24 |
lex를 위한 간단한 Makefile (0) | 2013.10.24 |
RECENT COMMENT