AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Text auf reservierte Schlüsselwörter untersuchen
Thema durchsuchen
Ansicht
Themen-Optionen

Text auf reservierte Schlüsselwörter untersuchen

Ein Thema von Pseudemys Nelsoni · begonnen am 15. Mai 2005 · letzter Beitrag vom 15. Mai 2005
Antwort Antwort
Benutzerbild von Pseudemys Nelsoni
Pseudemys Nelsoni

Registriert seit: 24. Dez 2002
Ort: Hamburg-Harburg
3.551 Beiträge
 
#1

Text auf reservierte Schlüsselwörter untersuchen

  Alt 15. Mai 2005, 08:07
Moin,

ich habe vor eine kleine Scriptsprache in meinem Programm einzubauen, das Parsen sollte kein Problem darstellen. Wie sieht es aber aus mit dem Suchen nach Schlüsselwörtern? Muss ich jedes Wort des Textes mit einer (internen) Commandliste prüfen oder wie? Könnte mir vorstellen das das ne langsame Methode ist.

Jermand ne andere Idee?
Mario
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#2

Re: Text auf reservierte Schlüsselwörter untersuchen

  Alt 15. Mai 2005, 08:33
Wenn es dir nur um das Einbauen geht, dann kannst du auf fertige engines zurückgreifen, z.B. Pascal Script von Carlo Kok (RemObjects) oder oPascalScript von Felix Deschamps.

Grüße vom marabu
  Mit Zitat antworten Zitat
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
Benutzerbild von Pseudemys Nelsoni
Pseudemys Nelsoni

Registriert seit: 24. Dez 2002
Ort: Hamburg-Harburg
3.551 Beiträge
 
#4

Re: Text auf reservierte Schlüsselwörter untersuchen

  Alt 15. Mai 2005, 08:56
Moin,

danke für die ausführlichen Antworten
Mario
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:11 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz