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