この回答:非常に基本的な dcg プロローグ構文 は少し役に立ちましたが、[X] は次の文字しか取得できません。エンチラーダ全体が必要です。読み進めてください!
コマンド オプション パーサーを作成するために GNU Prolog を使用していますが、DCG ポイントで行き詰まっています。たとえば、「foo --as=json」を検索するこの文法規則がありますが、「何でも」の結果であるコードを取得する方法がわかりません。
as_opt --> "--as=", anything, { c( as_opt )}, !.
anything --> [], {c(anything_match)}.
そして、その gprolog 展開は次のとおりです。
as_opt([45, 45, 97, 115, 61|A], B) :-
anything(A, C),
c(as_opt), !,
C = B.
anything(A, B) :-
c(anything_match), !,
A = B.
"c()" 述語は単純で、format() を使用して実行されたルールを stdout に追跡するために使用されるだけなので、実行中に何が起こっているかを確認できます。コードを手で書いていたら、次のようにします。
%% for completeness here!
c(Msg) :- format("Processed ~w~n", [Msg]).
as_opt([45, 45, 97, 115, 61|A], B) :-
anything(A, C),
c(as_opt), !,
C = B,
{ g_assign( gvValue, B )}. %% just for example
元の DCG に戻ります。
as_opt --> "--as=", anything, { c( as_opt ), gassign( gvValue, ??? )}, !.
では、「???」のどこに何が入りますか? は。それは可能ですか...そうでなければなりません。自分で (facepalm) しようとしている場合に備えて、DCG ルールを拡張する方法について gprolog ルールを読み直しますが、それまでの間、どんな支援も大歓迎です。
ありがとう、ショーン。