Informatiker Board (http://www.informatikerboard.de/board/index.php)
- Themengebiete (http://www.informatikerboard.de/board/board.php?boardid=1)
-- Theoretische Informatik (http://www.informatikerboard.de/board/board.php?boardid=5)
--- Compilerbau - Scanner Generator (http://www.informatikerboard.de/board/thread.php?threadid=244)


Geschrieben von Gisa am 26.08.2007 um 23:28:

  Compilerbau - Scanner Generator

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



Geschrieben von Tobias am 27.08.2007 um 13:16:

 

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



Geschrieben von Gisa am 27.08.2007 um 14:12:

 

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



Geschrieben von Gisa am 27.08.2007 um 15:29:

 

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



Geschrieben von Tobias am 27.08.2007 um 16:57:

 

Man könnte doch glatt mal versuchen, die Datei auszuführen und gucken was passiert. geschockt



Geschrieben von Gisa am 27.08.2007 um 17:32:

 

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



Geschrieben von Gisa am 29.08.2007 um 23:29:

 

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



Geschrieben von Tobias am 30.08.2007 um 10:12:

 

Wenn sich die Console geöffnet hat musst du den Text eintippen und Enter drücken.



Geschrieben von Gisa am 30.08.2007 um 10:35:

 

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



Geschrieben von Tobias am 30.08.2007 um 12:38:

 

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);
}



Geschrieben von Gisa am 30.08.2007 um 13:16:

 

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. :-)


Forensoftware: Burning Board, entwickelt von WoltLab GmbH