Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

Mordrak

1x Contest-Sieger

Beiträge: 121

Wohnort: München

Beruf: Junior IT Consultant

  • Private Nachricht senden

11

10.05.2010, 11:44

Was genau Lex und Yacc ist habe ich noch nicht ganz verstanden.

Lex ist eine lexikalische Analyse. Damit kann man einen Eingabetext in logische Einheiten aufteilen. Also grob gesagt: Anstatt einer unstrukturierten Zeichenkette mit dem Inhalt "12345 - 431" bekommt man dann drei Token: INTEGER (Wert "12345"), "-" und INTEGER (Wert "431").

Mit Yacc wird dann eine grammatikalische Analyse auf Basis der Token beschrieben. Hier wird beschrieben, welche Ausdrücke zulässig sind, wie sie zusammenhängen usw.

Das klassische Beispiel für eine Lex+Yacc-Verwendung ist ein textbasierter Taschenrechner, siehe z.B. auch im "Examples"-Bereich dieser PDF.

Grüße,
Michael
What's yellow and equivalent to the axiom of choice? The Lemmon of Zorn!

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Mordrak« (10.05.2010, 11:49)


12

10.05.2010, 14:36

Was sind Lexer/Scanner und Parser weiß ich schon. Nur habe ich irgentwas davon gelesen, dass Lex und Yacc bzw CppCC den C++ Code für so einen Parser/Scanner generiert, kann aber auch sein das ich mich einfach nur verlesen habe.

Das Grundprinziep ist mir bereits klar und habe mir auch diverse Gedanken darüber gemacht. Den Vorgang des Scanne, Parsen und Ausführen habe ich mir so gedacht:

- Einlesen des Script-Codes
- Scannen des Codes (In Token unterteilen)
- Parsen des Codes (Grammatische überprüfung, daraus Funktionszeiger erstellen)
- Die Funktionszeiger, welche in einem Array abgelegt sind, von oben nach unten abarbeiten

Beim Scannen teile ich den Code in verschiedene Token ein. Als Token nenn ich einfach mal:
- INT_VAR : // Variablen Typ "Int"
- INT_VALUE : [0;9]... // Also eine Abfolge von Zahlen, z.B. 49383

Das ist im moment mein Hauptproblem. Wie soll ich das am besten sauber in Klassen packen? Ich könnte nun eine Hauptklasse machen, die ich z.B. Token nenne. Diese Klasse hat dann einfach nur die enumeration TOKEN_TYPE als Member.

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
class Token
{
public:
    TOKEN_TYPE Type;
};

Von dieser Klasse leite ich dann wieder andere ab:

class IntToken : public Token
{
public:
    int Value;
};

class FloatToken : public Token
{
public:
    float Value;
}

....


Eigentlich eine sehr einfache Möglichkeit die Tokens unter zu bringen, gefallen tut sie mir jedoch nicht. Was mir auf jeden fall helfen würde wäre ein bischen Source von solch einem einfachen Lexer.

C-/C++-Quelltext

1
2
3
4
while(true)
{
    printf("Schon wieder aufgehangen!?");
}

13

10.05.2010, 18:12

Wie wärs mit Templates ? Schadet nicht. Ansonsten guck dir halt mal ein Paar von den OpenSource Lexer an. z.B. Flex

Oberon

Treue Seele

Beiträge: 181

Wohnort: Österreich

Beruf: Student

  • Private Nachricht senden

14

10.05.2010, 20:22

Ich kenne zwar Lex und Yacc nicht, kann aber Boost.Spirit http://www.boost.org/doc/libs/1_43_0/lib…html/index.html empfehlen. Er enthält Parser und Lexer.
Wenn du Boost nicht kennst solltest du dort http://www.boost.org/ sowieso noch herumstöbern :D . Es gibt dort auch noch andere Bibliotheken für solche Dinge, einfach mal unter Libraries->Categorized->String and text processing nachsehen.

Gotbread

Alter Hase

Beiträge: 421

Beruf: Student (Etechnik) + Hiwi

  • Private Nachricht senden

15

12.05.2010, 19:25

ich empfehle dir boost::spirit, damit baut sich dein script fast von selber ;)
Mfg Goti
www.gotbread.bplaced.net
viele tolle spiele kostenlos, viele hardware-basteleien :)

"Es ist nicht undicht, es läuft über" - Homer Simpson

16

16.05.2010, 10:06

Ich bin gerade über etwas gestolpert, wobei ich sofort an diesen Thread hier denken musste.

http://www.developia.de/developia/viewarticle.php?cid=17555
http://www.developia.de/developia/viewarticle.php?cid=17603
http://www.developia.de/developia/viewarticle.php?cid=17706
http://www.developia.de/developia/viewarticle.php?cid=17852

Eine 4-teilige Einführung in die Scriptsprachenprogrammierung und sogar noch auf Deutsch.
Ich weiß es dauert viel zu lange, aber ich habe echt nur Pech. Habe mir heute mal eben im Zeigefinger Nerv und Sehne durchtrennt. Dennoch kann es nicht mehr all zu lange dauern mit dem Tutorial. Außerdem kamen auch noch Prüfungen und dergleichen dazwischen.
Klatscht die Hopper an die Wand, Deutschland ist ein Raverland! :D

Werbeanzeige