Registrierung Kalender Mitgliederliste Teammitglieder Suche Häufig gestellte Fragen Zur Startseite

Informatiker Board » Themengebiete » Theoretische Informatik » Compilerbau - Scanner Generator » Hallo Gast [Anmelden|Registrieren]
Letzter Beitrag | Erster ungelesener Beitrag Druckvorschau | An Freund senden | Thema zu Favoriten hinzufügen
Neues Thema erstellen Antwort erstellen
Zum Ende der Seite springen Compilerbau - Scanner Generator
Autor
Beitrag « Vorheriges Thema | Nächstes Thema »
Gisa Gisa ist männlich
Mitglied


Dabei seit: 06.02.2007
Beiträge: 47
Herkunft: DE

Compilerbau - Scanner Generator Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Hallo zusammen,

ich habe folgende Fragen zu Scanner Generatoren. Es gibt ja das LEX und eine Open Source Variante Flex.

Theoretisch weiss ich es so einigermaßen wie Sie funktionieren. Allerdings stoße ich im praktischen auf meine Grenzen.

Der Scanner erhält eine reguläre Grammatik in der Eingabedatei.

Mein Problem:
Was muss ich nun konkret machen um einen Scanner in z.B. C zu generieren.

Ich habe folgende Eingabedatei:
%{
#include <stdio.h>
#include <ctypeh>
%}

%%
[a-z] {putchar (toupper (*yytext));}
%%
main () {
yylex();
}

Ich habe FLex runtergeladen: Besteht aus C und Header Dateien. Was muss ich konkret machen? Wo und wem teile die obige Datei mit?
Bin für jegliche Hilfe sehr dankbar.

VG
Gisa

__________________
"Imagination ist more than Knowledge"

Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Gisa: 26.08.2007 23:30.

26.08.2007 23:28 Gisa ist offline E-Mail an Gisa senden Beiträge von Gisa suchen Nehmen Sie Gisa in Ihre Freundesliste auf
Tobias
Routinier


Dabei seit: 18.09.2006
Beiträge: 324

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Du brauchst zwei Teile:

1.) FLEX. Das gibts als Source-Package. Falls du Windows benutzt, ist es sinnvoller, die Binaries bzw. ein Setup zu ziehen von
http://gnuwin32.sourceforge.net/packages/flex.htm

2.) Einen C/C++ Compiler. Ich denke, dass GCC ganz gut funktioniert.


Der Rest ist easy:

Du erstellst eine LEX-Datei test.l wie bei dir unten angegeben und jagst sie durch flex. Das Resultat ist eine lex.yy.c-Datei. Die kannst du dann mit GCC compilieren:

gcc -o test.exe lex.yy.c -lfl
27.08.2007 13:16 Tobias ist offline E-Mail an Tobias senden Beiträge von Tobias suchen Nehmen Sie Tobias in Ihre Freundesliste auf
Gisa Gisa ist männlich
Mitglied


Dabei seit: 06.02.2007
Beiträge: 47
Herkunft: DE

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Hallo Tobias,

alles klar. Ich habe mir die Setup Datei runtergeladen und installiert. Sie wird unter GNU32 in der Startleiste aufgeführt. Ich finde allerdings kein Oberfläche/GUI von Flex.

Also soweit ist alles verständlich bis auf das durchjagen im Flex. Wie?
Wäre toll wenn du das noch kurz erklären könntest.

Grüße
G.
----
meinst du etwa flex oder flex++? Wie benutzt man Sie?

Grüße
Gisa

__________________
"Imagination ist more than Knowledge"

Dieser Beitrag wurde 2 mal editiert, zum letzten Mal von Gisa: 27.08.2007 14:19.

27.08.2007 14:12 Gisa ist offline E-Mail an Gisa senden Beiträge von Gisa suchen Nehmen Sie Gisa in Ihre Freundesliste auf
Gisa Gisa ist männlich
Mitglied


Dabei seit: 06.02.2007
Beiträge: 47
Herkunft: DE

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Musste mich erst einarbeiten :-).

ok jetzt hab ich meinen generierten Scanner.
-

Fehlermeldung beim kompilieren des lex.yy.c undefinied reference to yywrap ?? und -lfl (auf welchen ordner/Bibliothek wird gelinkt), gcc findet keins bei mir.

Grüße
Gisa
---
Also nachdem ich nun im windows die Bibliothek nicht verlinken konnte hab ich es kurzerhand mit Suse gemacht.

