質問

Prolog でレクサーとパーサーを作成しました。文字列とその AST を統合します。これは私が取り組んでいるコンパイラー/インタープリター プロジェクトの一部です。当然のことながら、ここではファイルから文字列を読み取って解析したいと考えています。ただし、これに対して私が見つけた述語は次のとおりです 読む, 、そしてそれはPrologのアトムと述語だけを読み取ります。

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]).

もちろん、stdin の代わりにファイルから読み取ることも可能です。詳細については、を参照してください。 readutil 図書館。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top