Einzelnen Beitrag anzeigen

alzaimar
(Moderator)

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

Re: Wer zeigt mir, wie ich parsen muss?

  Alt 12. Apr 2006, 06:55
Oje... mal sehen (Kurzform):
1. Ein 'Scanner' zerlegt die Eingabe in Token.
2. Ein 'Token' ist die Grundeinheit oder ein 'Wort' der zu parsenden Sprache.
3. Ein Parser implementiert die Grammatik der zu parsenden Sprache.

So einfach ist das. Bleiben nur noch 3 Kleinigkeiten:
1. Wie schreibt man einen Scanner?
2. Was ist denn eine Grammatik?
3. Und wie implementiert man dann den Parsers?

Ein Scanner liefert also die Wörter des Inputs. Für jedes Wort kann man einen regulären Ausdruck angeben, der genau dieses Wort beschreibt. Den Scanner kann man mit einem 'Deterministischen Endichen Automaten' (DEA) implementieren (reguläre Ausdrücke sind selbst DEA ), der Zeichen für Zeichen gegen die regulären Ausdrücke prüft und bei Erkennen eines vollständigen Wortes dieses 'Token' an den Parser übergibt.

[Edit] Der Kommentar wird z.B. von Scanner erkannt und als 'white Space' an den Parser übergeben [/edit]

Der Parses muss nun noch prüfen, ob die Token-Folge der zu prüfenden Sprache genügt. Dabei erstellt er zwangsweise einen Syntaxbaum, der dann, sozusagen 'en passant' auch die von Dir gewünschte Information enthält.

Wie Du siehst, kommen mit jeder Erklärung neue Begriffe hinzu, was den Schluss zulässt, das 'Parsen' und 'Scannen' nicht so einfach sind. Also, einfach ist es schon, aber nicht trivial. Na ja, trivial ist es auch. Wenn man es kann

Sooo schwer ist das allerdings nicht. Wenn Du einen Scanner geschrieben hast, dann besorge Dir erstmal eine Definition der Sprache, am besten in Backus-Naur-Form. Denn diese Form hilft Dir ungemein bei der Implementierung eines prozeduralen Parsers, der bei einfachen Sprachen am Schnellsten zu implementieren ist.

Hier im Forum habe ich aber schon fertige 'Scanner' und auch einige Artikel über 'Parser' gesehen, sodaß Dir die Foren-Suche weiterhelfen sollte.
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat