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.