Path: | A1_patterns.rb |
Last Update: | Wed Feb 15 12:56:42 Westeuropäische Normalzeit 2006 |
Dieses Programm stellt zwei Funktionen zur Verfügung, die einen String in einer while-Sprache in seine Bestandteile zerlegen bzw. ihren Tokenklassen zuordnen. Diese Funktionen werden an folgendem Beispiel getestet:
d:=80; while (x>=y) do d:=(d div 2); x:=(x-y); od
Author: | Lars Gerhard |
Die Methode "bestimme" scant einen String von Anfang bis Ende und ordnet sie den Tokenklassen zu. Diese Klassen sind in einem Array und einem Hash-Set als reguläre Ausdrücke gespeichert. Die Ordnung des Token-Array ergibt gleichzeitig auch die Priorität der Tokens. Hier also in absteigender Reihenfolge: name, zahl, addOp, mulOp, auf, zu, ergibt, strichpunkt (d.h. strichpunkt hat die niedrigste Priorität). Ob diese Anordnung sinnvoll ist, spielt für den Scanner keine Rolle.
Das Hash-Set wird nur verwendet, weil der Programmtext leichter verständlich ist, als bei einem mehr dimensionalen Array.
Die Zuordnung zu den einzelnen Tokens: Dazu wird die Eingabe zunächst zerlegt. Danach werden die Tokens in der entsprechend durch Prioroitäten festgelegten Reihenfolge auf die Bestandteile angewendet. Sobald ein Treffer gefunden ist, wird accumulated auf true gesetzt und der nächste Bestandteil der Eingabe geprüft.
Diese Methode zerlegt einen Eingabestring in seine Bestandteile, die durch Ruby-Patterns gegeben sind Allerdings werden die einzelnen Teile nicht den Tokenklassen zugeordnet, sondern nur in ein Array ge schrieben, welches von der Methode dann zurückgegeben wird. Die Patterns sind: