Einzelnen Beitrag anzeigen

Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.107 Beiträge
 
Delphi 11 Alexandria
 
#4

Re: Wer zeigt mir, wie ich parsen muss?

  Alt 12. Apr 2006, 21:09
Moin Tom,

also ich würde es, stilisiert, so angehen:

Delphi-Quellcode:
while i <= length(sBuffer) do begin
  case sBuffer[i] of
    'a'..'z' : begin // Bezeichner möglich
      // alle Zeichen aus dem Buffer auslesen, bis zum ersten Auftreten
      // eines Zeichens, dass nicht in einem Bezeichner vorkommen kann
      // Hierbei i entsprechend hochzählen (muss am Ende den Index des letzten
      // gültigen Zeichens enthalten
      // Jetzt kann geprüft werden, ob es sich nun um ein Keyword oder eine Variable
      // handelt, und der Wert entsprechend weggeschrieben werden.
    end;
    ';',',' : begin // Delimiter
      // Kann direkt als Token geschrieben werden
    end;
    '/' : begin // Evtl. beginnt hier ein Kommentar
      if i < length(sBuffer) then begin
        // folgt ein * ?
        // Ja, dann bis */ suchen, sonst direkt / übernehmen
      end else begin
      // i = Bufferlänge => Es kann kein Kommentar sein
      end;
    end;
    #32,#10,#13,#09 :; // Whitespace, es gibt nichts zu tun
  end;
  inc(i);
end;
Das nur einmal als grobes Beispiel. Das Auslesen eines Bezeichners sollte auch nicht direkt in der Schleife geschehen, sondern als Funktion ausgelagert werden, die, beispielsweise, als DEA ausgeführt ist, um einen gültigen Bezeichner zu extrahieren.
Unter dem Begriff "Zustandsautomat" kannst Du auch einiges als Erklärung für einen DEA finden.

Vielleicht kannst Du für CSS auch so etwas finden, wie die Referenz für C bzw. C++, z.B. bei MS.
Dort werden die verschiedenen Phasen eines Compilerdurchlaufes in Einzelheiten beschrieben.

BTW:
Ein Token setzt sich, i.d.R., aus zwei Teilen zusammen, nämlich Symbol und Attribut, wobei letzteres nur bei Variablen Werten erforderlich ist.
Beispielweise könnte das Token für Addition als (+,) dargestellt werden, da hier nur das Symbol interessiert, wohingegen das Token für eine Variable als (var,MyVar) dargestellt werden kann, wobei var das Symbol für eine Variable im allgemeinen steht, und MyVar den Namen des Bezeichners angibt.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat