11.01.2015 Aufrufe

pdf (1820 Kb) - Fachgebiet Datenbanken und Informationssysteme ...

pdf (1820 Kb) - Fachgebiet Datenbanken und Informationssysteme ...

pdf (1820 Kb) - Fachgebiet Datenbanken und Informationssysteme ...

MEHR ANZEIGEN
WENIGER ANZEIGEN

Erfolgreiche ePaper selbst erstellen

Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.

UnaryRAExpession(): RelationIdent() |<br />

„(„ RAExpression() [ Alias() ] „)“ |<br />

„[„ AttList() „]“ „(„ RAExpression() „)“ |<br />

„[„ Condition() „]“ „(„ RAExpression() „)“ |<br />

„[„ GroupList() „“ AggrList() „]“ „(„ RAExpression() „)“<br />

Für Selektionsbedingung muss ein anderes Nichtterminal verwendet werden als für die<br />

Joinbedingungen, da hier nicht nur Und-Verknüpfungen, sondern beliebige boolsche Verknüpfungen<br />

von Vergleichen erlaubt sind.<br />

Für die Relationen- <strong>und</strong> Aliasnamen ergeben sich folgende Produktionen.<br />

RelationIdent(): <br />

Alias(): <br />

Mit den bisher gegebenen Produktionen lassen sich auf relationenalgebraischer Ebene<br />

bereits beliebige Ausdrücke rekursiv erstellen, es fehlen aber noch die Produktionen für<br />

die Bedingungen <strong>und</strong> Attribut-Listen.<br />

Eine Selektionsbedingung besteht aus logischen Verknüpfungen von Vergleichs-Ausdrücken.<br />

Da die logischen Operatoren unterschiedliche Prioritäten besitzen, müssen hier mehrere<br />

Produktionen erstellt werden. Stellt man sich einen Ableitungsbaum vor, so müssen sich<br />

ganz allgemein Operatoren mit einer niedrigen Priorität möglichst weit entfernt von den<br />

terminalen Operanden-Symbolen, also möglichst weit oben im Baum befinden. Bezogen<br />

auf die Grammatik bedeutet dies, dass für jede Prioritätsstufe eine Produktion vorhanden<br />

sein muss. Die Produktion werden hierarchisch durchlaufen. In der ersten Produktion<br />

können optional Symbole mit niedrieger Priorität erkannt werden oder direkt in die<br />

nächste Produktion gewechselt werden. Bei den logischen Operatoren besitzt die Oder-<br />

Verknüpfung die niedrigste Priorität, eine Und-Verknüpfung eine höhere <strong>und</strong> der Not-<br />

Operator die höchste. Zusäzlich muss die Änderung der Prioritäten durch Klammerung<br />

mit einbezogen werden. Es ergeben sich folgende Produktionen.<br />

Conditon(): AndExpression() ( AndExpression())∗<br />

AndExpression(): NotExpression() (AND NotExpression)∗<br />

NotExpression(): [] ( Comparison() | "‘("‘ Condition() "‘)"’␣)<br />

Da keine Schachtelung von Vergleichen möglich ist, müssen hier keine Prioritäts-Regeln<br />

beachtet werden. Es muss daher nur eine Produktion vorhanden sein.<br />

Comparison(): AttributeTerm() ( AttriuteTerm() |<br />

[] |<br />

|<br />

Literal() Literal() )<br />

Ein Literal kann hierbei ein beliebiges Literal sein.<br />

20

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!