EBNF-Analysis
First off all the programs EBNF for feed:
* Syntax =     {Production} ".".
  Production = Identifier "=" Expression ".".
  Expression = Term {"|" Term}.
  Term =       Factor {Factor}.
  Factor =     Identifier |
               Literal |
               "(" Expression ")" |
               "[" Expression "]" |
               "{" Expression "}" .
  Identifier=  "A" | "B" | "C" {Identifier}.
  Literal=     "'" ( "a" | "b" | "c" | "1" | "2" | "3") "'".
.
now her's the program:
{ ************************************************************
  Name        : EBNF
  Description : Syntax-Analysis for EBNF, equal to
                program 2, N.Wirth Compilerbau, page 32.
  Date        : 94.09.02
  Author      : H.Mucker
  ************************************************************}
PROGRAM Ebnf (input,output);
CONST MAXSTRLEN = 15;
      LOWER     = ['a'..'z'];
      UPPER     = ['A'..'Z'];
      CIPHER    = ['0'..'9'];
VAR   ch        : char;
      inFile    : text;
      symbol    : tString;
{ ************************************************************
              S T R I N G - P R O D E D U R E S
  ************************************************************}
PROCEDURE StrReadln (VAR ioString : tString);
VAR i  : integer;
    ch : char;
BEGIN
  i:= 1;
  REPEAT
    read(ch);
    ioString[i]:= ch;
    i:= i+1
  UNTIL EOLN(input) or (i > MAXSTRLEN);
  readln;
  IF i <= MAXSTRLEN THEN
    REPEAT
      ioString[i]:= chr(32);
      i:= i+1
    UNTIL i > MAXSTRLEN
END; { StrReadln }
PROCEDURE StrEmpty (var ioString : tString);
VAR i : integer;
BEGIN
  for i:= 1 to MAXSTRLEN do
    ioString[i]:= ' '
END; { StrEmpty }
PROCEDURE StrWrite (inString : tString);
VAR i,e : integer;
BEGIN
  e:= MAXSTRLEN;
  WHILE (inString[e] = chr(32)) and (e >= 1) DO
    e:= e-1;
  FOR i:= 1 TO e DO
    write(inString[i])
END; { StrWrite }
PROCEDURE StrWriteln (inString : tString);
BEGIN
  strWrite(inString);
  writeln
END; { StrWriteln }
FUNCTION StrLen (inString : tString) : integer;
VAR i : integer;
BEGIN
  i:= MAXSTRLEN;
  WHILE (inString[i] = chr(32)) and (i >= 1) DO
    i:= i-1;
  strLen:= i
END; { StrLen }
FUNCTION StrComp (inStringA,inStringB : tString) : boolean;
VAR i     : integer;
    equal : boolean;
BEGIN
  i:= 1;
  REPEAT
    equal:= (inStringA[i] = inStringB[i]);
    i:= i+1
  UNTIL (not equal) or (i > MAXSTRLEN);
  strComp:= equal
END; { StrComp }
{ ************************************************************
           A N A L I Z I N G  - P R O C E D U R E S
{ ************************************************************}
PROCEDURE Error;
BEGIN
  writeln('error');
  halt
END; { Error }
PROCEDURE GetSym;
BEGIN
  REPEAT
    read(inFile,ch);
    {
    write(ch);
    }
    {
    IF EOLN(inFile) THEN
      begin
        writeln;
      end
    }
  UNTIL (ch > ' ');
END; { GetSym }
PROCEDURE Production;
  PROCEDURE Identifier;
  VAR i : integer;
  BEGIN
    StrEmpty(symbol);
    i:= 1;
    WHILE ch in LOWER+UPPER DO
      BEGIN
        symbol[i]:= ch;
        i:= i+1;
        GetSym
      END;
    write('IDENTIFIER: '); StrWriteLn(symbol);
  END; { Identifier }
  PROCEDURE Literal;
  VAR i : integer;
  BEGIN
    StrEmpty(symbol);
    i:= 1;
    WHILE ch <> '"' DO
      BEGIN
        symbol[i]:= ch;
        i:= i+1;
        GetSym
      END;
    write('LITERAL:    '); StrWriteLn(symbol);
  END; { Literal }
  PROCEDURE Expression;
    PROCEDURE Term;
      PROCEDURE Factor;
      BEGIN { Factor }
        IF ch in UPPER+LOWER THEN { Non-Terminal Symbol }
          Identifier
        ELSE IF ch = '"' THEN { Terminal Symbol }
          BEGIN
            GetSym;
            Literal;
            IF ch = '"' THEN GetSym
            ELSE Error
          END
        ELSE IF ch = '(' THEN
          BEGIN
            GetSym;
            Expression;
            IF ch = ')' THEN GetSym
            ELSE Error
          END
        ELSE IF ch = '[' THEN
          BEGIN
            GetSym;
            Expression;
            IF ch = ']' THEN GetSym
            ELSE Error
          END
        ELSE IF ch = '{' THEN
          BEGIN
            GetSym;
            Expression;
            IF ch = '}' THEN GetSym
            ELSE Error
          END
        ELSE Error
      END; { Factor }
    BEGIN { Term }
      Factor;
      WHILE (ch in UPPER+LOWER) or
            (ch = '"') or (ch = '(') or
            (ch = '[') or (ch = '{')  DO
        Factor
    END; { Term }
  BEGIN { Expression }
    Term;
    WHILE ch = '|' DO
      BEGIN
        GetSym;
        Term
      END
  END; { Expression }
BEGIN { Production }
  Identifier;
  IF ch = '=' THEN GetSym
  ELSE error;
  Expression;
  IF ch = '.' THEN GetSym
  ELSE error
END; { Production }
{ ************************************************************
                       P R O G R A M
  ************************************************************}
BEGIN
  assign(inFile,'ebnf');
  reset(inFile);
  GetSym;
  WHILE ch <> '.' DO
    Production;
  writeln;
END.
 
                  Alle Touren
Schneebergwege
- Bergrettungssteig
 - Emmysteig
 - Fadensteig
 - Ferdinand Mayr-Weg
 - Fischersteig
 - Franz-Josef-Promenade
 - Hotelries
 - Hochgang
 - Krummbachgraben
 - Kuhschneeberg
 - Kuhsteig
 - Lärchkogelgrat
 - Nandlgraben
 - Nandlgrat
 - Nandlgrat (Alter Nandlsteig)
 - Niederlauf
 - Novembergrat
 - Nördlicher Grafensteig
 - Oberer Herminensteig
 - Oktobergrat
 - Stadelwandgraben
 - Südlicher Grafensteig
 - Unterer Herminensteig
 - Waxriegel
 - Weichtalklamm
 
Raxsteige
- Alpenvereinssteig
 - Altenbergsteig
 - Bärenlochsteig
 - Brandschneide
 - Camillo Kronich-Steig
 - Gaisloch
 - Gamsecksteig
 - Gretchensteig
 - Göbl Kühn-Steig
 - Großes Fuchsloch
 - Großes Wolfstal
 - Großer Kesselgraben
 - Ho Chi Minh Pfad
 - Hoyossteig
 - Karl Kantner-Steig
 - Kaisersteig
 - Kontruszsteig
 - Kronich Eisenweg
 - Martinsteig
 - Peter Jokel-Steig
 - Preinerwandsteig
 - Raxenmäuersteig
 - Reisstalersteig
 - Rudolfsteig
 - Schlangenweg
 - Staudengraben
 - Wildfährte
 - Teufelsbadstubensteig
 - Törlweg
 - Waxriegelsteig
 - Wachthüttelkamm
 
Geführte Touren
- Kienberg und Himberg
 - Silbersberg und Gahns
 - Flatzer Wand Gösing
 - Flatzer Wand und Gösing
 - Gösing Hoyos-Steig
 - Himberg und Kienberg
 - Gösing Hoyos-Steig
 - Schneeberg Oktobergrat
 - Gösing Hoyos-Steig
 - Gösing und Flatzer Wand
 - Gösing Hoyos-Steig
 - Himberg und Kienberg
 - Flatzer Wand und Gösing
 - Gösing Hoyos-Steig
 - Gahns Saurüssel
 - Rax mit Schneeschuhen
 - Himberg und Kienberg
 - Flatzer Wand und Gösing
 - Gösing Hoyossteig
 - Prettschachersteig und Krummbachstein
 - Schneeberg Oktobergrat
 - Gösing Hoyossteig
 - Semmering Bahnwanderweg
 - Miesenbach Biedermeierrunde
 - Gösing Hoyossteig
 - Rax mit Schneeschuhen
 - Flatzer Wand und Gösing
 - Gösing Hoyossteig
 - Schneeberg Novembergrat
 - Schneeberg Grafensteig und Hengst
 - Schneeberg Nandlgrat
 - Gösing Hoyossteig
 - Gahns Saurüssel
 - Biedermeierrunde Miesenbach
 - Gösing Hoyossteig
 - Gösing Hoyossteig
 - Rax mit Schneeschuhen
 - Gahns Saurüssel
 - Rax mit Schneeschuhen
 - Gösing Hoyossteig
 - Schneeberg Novembergrat
 - Krummbachstein
 - Schneeberg Oktobergrat
 - Schneeberg Alter Nandlsteig
 - Schneeberg Herminensteig
 - Gösing und Flatzer Wand
 - Rax mit Schneeschuhen
 - Gösing Hoyossteig
 - Schneeberg_Novembergrat
 - Schneeberg Alter Nandlsteig
 - Schneeberg Herminensteig
 - Schneeberg Brandmauer und Stadelwand
 - Schneeberg und Hengst
 - Gösing Hoyos-Steig
 - Rax mit Schneeschuhen
 - Schneeberg Herminensteig und Hengst
 - Schneeberg Novembergrat
 - Schneeberg Herminensteig
 - Schneeberg Herminensteig
 - Schneeberg Alter Nandlsteig
 - Miesenbach Biedermeierrunde
 - Flatzer Wand und Gösing
 - Dürre Leiten mit Schneeschuhen
 - Rax mit Schneeschuhen
 - Dürre Leiten mit Schneeschuhen
 - Schneeberg Brandmauer
 - Schneeberg Novembergrat
 - Miesenbach Biedermeierrrunde
 - Gahns Eng und Saurüssel mit Schneeschuhen
 - Kuhschneeberg mit Schneeschuhen
 - Novembergrat
 - Nördlicher Grafensteig und Hengst
 - Miesenbach Biedermeierrunde
 - Flatzer Wand und Gösing
 - Großes Wolfstal
 - Alter Nandlsteig
 - Herminensteigvariationen
 - Gahns Saurüssel mit Schneeschuhen
 - Dürre Leiten mit Schneeschuhen
 - Kuhschneeberg mit Schneeschuhen
 - Flatzer Wand und Gösing
 - Großes Wolfstal
 - Alter Nandlsteig
 - Biedermeierrunde in Miesenbach
 - Gahns Saurüssel und Eng