Чтение строки (из файла) в Прологе
-
12-09-2019 - |
Вопрос
Я написал лексер и парсер на Прологе.Он объединяет строку с ее AST.Это часть проекта компилятора/интерпретатора, над которым я работаю.Естественно, теперь я хочу прочитать строку из файла, чтобы проанализировать ее.Однако предикаты, которые я нашел для этого, читать, и он читает только атомы и предикаты Пролога, например файлы с
hello.
я возился с двойные кавычки настройки, но безуспешно.
Я хочу иметь возможность читать файл с чем-то вроде этого
let id = \x.x in id (S (S Z))
а затем отправьте эту строку в предикаты синтаксического анализа.
Решение
Вы можете использовать read_line_to_codes/2
или read_line_to_codes/3
.Пример программы, которая читает отдельные строки из стандартный ввод и распечатывает их на стандартный вывод следующее:
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).
(Это использует writef/2
для печати.) Есть также read_stream_to_codes/2
и read_stream_to_codes/3
, которые не связаны с линиями.Следующий код выводит все входные данные со стандартного ввода на стандартный вывод за один раз:
main :-
read_stream_to_codes(user_input, X), writef("%s", [X]).
Конечно, можно также читать из файла вместо стандартного ввода.Подробнее см. readutil
библиотека.