Aktualności: C64 Power - online od stycznia 2000 !

Autor Wątek: flex/bison - co zrobic, zeby to ze soba gralo?  (Przeczytany 754 razy)

0 użytkowników i 1 Gość przegląda ten wątek.

djgruby

  • Gość
flex/bison - co zrobic, zeby to ze soba gralo?
« dnia: 11 Października 2010, 15:51 »
Temat nie zwiazany bezposrednio z programowaniem na C64, ale byc moze znajdzie sie tutaj ktos, kto bedzie potrafil mi pomoc?

Otoz probuje napisac sobie parser w oparciu o narzedzia flex/bison... Niestety, za nic nie chca mi one ze soba wspolpracowac... Postanowilem zatem poszukac pomocy wsrod madrzejszych programistow... Ponizej przedstawiam calosc mojego projektu skompresowana do minimalnej postaci w stylu \"Hello World\". :)

lexer.lex                    
Kod:
%{:
#include
#include \"parser.hh\"
extern YYSTYPE yylval:
%}:

%option bison-bridge

%%

<*>[:^\\n]:+ {: yylval->str = strdup(:yytext):: return TOKEN_LINE: }:

%%

parser.yy
                   
Kod:
%{:
#include
int yylex (:void)::
void yyerror (:char const *s): {: fprintf (:stderr, \"%s\\n\", s):: }:
%}:

%union {: char *str: }:
%token TOKEN_LINE

%%

content:: TOKEN_LINE {: printf(:\"[:LINE]: %s\\n\", $1):: }::

%%

test.c
                   
Kod:
#include
#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 nastepujaco:

                   
Kod:
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

Jezeli ktos bylby w stanie wskazac mi, co robie zle, albo gdzie jest blad, to wypije dzisiaj wieczorem jego zdrowie! :)



Offline Kisiel

  • Level 7
  • *******
  • Wiadomości: 11447
  • Number 7 in all users competition...
    • http://wiki.projekt64.filety.pl/doku.php
flex/bison - co zrobic, zeby to ze soba gralo?
« Odpowiedź #1 dnia: 11 Października 2010, 16:44 »
nie znam sie ale ja zaczynam od sprawdzania czy dane na wejsciu sa zgodne z tym co je obrabia/sumuje itp.
idz wyprostowany wśród tych co idą na kolanach

...w przypadku checi zakupu UK1541,GA,MA,T8500,T7501 prosze o kontakt na Facebooku, haslo: UK1541....

djgruby

  • Gość
flex/bison - co zrobic, zeby to ze soba gralo?
« Odpowiedź #2 dnia: 12 Października 2010, 15:55 »
Kisiel, nie pomagasz. :)

Anyone?

Stg__

  • Gość
flex/bison - co zrobic, zeby to ze soba gralo?
« Odpowiedź #3 dnia: 12 Października 2010, 16:00 »
Moze tez nie pomoge ale jakis czas temu na forum.gamedev.pl byl temat parserow i bison gdzies tam tez przemknal.

kmeg__

  • Gość
flex/bison - co zrobic, zeby to ze soba gralo?
« Odpowiedź #4 dnia: 12 Października 2010, 18:25 »
Tez nie pomoge ale moze lepiej sie zaprzyjaznic z BOOST.Spirit oraz BOOST.Tokenizer szczegolnie jak chcesz to wywolywac z C/C++.

zielok__

  • Gość
flex/bison - co zrobic, zeby to ze soba gralo?
« Odpowiedź #5 dnia: 12 Października 2010, 18:28 »
                   
Stg napisal:
Moze tez nie pomoge ale jakis czas temu na forum.gamedev.pl byl temat parserow i bison gdzies tam tez przemknal.


Ja tez nie pomoge ale chcialem napisac, ze widze, ze troche ludzi stad siedzi takze na forum.gamedev.pl \"Smile\" Fajnie, myslalem kiedys, ze jestem tam sam co pamieta czasy c64:)

zyga

  • Gość
flex/bison - co zrobic, zeby to ze soba gralo?
« Odpowiedź #6 dnia: 13 Października 2010, 06:20 »
Ja dla odmiany tez nie pomoge \"Smile\" Lex i Yacc, to czasy studenckie - dawno i nieprawda.

A\'propos parserow. Na atarionline.pl przy okazji nowego jezyka Atalan wyplynal temat parserow i chlopaki polecaja Gold Parser.
http://www.devincook.com/goldparser/