Einzelnen Beitrag anzeigen

alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#3

Re: Text auf reservierte Schlüsselwörter untersuchen

  Alt 15. Mai 2005, 08:39
Was Du benötigst, ist ein sog. 'Tokenizer', der einen 'Input' in seine Bestandteile (die 'Token') zerlegst. Ein Token ist z.B.:
- Eine Zahl
- Ein String
- Ein Operator
- Ein Schlüsselwort (if, then, else, procedure etc.)
- Ein ungültiges Zeichen
- Ein Kommandotrennzeichen (bei Delphi: #13 oder ';')
...
Das sind die Tokenklassen. Innerhalb des Tokenizers gibt es eine Funktion, die zu einem Token die dazugehörige Tokenklasse herausfindet.
Die Funktion "GetNextToken : TToken" sieht also z.B. so aus:
Delphi-Quellcode:
Function GetNextToken : TToken;
Var
  aToken : String;

Begin
  Result.Token := ExtractNextTokenFromInput;
  Result.TokenClass := FindTokenClass (Result.Token);
End;
Wobei ExtractNextTokenFromInput, wie der Name schon sagt, aus dem Input das nächste 'Wort' extrahiert. Die Tokenklasse ist z.B. ein ordinaler Typ, mit dem Du im eigentlichen Interpreter in der Hauptschleife eine Case-Anweisung erzeugst, die optimale Performance sicherstellt. Hier mal Pseudocode, der einen 'Begin ... End;' Block interpretiert.
Delphi-Quellcode:
Procedure ProcessBlockStmt;
Var
  aToken : TToken;
  aDone : Boolean;

Begin
  aDone := False;
  Repeat
    aToken := GetNextToken; // Könnte auch direkt ins 'Case', aber vielleicht braucht man das aToken.Token
    Case aToken.Result of
      tcBegin :
        ProcessBlockStmtn;
      tcIf :
        ProcessIfStatement;
      tcWhile :
        ProcessWhileToken;
      tcFor :
        ProcessForToken;
      tcIdentifier :
        ProcessAssignment;
      tcEnd :
        aDone := True;
      Else
        Raise EParseException.Create (ecInvalidTokenClass, aToken);
      end;
  Until aDone;
End;
Ich hoffe, das hilft.

Versuch mal DWS (Delphi Web Script). Gibt es bei Sourceforge.Net. Der Pascal-Interpreter von Carlo-Cok ist (zumindest in der Version von vor 2 Jahren) grauselig.
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat