Class Rule
In: Compilerbau2.rb
Parent: Object

Diese Klasse repräsentiert die einzelnen Regeln. Jede Regel besteht aus einem Symbol als linker Regelseite und einem Array mit Alternativen als rechter Seite der Regel.

Methods

[]   countAlts   from_Yacc   getAlts   getSymbol   isEpsilon   new   to_s  

Public Class methods

Die Methode erzeugt Ausdrucksgrammatiken aus Kurzangaben.

 * Die Kurzangaben sind eine Folge von Zeilen, die jeweils ein Operatortoken  (z.B. addOp) in seinen Eigenschaften beschreiben.
 * Bei binären Operatortoken hat die Zeile den Aufbau:  <Assoc> <Operator>;
 <Assoc> steht für left, right oder none und legt die Assoziativität des
 Operators fest; none besagt, daß keine Assoziativität vorliegt und daher
 bei mehr als einem Operator voll geklammert werden muß.
 * Bei unären Operatortoken hat die Zeile den Aufbau: <Pos> <Operator>;
 <Pos> steht für pre oder post und legt fest, ob der Operator vor oder nach  dem Operanden steht.
 * Die Operatorzeilen sind nach wachsender Präzedenz angeordnet, d.h.
 die  erste Zeile gehört zu dem Operatortoken, das am schwächsten bindet.
 * Die letzte Zeile hat die Form: atom <token 1 >, ..., <tokenN>
 und führt die atomaren Bestandteile des Ausdrucks ein.
 * Die erste Zeile hat die Form: name <Bezeichner>
 und führt den Namen der Ausdrucksgrammatik ein, mit dem alle erzeugten  Nonterminals beginnen.

Der Konstruktor einer Regel bekommt einen String mit der kompletten Regel übergeben. Dieser wird am Trennzeichen -> in die linke und rechte Seite geteilt. Die linke Seite wird dem Konstruktor von Symb übergeben und das neue Symbol im @symbol-Attribut abgelegt. Die rechte Seite wird weiter zerlegt in die verschiedenen Alternativen (Nach Zeilenumbruch beliebiger Einrückung und dem Zeichen |). Diese werden wiederum dem Konstruktor von Alternative übergeben und die so entstehenden Alternativen in das @alts-Array gepackt.

Public Instance methods

Operator der den Zugriff auf die einzelnen Alternativen der Regel ermöglicht. regel[i] liefert das Symbol das im @alts-Array an Index i liegt.

Gibt die Anzahl der Alternativen einer Regel zurück

Einfacher Getter für @alts (Array aller Alternativen)

Einfacher Getter für @symbol

Diese Methode liefert einen boolschen Wert (true oder false) zurück, ob aus dieser Regel das Leerezeichen Epsilon erzeugt werden kann. Dazu muss Epsilon entweder direkt ableitbar sein.

Die to_s Methode, die eine Regel in einem String ausgibt. Auf der linken Seite des Pfeiles ( "->" ) steht das Non-Terminal. Rechts davon stehen dann die Alternativen, die jeweils durch einen "|" getrennt sind. Jede einzelne Alternative steht in einer neuen Zeile. Die einzelnen Alternativen, Trennzeichen und das linke Symbol sind durch Leerzeichen getrennt.

[Validate]