home *** CD-ROM | disk | FTP | other *** search
- /****************************************************
- Programm BP1: Mini-Scanner
- *****************************************************/
-
- include "KIT.PRO"
-
- predicates
- classify(symbol, stringlist, string)
- main
- pattern(symbol, patternlist)
- repeat
- treat(string)
-
- goal
- main.
-
- clauses
- pattern("eine Ganzzahl",
- [span(Numbers), rtab(0)]) :-
- literal(digits, Numbers).
- pattern("ein Operator",
- [any(["<=",">=",":="]), rtab(0)]).
- pattern("identifier",
- [any(Letter), span([""| Alfa]),
- rtab(0)]):-
- literal(letters, Letter), literal(alfanums, Alfa).
- pattern("ein unbekanntes Symbol",
- [len(1), rtab(0)]).
-
- main :-
- makewindow(1,7,7,"MINI - PARSER",0,0,25,80),
- repeat,
- nl,
- write("Zeile eingeben (Ende mit <Ctrl-Break>):"),
- nl, readln(Line),
- treat(Line),
- readln(_),
- fail.
-
- /* Rekursive Abarbeitung der Eingabezeile: */
- treat(Zeile) :-
- pattern(Type, P),
- match(Zeile, [span([""," "])| P], X), !,
- classify(Type, X, ZeilenRest),
- treat(ZeilenRest).
-
- classify(identifier, [_, A, B, Rest], Rest) :- !,
- concat(A, B, C),
- write( C, " ist ein Bezeichner"), nl.
- classify(Type, [_, X, Rest], Rest) :- !,
- write( X, " ist ", Type), nl.
-
- repeat.
- repeat:- repeat.
- /******************* Ende BP1 **********************/
-