-
Notifications
You must be signed in to change notification settings - Fork 9
/
Copy pathkattio.pl
51 lines (35 loc) · 1.04 KB
/
kattio.pl
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
% Prolog predicates for tokenized reading from stdin.
%
% Provides the following predicates:
% read_string(S): reads a string token
% read_int(I): reads an integer token
% read_atom(A): reads an atom
%
% For all three predicates, the result is unified with end_of_file
% if the end of the input stream was reached.
%
:- module(kattio, [read_string/1, read_int/1, read_atom/1]).
read_string(S) :-
read_token_codes(S).
read_int(I) :-
read_token_codes(Codes),
(Codes == end_of_file -> I = Codes ; number_codes(I, Codes)).
read_atom(A) :-
read_token_codes(Codes),
(Codes == end_of_file -> A = Codes ; atom_codes(A, Codes)).
% Internal predicate for getting the next token
read_token_codes(end_of_file) :-
peek_code(end_of_file), !.
read_token_codes(Codes) :-
peek_code(C),
\+ code_type(C, space), !,
read_token_codes_helper(Codes).
read_token_codes(T) :-
get_char(_), !,
read_token_codes(T).
read_token_codes_helper([C0|C]) :-
peek_code(C0),
\+ code_type(C0, space), !,
get_code(C0),
read_token_codes_helper(C).
read_token_codes_helper([]).