[Tech] Lex e Yacc
Massimiliano Masi
max@gauss.comunidelchianti.it
Ven 7 Nov 2003 20:14:24 CET
Salve a tutti !!!
Sto usando flex e bison per fare un programmino di backup
programmati. Ho fatto il mio .y e .lex, e compilo e funzionano.
Ora, se io li linko da un programma esterno, quando mi esce dalla
funzione che contiene yyparse(); mi va in segmentation fault, come se
non riuscisse a tornare alla funzione chiamante. Queste due funzioni
stanno su due .o differenti, e li compilo cosi':
CFLAGS = -Wall -ggdb -pedantic -O2
SOURCES = server.c module.c common.c main.c date.c \
conf_utils.c
OBJECTS = $(SOURCES:.c=.o) lex.yy.o y.tab.o
parser_utils.o
CC = gcc
.PHONY: parser all clean
all: parser server
clean:
rm -rf $(OBJECTS) $(MODULES) busmaster *~
rm -rf busparser y.tab.* lex.yy.c
server: $(OBJECTS)
$(CC) $(CFLAGS) -Wl,-export-dynamic -o busmaster $^ -ldl
$(OBJECTS): server.h
parser:
yacc -d grammar.y
flex -p parser.lex
gcc -ggdb -c lex.yy.c y.tab.c
gcc -ggdb -Wall -c parser_utils.c
# gcc lex.yy.o y.tab.o parser_utils.o -o busparser -ll -ly
Come mai? GDB mi dice:
(gdb)
parse_configuration_file (fp=Cannot access memory at address
0x2e74636d
) at conf_utils.c:86
(gdb) n
Program received signal SIGSEGV, Segmentation fault.
0x0804ae15 in parse_configuration_file (fp=Cannot access memory at
address 0x2e74636d
) at conf_utils.c:86
(gdb)
e la chiamo cosi':
res = bparse(cmdline);
--
Massimiliano Masi - http://gauss.comunidelchianti.it/~max
"In un mondo di incertezza, chi la sa misurare ha la carta vincente"
Maggiori informazioni sulla lista
flug-tech