Hallo Leute,
ich versuch mich gerade im schreiben eines Scanners und Parsers. Ich geh wie folgt vor:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30:
| type tokenType_t = ( T_WORD ); type token_t = record name: string; kind: tokenType_t; npos: integer; end;
procedure config_t.scan(token: token_t); var len: integer; begin len := length(self.script);
while( t.npos <= len )do begin
if( isAlpha(self.script[t.npos]) )then begin
while( isAlpha(self.script[t.npos]) or isNum(self.script[t.npos]) or (self.script[t.npos] = '_') )do begin t.name := t.name + self.script[t.npos]; inc(t.npos); end;
t.kind := T_WORD; end; |
isAlpha und isNum schaut ob das aktuelle char laut asciicode ein Buchstabe oder ne Nummber ist.
Jetzt geb ich also jedem Token gleich nen Typ(hier WORD) was ich später bei Parser nehmen kann.
Meine Fragen:
1) ist es so richtig, dass ich den string per t.name := t.name + self.script[t.npos] baue oder gibt es ne andere, bessere Mglkeit?
2) wie kann ich nen parser sinnvoll aufbauen, zb wenn ich ne zuweisung machen will:
var1 = 1234;
dann würd ich jetzt in der Tokenliste auf ein = prüfen und schauen ob das wort davor nen T_WORD ist und das wort danach nen T_WORD oder T_NUMBER und dann halt noch das semicolon. Aber das artet ja in riesige if verschachtellungen aus..
wie geht das einfcacher?
mfG lion