プロジェクトの一環として、ファイルを読み取り、プログラムで使用できる事実に解析できるパーサーを作成する必要があります。
ファイル構造は次のようになります。
property = { el1 , el2 , ... }.
私が最後に欲しいのは:
property(el1).
property(el2).
...
私は次のようにファイルを読みました:
main :-
open('myFile.txt', read, Str),
read_file(Str,Lines),
close(Str),
write(Lines), nl.
read_file(Stream,[]) :-
at_end_of_stream(Stream).
read_file(Stream,[X|L]) :-
\+ at_end_of_stream(Stream),
read(Stream,X),
parse(X), % Here I call upon my parser.
read_file(Stream,L).
今、私はDCGについていくつかの本とオンラインを読みましたが、それらはすべて、「猫はコウモリを食べる」などの文を生成できる同じ簡単な例を説明しています...上記の例にそれを使用したいとき、私は惨めに失敗します.
私が管理したのは、下の行を「解析」することでした:
property = el1.
に
property(el1).
これとともに:
parse(X) :-
X =.. List, % Reason I do this is because X is one atom and not a list.
phrase(sentence(Statement), List),
asserta(Statement).
sentence(Statement) --> ['=', Gender, Person] , { Statement =.. [Gender, Person] }.
ここでdcgを正しい方法で使用しているかどうかさえわからないので、これに関するヘルプをいただければ幸いです。今私が抱えている問題は、リスト内の複数の要素でこれを行う方法と、「{」と「}」を処理する方法です。
私が本当に欲しいのは、これらのタイプの文 (2 つ以上の要素を持つ) を処理できる dcg です。
dcgs に関しては、このあたりの多くの人がライブラリ dcg_basics と pio を参照していることを知っています。ただし、ライブラリを使用しようとするとエラーが発生するという追加の問題があります。
ERROR: (c:/users/ldevriendt/documents/prolog/file3.pl:3):
Type error: `text' expected, found `http/dcg_basics'
Warning: (c:/users/ldevriendt/documents/prolog/file3.pl:3):
Goal (directive) failed: user:[library(http/dcg_basics)]
私がこれを行うとき:
:- [library(http/dcg_basics)].
追加情報:
- 私は次のプログラムを使用しています: Windows 環境でのSWI-Prolog-Editor 。
これに関するヘルプをいただければ幸いです。
編集:この質問の目的は、DCG とそのパーサーでの使用について詳しく知ることです。