Lesen einer Zeichenfolge (aus einer Datei) in Prolog
-
12-09-2019 - |
Frage
Ich habe einen Lexer und einen Parser in Prolog geschrieben. Es vereint einen String mit seinem AST. Dies ist ein Teil für einen Compiler / Interpreter Projekt arbeite ich an. Natürlich, ich will jetzt die Zeichenfolge aus einer Datei lesen, um es zu analysieren. Allerdings haben die Prädikate ich dafür gefunden ist lesen , und es liest nur Prolog Atome und Prädikate, wie Dateien mit
hello.
Ich habe mit der twiddling double_quotes Einstellungen, aber ohne Erfolg.
Ich möchte in der Lage, eine Datei mit so etwas zu lesen
let id = \x.x in id (S (S Z))
und dann diese Zeichenfolge an den Parsing Prädikate senden.
Lösung
Sie können mit read_line_to_codes/2
oder read_line_to_codes/3
. Ein Beispielprogramm, das aus einzelnen Zeilen liest stdin und druckt sie auf stdout ist die folgende:
read_lines([H|T]) :-
read_line_to_codes(user_input, H), H \= end_of_file, read_lines(T).
read_lines([]).
write_lines([]).
write_lines([H|T]) :-
writef("%s\n", [H]), write_lines(T).
main :-
read_lines(X), write_lines(X).
(Dies verwendet writef/2
für den Druck.) Es gibt auch read_stream_to_codes/2
und read_stream_to_codes/3
, die mit Linien nicht betroffen sind. Der folgende Code druckt alle Eingaben von stdin in einem Rutsch zu stdout:
main :-
read_stream_to_codes(user_input, X), writef("%s", [X]).
Natürlich ist es auch möglich, aus einer Datei zu lesen, statt stdin. Weitere finden Sie in der readutil
Bibliothek.