이 답변은 Very basic dcg prolog syntax 조금 도와 줬지만 [X]는 다음 문자 만 가져옵니다. 전체 문자를 읽고 싶습니다.DCG : DCG {} 코드 내의 변수에 나머지를 할당
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()"조건은 간단 단지 형식()으로 실행 규칙이 그래서 그것을 실행으로 무슨 일이 일어나고 있는지 볼 수 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, ???)}, !.
은 그래서가는 곳 "???" 입니다. 그것은 가능한가 ... 그것은 틀림 없다. DCP 규칙을 다시 확장하는 방법에 대한 gprolog 규칙을 다시 읽으 려합니다. 그러나 (facepalm) 나 자신에 대한 것이지만 그 동안은 도움이 가장 환영받을 것입니다.
감사합니다. Sean.
매트, 좋은 대답. 나는 Prolog와 멍청이이고 DCG 규칙은 아직 미묘한 차이를 느껴야한다고 생각합니다! 나는 그걸로 일할 것이고 의심의 여지가 그것을 추적하는 것은 나를 더럽 히게 도움이 될 것입니다. 감사. 좋은 간결한 대답. –
Bummer. 코드를 해봤어야, 너무 흥분 했어! 그것은 아직 나를 위해 작동하지 않습니다. 옵션의 값으로 "[]"을 출력합니다. 나는 더 열심히 노력할 것이다. .. 곧 나는 추측한다. .. –
매트, 나는 규칙의 순서가 틀리다라고 생각한다. 빈 목록 케이스를 넣으면 마지막 것이 훨씬 좋아 보인다! 그 부분에 대한 감시가 당신 생각입니까? –