[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