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.

War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top