Syntaxdiagramme in LaTeX


Sie sind hier:TeXTipps und HinweiseSyntaxdiagramme


Verschiedentlich musste ich Syntaxdiagramme erstellen.

Dazu hat mir rail sehr geholfen.

Eine EBNF-Artige Eingabe wird in ein Rail-Diagramm konvertiert. Auf einem Rail-Diagramm kann man analog einem Zug in vordefinierten Wegen entlangfahren.

Man beginnt links und fährt auf den Schienen und kann an Weichen entscheiden was man macht, Schleifen sind möglich. Am Ende verlässt man das Diagramm nach rechts.

Auf dem Weg begegnen einem Terminale, die echten Code entsprechen. Für Nicht-Terminale sollten weitere Rail-Diagramme existieren, die definieren wie es weitergeht. Entlang der Wege sind Beschriftungen möglich.

Anwendung

Das Rail-Paket besteht aus zwei Teilen:

  1. Ein LaTeX-Paket rail.sty
  2. Ein Programm rail (rail.exe für Windows liegt kompiliert vor).
  3. rail.sty definiert eine Umgebung rail, die eine EBNF-artige Eingabe erlaubt.
  4. Mit einem LaTeX-Lauf wird eine .rai-Datei.
  5. rail.exe verarbeitet die .rai-Datie und erzeugt eine .rao-Datei.
  6. In einem zweiten LaTeX-Lauf wird die .rao-Datei eingelesen und ein rail-Diagramm erzeugt.

Coding

Beispiel

\begin{rail}
body    :
    [1] ( ( '[' string ']' )
            ? body[2--6] + '|'
            )
    | [2] body[3--6] '*' body[5--6]
    | [2] body[3--6] '+' body[5--6]
    | [3] ( body[4--5] + )
    | [4] body[5] '?'
    | [5] identifier ( '[' string ']' ) ?
    | [5] quote string quote
    | [5] dquote string dquote
    | [5] '(' body[1--6] ')'
    | [5] cr
    | [6]
    ;
\end{rail}

ergibt:

Die verwendete EBNF-Syntax

Gruppierung

Mit Klammern () können Blöcke gebildet werden.

Alternativen

wert1 | wert2 

Optionale Wege sind definierbar, indem man vor oder nach dem | keinen Wert angibt.

optional	|
| optional

Optional

( anweisung ) ?

Wiederholungen

Beispiel kommagetrennte Werte:

( value + ',' )

Da bei Wiederholungen ein Block der wiederholt wird und ein Block zwischen zwei Wiederholungen existiert sollte man Wiederholungsbereiche immer mit () umgeben.

Wegbeschriftungen

[text]

definiert Beschriftungen entlang des Syntaxweges.

Sonderzeichen

Sonderzeichen wie { und } sind primär nicht verwendbar. Mittels

\railalias{identifier}{text}
railterm{identifier}

können aber rail-variablen definiert werden, die es ermöglichen diese Zeichen zu nutzen.

Um alle LaTeX-Sonderzeichen zu nutzen können folgende Definition eingefügt werden:

\railalias{lbrace}{\{}
\railalias{rbrace}{\}}
\railalias{underscore}{\_}
\railalias{dollar}{\$}
\railalias{percent}{\%}
\railalias{ampersand}{<>}
\railalias{backslash}{\char"5C}

Sollen diese Zeichen zugleich Terminale sein, so kann man das ebenfalls definieren:

\railterm{lbrace,rbrace,dollar,percent,ampersand,backslash,underscore}

Fallen