IF Anweisung in Flex bison realisieren

Guten Morgen,

meine Ausgabe in der switch anweisung sollte doch dann wie folgt aussehen:

Du mußt das Ganze doch wirklich nur analog der bereits vorhandenen Regeln machen.
Code:
label_stmt: ':' ID
    { $$ = newStmtNode(LabelK);
      $$.attr.name = $2;
    }

Code:
jmp_stmt: JMP ID
	{$$ = newStmtNode(JmpK);
	$$.attr.name = $2;
	}
Gruß

aber leider erscheint eine Fehlermeldung:

error: request for member 'attr' in something not a structure or union

was heißt as.
Danke
Gruß
Matrix
 
Hallo,
habs eben gerade auch herausgefunden, dass es so sein muss wie du gesagt hast.Danke nochmal.

Gruß

Hallo,
aber leider macht der compiler nicht das was er machen soll,
er erkennt kein :, wenn ich die Zeile mit : beginne da mein label am Anfang steht, woran kann denn das liegen fehlt mir nochwas bei der Implementierung, oder habe ich etwas übersehen.Danke.

Gruß
 
matrix1 hat gesagt.:
Hallo,
aber leider macht der compiler nicht das was er machen soll,
er erkennt kein :, wenn ich die Zeile mit : beginne da mein label am Anfang steht, woran kann denn das liegen fehlt mir nochwas bei der Implementierung, oder habe ich etwas übersehen.Danke.
Zeig deinen Code (hier oder bring den Code in bitbucket auf den neuesten Stand).

Gruß
 
Hi.

Bei dir dürfen Bezeichner nur aus Buchstaben bestehen. Üblicherweise definiert man Bezeichner als Token die mit einem Buchstaben anfangen und dann aus einer Folge von Buchstaben oder Ziffern bestehen. Evlt. auch mit Unterstrich.

Außerdem muß ein Label laut deiner Grammatik mit einem Semikolon abgeschlossen werden.

Gruß
 
Hallo,

na gut das Problem habe ich auch gelöst mit

Code:
[a-zA-Z][a-zA-Z0-9_]* {yylval.name = strdup(yytext); return  ID;}

aber der JMP geht immer noch nicht, gibt mir Fehler zurück, stimmt da was nicht, sollte doch eigentlich gehen.

Danke vielmals für deine Hilfe und deine Geduld.

MfG
Matrix
 
Hallo,

na gut das Problem habe ich auch gelöst mit

Code:
[a-zA-Z][a-zA-Z0-9_]* {yylval.name = strdup(yytext); return  ID;}

aber der JMP geht immer noch nicht, gibt mir Fehler zurück, stimmt da was nicht, sollte doch eigentlich gehen.
Wie sieht die Eingabe aus, was ist die Ausgabe bzw. welcher Fehler wird zurückgegeben?

Du läßt dir aber auch alles aus der Nase ziehen...

Gruß
 
Hallo,

Ja gut wenn ich zum beispiel das hier eingebe:

Code:
:L1;
if(x>0)
y=0;
else
JMP L1;
end;

gibt er mir aus (ohne den JMP L1):

Code:
Label: L1
If
    Op: >
        Id: x
        const: 0

    Assign to: y
         const: 0

sieht auch gut aus aber mit JMP L1 macht er nichts sagt (in der Eingabeaufforderung) syntax error, weil es ja auch so definiert ist, sollte mir aber zurückgeben:

Code:
JMP
        to Label: L1

wie ich es für die Ausgabe definiert habe.

das hier habe ch bei der Ausgabe definiert:

Code:
case JmpK:
          printf("JMP\n","to Label: %s\n",tree->attr.name);

Danke.

Hallo,

eine kleine Frage, ich habe doch in der lex file die ganzen Eingaben definiert, das heißt ich habe sie alle klein geschrieben, bedeutet die Eingabe muss auch klein sein, definiere ich alle groß muss die Eingabe auch Groß sein?

und ja gut wenn ich JMP klein schreibe dann macht er etwas, gibt dann JMP aus, aber nicht to label: L1,
ich glaube hier muss ich was anderes definieren, sollte statt dem komma zwischen JMP und to label was anderes sein
Code:
case JmpK:
          printf("JMP\n","to Label: %s\n",tree->attr.name);

Danke.
Gruß
 
sieht auch gut aus aber mit JMP L1 macht er nichts sagt (in der Eingabeaufforderung) syntax error, weil es ja auch so definiert ist, sollte mir aber zurückgeben:
Kannst du mal bitte ordentlich schreiben und Satzzeichen verwenden. Ich habe keine Lust noch lange herausfinden zu müssen was das bedeuten soll. Ich schreibe doch auch nicht in Kauderwelsch, oder?!
Code:
case JmpK:
          printf("JMP\n","to Label: %s\n",tree->attr.name);
Das solltest du nochmal scharf ankucken. Die Ausgabe ist immer nur "JMP\n".

Außerdem, ist dein Lexer denn Groß-/Kleinschreibung tolerant? ;-]

Gruß
 
Zurück