Hilfe mit Flex und Bison

hallo,
hat wunderbar geklappt, funktioniert alles.
Ich habe nun ein beispiel mit flex umgewandelt, nur beim compilieren, sagt er Zugriff verweigert, woran liegt das, im cygwin gibt es einmal den compiler gcc und cc hab beide probiert: gcc lex.yy.c, kommt leider die Fehlermeldung.dake.

MfG
Matrix1
 
hallo,
hat wunderbar geklappt, funktioniert alles.
Ich habe nun ein beispiel mit flex umgewandelt, nur beim compilieren, sagt er Zugriff verweigert, woran liegt das, im cygwin gibt es einmal den compiler gcc und cc hab beide probiert: gcc lex.yy.c, kommt leider die Fehlermeldung.dake.
Anscheinend hast du die Ausgabedatei noch irgendwie geöffnet. Hast du die gerade ausgeführt?

Verwende einen anderen Dateinamen:
Code:
gcc -o prog.exe ley.yy.c
Und kopiere ggf. die genau Fehlermeldung.

Gruß
 
hallo,
hab noch ne frage, ich möcht gern ein Beispiel programm generieren, dieses hier:
%{
#include <ctype.h>
%}

%%
[A-Z] printf("%c",tolower(yytext[0]));
[a-z] printf("%c",toupper(yytext[0]));
"Ende\n" return 0;
%%

aber leider klappt es nicht beim kompilieren kommt ne fehlermeldung, dieses Programm soll kleinbuchstaben groß und großbuchstaben zu kleinen umwandeln,
fehlermeldugn ist, undefined reference to yywrap
collect2: ld return 1 exit status.Danke.

MfG
Matrix
 
Hallo,
hab ein Problem und komm überhaupt nicht mehr weiter,
ih möchte einen Tachenrechner generieren, mit flex lässt es sich auch generieren klappt auch nur sobald ich mit bison kompiliere, kommt ein Fehler , keine ahnung wie man ihn beseitigen kann, wäre sehr nett, wenn du mir helfen könntest.

Hier der ode:

Flex:

%{
#include <stdio.h>

#define TOK_ADD 0x01
#define TOK_SUB 0x02
#define TOK_NUM 0x03

int tmpv=0;
int token;

%}
%option noyywrap
%%

\+ { return TOK_ADD; }
- { return TOK_SUB; }
[0-9]+ { tmpv=atoi(yytext); }
[\n\t ]+ {}

%%

int main ()
{
yyparse();
int value=0;

while(token=yylex()) {
switch(token) {
case TOK_ADD:
value+=tmpv;
break;
case TOK_SUB:
value-=tmpv;
break;
}
tmpv=0;
printf("\t -> %i\n", value);
}

}

Bison:

%{
#include <stdio.h>

%}
%token TOK_ADD
%token TOK_SUB
%token TOK_NUM

int vtmp1, vtmp2;
%%
commands: /**/ | commands command;

command: add | sub;

add:
TOK_NUM TOK_ADD TOK_NUM
{
printf("\t->%i\n", vtmp1+vtmp2);
};

sub:
TOK_NUM TOK_SUB TOK_NUM
{
printf("\t->%i\n", vtmp1-vtmp2);
};

%%

int main ()
{
[0-9]+ { vtmp1=vtmp2;
vtmp2=atoi(yytext);
return TOK_NUM;
}

}


es kommt die Fehlermeldung:

calculator.tab.c: 107: error: parse error before "int"
calculator.y: in function 'main':
calculator.y::31:error: parse before '[' token
calculator.y::32:error: 'yytext' undeclared (first use in function)
calculator.y::32:error: for each function it appears in.)
calculator.y::32:error: invalid lvalue in assignment
calculator.y: At top level:
calculator.y::36:error: parse error before ')' token
Danke.

MfG
Matrix
 
Zuletzt bearbeitet:
Hi.

Was machst du da? Du mußt in dem 3. Abschnitt der Bison-Datei korrekten C-Code angeben. Wobei da noch mehr durcheinander geht.

Wie alt bist du denn? Kannst du nicht noch ein paar Jahre warten? Mal ehrlich, das hat doch irgendwie keinen Zweck wenn du schon Schwierigkeiten damit hast zu Suchen, anderen Code bzw. Anleitungen zu verstehen geschweige denn Anpassungen für deine Zwecke durchzuführen...

Gruß
 
hallo,
ich habe diesen code aus dem Internet, bin grad dabei mich in flex und bison einzuarbeiten, hab doch gesagt dass ih neuling bin in diesem Gebiet, bin ja kein profi und beherrsche auf anhieb was da abgeht, muss ja auch verstehen wie was funktioniert, kann ja wohl niht alles erträumen.

MfG
Matrix
 
Zurück