Ich habe jetzt eine ausführbare Datei namens test -> Ist das mein Scanner?!

Grüße
Gisa

__________________
"Imagination ist more than Knowledge"

Dieser Beitrag wurde 2 mal editiert, zum letzten Mal von Gisa: 27.08.2007 16:38.

27.08.2007 15:29 Gisa ist offline E-Mail an Gisa senden Beiträge von Gisa suchen Nehmen Sie Gisa in Ihre Freundesliste auf
Tobias
Routinier


Dabei seit: 18.09.2006
Beiträge: 324

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Man könnte doch glatt mal versuchen, die Datei auszuführen und gucken was passiert. geschockt
27.08.2007 16:57 Tobias ist offline E-Mail an Tobias senden Beiträge von Tobias suchen Nehmen Sie Tobias in Ihre Freundesliste auf
Gisa Gisa ist männlich
Mitglied


Dabei seit: 06.02.2007
Beiträge: 47
Herkunft: DE

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

das habe ich doch :-) funktioniert allerdings nicht. Schmiert ab. Wg. einem ungültigen Befehl.

__________________
"Imagination ist more than Knowledge"
27.08.2007 17:32 Gisa ist offline E-Mail an Gisa senden Beiträge von Gisa suchen Nehmen Sie Gisa in Ihre Freundesliste auf
Gisa Gisa ist männlich
Mitglied


Dabei seit: 06.02.2007
Beiträge: 47
Herkunft: DE

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

so habe das ganze nochmal wiederholt.
Ich kann meine test.exe zwar öffnen aber es öffnet sich nur einen console. Sonst läuft da nix ab. Es sollte eigentlich einen text von der Standardeingabe in Großbuchstabe umwandeln.

Bitte um Hilfe.

Gruß
Gisa

__________________
"Imagination ist more than Knowledge"
29.08.2007 23:29 Gisa ist offline E-Mail an Gisa senden Beiträge von Gisa suchen Nehmen Sie Gisa in Ihre Freundesliste auf
Tobias
Routinier


Dabei seit: 18.09.2006
Beiträge: 324

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Wenn sich die Console geöffnet hat musst du den Text eintippen und Enter drücken.
30.08.2007 10:12 Tobias ist offline E-Mail an Tobias senden Beiträge von Tobias suchen Nehmen Sie Tobias in Ihre Freundesliste auf
Gisa Gisa ist männlich
Mitglied


Dabei seit: 06.02.2007
Beiträge: 47
Herkunft: DE

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

das hatte ich versucht.
Ich kann nix eingeben. Es wird zwar geöffnet aber ich kann nix eintippen.
Was mach ich falsch?

Grüße
Gisa

__________________
"Imagination ist more than Knowledge"
30.08.2007 10:35 Gisa ist offline E-Mail an Gisa senden Beiträge von Gisa suchen Nehmen Sie Gisa in Ihre Freundesliste auf
Tobias
Routinier


Dabei seit: 18.09.2006
Beiträge: 324

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Ich sehe gerade, dass du in deiner Main-Funktion garkeine Schleife zum einlesen definiert hast. Also veränder mal deine main-Funktion:

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:

int main(void) {

    int token;

    while ((token = yylex()) != EOF) {

      [...]

    }
    	
    exit(0);
}
30.08.2007 12:38 Tobias ist offline E-Mail an Tobias senden Beiträge von Tobias suchen Nehmen Sie Tobias in Ihre Freundesliste auf
Gisa Gisa ist männlich
Mitglied


Dabei seit: 06.02.2007
Beiträge: 47
Herkunft: DE

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

passt. jetzt klappts
eine for schleife zu der while schleife :-).

Danke dir und viele Grüße
Gisa

jetzt kann ich was eingeben und test wandelt die kleinbuchstaben ind großbuchstaben um. :-)

__________________
"Imagination ist more than Knowledge"

Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Gisa: 30.08.2007 13:17.

30.08.2007 13:16 Gisa ist offline E-Mail an Gisa senden Beiträge von Gisa suchen Nehmen Sie Gisa in Ihre Freundesliste auf
Baumstruktur | Brettstruktur
Gehe zu:
Neues Thema erstellen Antwort erstellen
Informatiker Board » Themengebiete » Theoretische Informatik » Compilerbau - Scanner Generator