Meldung vom: | Verfasser/in: Clemens Beck & Jan Engelhardt
Vom Regest zur Grammatik - ein Beispiel
Wie bereits im vorherigen Beitrag erwähnt, macht den Anfang dieses Prozesses die Suche nach Markerworten, die auf eine bestimmte Art des Eintrages hinweisen. So sind Einträge, die eine Annatenzahlung dokumentieren, immer mit dem Kürzel „solv.“ („bezahlt“) versehen. Anhand dieser Markerworte kann nun eine Auswahl an möglichst verschieden aufgebauten Einträgen gefunden werden, aus derer sich die Grammatik konstruieren lässt. Bereits der erste Blick auf die Einträge lässt die charakteristischen Regelmäßigkeiten des Repertorium Germanium erkennen. Alle Einträge beginnen (nach dem sogenannten Head, welcher allgemeine und biographische Informationen über den Antragssteller enthält, mit dem Wort „solv.“ Im Falle des ersten abgebildeten Treffers (RGIII/213) folgt nun das Kürzel „p.m.“ („per manus“ = „durch die Hand von“) und anschließend ein weiterer Name. Dies ist der Name der Person , der für den eigentlichen Schuldner den Geldbetrag einzahlte, „durch dessen Hand“ also bezahlt wurde. Anschließend folgt der Geldbetrag in arabischen Zahlen und das Kürzel „fl.“ für die Währung, in diesem Fall der Florentinische Gulden (Florin). Diese Informationen sind noch relativ einfach in eine Grammatik zu überführen. In dem von uns verwendete Programm sähe dies so aus:
annatePay: introAnn einzahler waehrung;
Eine Annatenzahlung besteht aus einem „Annatenintro“ (dem Markerwort), einem Einzahler und eine Währung. Jeder dieser Bestandteile muss genau ausdifferenziert werden, indem die jeweiligen möglichen Ausprägungen jeweils aufgelistet werden:
introAnn : ’<abk ref="720">solv.</abk>’ ;
einzahler : ’<abk ref="522">p. m.</abk>’ person ;
waehrung : ’(INT (’<abk ref="354">fl.</abk>’| ’<abk ref="716">sol.</abk>’| ’<abk ref="277">den.</abk>’)
Das Intro einer Anntenzahlung besteht immer aus dem gleichen Wort: „solv.“; ein Einzahler besteht immer aus der Abkürzung „p.m.“, gefolgt voneinem Personennamen. Streng genommen bedürfte „Person“ an dieser Stelle einer eigenen Ausdefinierung, auf die jedoch aus Platz und Verständnisgründen verzichtet sei. Als „Währung“ wird eine Konstruktion bezeichnet, die aus einer arabischen Zahl besteht, auf die eine von mehreren Währungen folgen kann. Da die Menge der Währung nur ganzzahlig angegeben wird, ist hierfür der Datentyp Integer (INT) ausreichend. Der senkrechte Strich (auch „Pipe“ genannt) markiert ein logisches „oder“ und bedeutet, dass genau eine der abgetrennten Optionen folgen kann. In unserem vereinfachten Beispiel kennt das Programm die Währungen Florin („fl.“), Solidus („sol.“) und Denar („den.“).
Diese Grammatik bildet nun einen einzigen Regesteneintrag (RG III/213) ab.
Bereits der nächste Eintrag (RGIII/216) jedoch lässt sich mit der Struktur schon nicht mehr darstellen. Zwischen Einzahler und Geldwert wird hier erläutert, um was für eine Art der Zahlung es sich handelt. „Pro complem. annate“ bedeutet dabei, dass es sich nur um eine Teilzahlung von Annaten handelt. Das nächste Beispiel fügt neben der Tatsache, dass es sich um eine andere Zahlungsart („pro parte annate“) handelt (ebenfalls um Annaten, jedoch um die Abschlusszahlung) noch die Pfründe hinzu, für die bezahlt wird. Einzelne Bestandteile eines Sublemmas können also optional sein und tauchen daher nicht in jedem Regest auf. Diese wird in ANTLR mit Hilfe eines Fragezeichens abgebildet. Nach einer Einarbeitung all dieser und weiterer Unregelmäßigkeiten ergibt sich folgende grammatische Regel:
grammar AnnatenZahl;
annatePay: introAnn einzahler? beschreibung? (waehrung | pfruende spec? Waehrung);
Auf das Intro folgt optional ein Einzahler, dann optional eine nähere Beschreibung und darauf entweder direkt ein Geldbetrag mit Währung oder zunächst die entsprechende Pfründe mit einer optionalen Spezifizierung (beispielsweise in welchem Umfang mit der Pfründe Seelsorgepflichten verbunden sind) und dann Art und Menge der Währung.
Die XML-Auszeichnung
Beim Parsen sucht ANTLR innerhalb der Regesteneinträgs die entsprechenden Markerworte. Stellt die „ALL(*)“-Parsertechnik mittels des „Look Aheads“ fest, dass sowohl das Markerworte als auch die darauf folgenden Tokens (kleinste Bestandteile der Grammatik, in unserem Fall die einzelnen Worte) in das Schema der möglichen Ausprägungen einer Annatenzahlung passen, so leitet ANTLR in diese eine / die benötigte grammatische Regel ab. Dabei werden die einzelnen Bestandteile gemäß den grammatischen Regeln identifiziert und in einem Parserbaum ausgegeben. Mittels dieses Parserbaums ist es wiederum möglich die Regesten und Sublemmas in XML auszuzeichnen. Wir können beispielsweise jede Annatenzahlung als solche annotieren, damit diese Informationen dauerhaft im XML abgebildet werden und bei Bedarf leichter extrahiert werden können.