djgruby Napisano Październik 15, 2010 Zgłoszenie Share Napisano Październik 15, 2010 Witam! Próbuję napisać sobie parser w oparciu o narzędzia flex/bison... Niestety, za nic nie chcą mi one ze sobą współpracować... Postanowiłem zatem poszukać pomocy wśród mądrzejszych programistów... Poniżej przedstawiam całość mojego projektu skompresowaną do minimalnej postaci w stylu "Hello World". ;] lexer.lex %{ #include <string> #include "parser.hh" extern YYSTYPE yylval; %} %option bison-bridge %% <*>[^\n]+ { yylval->str = strdup(yytext); return TOKEN_LINE; } %% parser.yy %{ #include <stdio.h> int yylex (void); void yyerror (char const *s) { fprintf (stderr, "%s\n", s); } %} %union { char *str; } %token <str> TOKEN_LINE %% content: TOKEN_LINE { printf("[LINE] %s\n", $1); }; %% test.c #include <stdio.h> #include "parser.hh" extern int yyparse (void); int main() { printf("*** TEST START ***\n"); int theResult = yyparse(); printf("**** TEST END ****\n"); return 0; } Kompilacja tego minimalnego projektu przebiega następująco: bash-2.05$ bison --report=all -o parser.cc -d parser.yy bash-2.05$ ls lexer.lex parser.cc parser.hh parser.output parser.yy test.c bash-2.05$ flex -olexer.cc lexer.lex bash-2.05$ ls lexer.cc lexer.lex parser.cc parser.hh parser.output parser.yy test.c bash-2.05$ g++ -o parser.o -c parser.cc bash-2.05$ ls lexer.cc lexer.lex parser.cc parser.hh parser.o parser.output parser.yy test.c bash-2.05$ g++ -o lexer.o -c lexer.cc bash-2.05$ ls lexer.cc lexer.lex lexer.o parser.cc parser.hh parser.o parser.output parser.yy test.c bash-2.05$ g++ -o test lexer.o parser.o -ly -lfl test.c parser.o(.text+0x304): In function `yyparse()': : undefined reference to `yylex()' collect2: ld returned 1 exit status Jeżeli ktoś byłby w stanie wskazać mi, co w powyższym przykładzie robię źle, albo gdzie jest błąd, to wypiję dzisiaj wieczorem jego zdrowie! ;] Dziękuję za pomoc! Odnośnik do komentarza Udostępnij na innych stronach More sharing options...
Rekomendowane odpowiedzi
Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto
Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.
Zarejestruj nowe konto
Załóż nowe konto. To bardzo proste!
Zarejestruj sięZaloguj się
Posiadasz już konto? Zaloguj się poniżej.
Zaloguj się