scanner.pl
来自「一个编译器的源程序」· PL 代码 · 共 40 行
PL
40 行
/* Scanner */
init_scanner(Datei):-
see(Datei),
readln(Eingabe, _, ".", "0123456789", lowercase),
seen,
scan(Eingabe, Symbole),
retractall(symbole(_)), asserta(symbole(Symbole)).
symbol(Symbol):-
symbole([Symbol|_]).
next_symbol:-
retract(symbole([_|Symbole])),
asserta(symbole(Symbole)).
reserviert(X):-
member(X, [while, do, begin, end, write, program, if, then, else]).
/* Symbole bilden */
scan([Symbol1, Symbol2|Symbole1], [Symbol3|Symbole3]):-
zusammensetzen(Symbol1, Symbol2, Symbol3), !,
scan(Symbole1, Symbole3).
scan([Symbol1|Symbole1], [Symbol2|Symbole2]):-
verpacken(Symbol1, Symbol2), !,
scan(Symbole1, Symbole2).
scan([], []).
zusammensetzen(<, =, <=).
zusammensetzen(<, >, <>).
zusammensetzen(>, =, >=).
zusammensetzen(:, =, :=).
verpacken(Symbol, bez(Symbol)):-
name(Symbol, [K|_]),
is_alpha(K),
\+ reserviert(Symbol).
verpacken(Symbol, Symbol).
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?