Coco/R

aus Wikipedia, der freien Enzyklopädie
Wechseln zu: Navigation, Suche
Coco/R
Maintainer Institut für Systemsoftware, Johannes Kepler Universität Linz
Kategorie Parser-Generator
Lizenz GNU GPL
http://ssw.jku.at/Coco/

Coco/R ist ein Parser-Generator, der aus einer L-attributierten EBNF-Grammatik einer Quellsprache einen Scanner und einen Parser für diese Sprache erzeugt.

Der Scanner arbeitet als endlicher Automat. Er unterstützt Unicode-Zeichen in UTF-8-Kodierung und kann so konfiguriert werden, dass Groß-/Kleinschreibung ignoriert wird. Die Erkennung von Symbolen kann von ihrem rechten Kontext abhängig gemacht werden. Zusätzlich zu Terminalsymbolen kann der Scanner auch Pragmas verarbeiten, d.h. Symbole, die nicht zur Syntax der Sprache gehören, sondern an beliebiger Stelle des Eingabestroms vorkommen können (z. B. Compiler-Direktiven oder Zeilenende-Zeichen).

Der Parser arbeitet nach der Methode des rekursiven Abstiegs. LL(1)-Konflikte können durch Vorgriff um mehrere Symbole oder durch semantische Prüfungen gelöst werden. Somit ist die Klasse der akzeptierten Grammatiken LL(k) für beliebiges k. Fuzzy Parsing kann durch ein ANY-Symbol erreicht werden, das komplementäre Symbolmengen beschreibt. Semantische Aktionen werden in der Sprache des erzeugten Scanners und Parsers beschrieben. Die Fehlerbehandlung im erzeugten Parser kann durch die Angabe von Synchronisationspunkten und "schwachen Terminalsymbolen" verfeinert werden. Die Grammatik wird auch auf Vollständigkeit, Konsistenz, Redundanzfreiheit und auf ihre LL(1)-Eigenschaft geprüft.

Es gibt Versionen von Coco/R für die meisten modernen Sprachen (Java, C#, C++, Pascal, Modula-2, Delphi, VB.NET, Python, Ruby und andere). Für die Java-Version existiert ein Eclipse-Plugin. Grammatiken für C# und Java stehen zum Download bereit.

Coco/R wurde an der Universität Linz entwickelt und steht unter einer Variante der GNU General Public License.

Siehe auch[Bearbeiten]

Literatur[Bearbeiten]

  • Pat Terry: Compiling with C# and Java. Pearson, 2005. Setzt Coco/R im Compilerbau ein.

Weblinks[Bearbeiten]