home *** CD-ROM | disk | FTP | other *** search
/ Turbo Toolbox / Turbo_Toolbox.iso / 1987 / 09 / bp1.pro < prev    next >
Encoding:
Text File  |  1987-08-09  |  1.4 KB  |  56 lines

  1. /****************************************************
  2.            Programm BP1: Mini-Scanner
  3. *****************************************************/
  4.  
  5. include "KIT.PRO"
  6.  
  7. predicates
  8.   classify(symbol, stringlist, string)
  9.   main
  10.   pattern(symbol, patternlist)
  11.   repeat
  12.   treat(string) 
  13.  
  14. goal 
  15.   main.
  16.  
  17. clauses
  18.   pattern("eine Ganzzahl",
  19.     [span(Numbers), rtab(0)]) :-
  20.     literal(digits, Numbers).
  21.   pattern("ein Operator",  
  22.     [any(["<=",">=",":="]), rtab(0)]).
  23.   pattern("identifier", 
  24.     [any(Letter), span([""| Alfa]), 
  25.     rtab(0)]):-
  26.     literal(letters, Letter), literal(alfanums, Alfa).
  27.   pattern("ein unbekanntes Symbol", 
  28.     [len(1), rtab(0)]).
  29.  
  30.   main :-
  31.     makewindow(1,7,7,"MINI - PARSER",0,0,25,80),     
  32.     repeat,
  33.     nl,
  34.     write("Zeile eingeben (Ende mit <Ctrl-Break>):"), 
  35.     nl, readln(Line),
  36.     treat(Line),
  37.     readln(_),
  38.     fail.    
  39.  
  40.   /* Rekursive Abarbeitung der Eingabezeile: */
  41.   treat(Zeile) :- 
  42.     pattern(Type, P),
  43.     match(Zeile, [span([""," "])| P], X), !, 
  44.     classify(Type, X, ZeilenRest),
  45.     treat(ZeilenRest).
  46.   
  47.   classify(identifier, [_, A, B, Rest], Rest) :- !,
  48.     concat(A, B, C),
  49.     write( C, "  ist ein Bezeichner"), nl.          
  50.   classify(Type, [_, X, Rest], Rest) :- !,
  51.     write( X, "  ist ", Type), nl.
  52.  
  53.   repeat.
  54.   repeat:- repeat.  
  55. /******************* Ende BP1 **********************/
  56.