Вопрос

Я написал лексер и парсер на Прологе.Он объединяет строку с ее 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 библиотека.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top