Этот ответ: 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.
Буква «с()» предикат является простым и используется только для отслеживания, что правило выполняется с форматом() на стандартный вывод, так что я мог видеть, что происходит, как это работает. Если бы я написал код вручную, я хотел бы сделать:
%% 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
Возвращаясь к первоначальному ВСО:
as_opt --> "--as=", anything, { c(as_opt), gassign(gvValue, ???)}, !.
Итак, что происходит, когда «???» является. Возможно ли это ... должно быть. Я собираюсь перечитать правила gprolog о том, как он снова расширяет правила DCG в случае, если я собираюсь (facepalm) сам, но тем временем любая помощь будет наиболее желанной.
Thanks, Шон.
коврик, хороший ответ. Я предполагаю, что я ноб с правилами Prolog и DCG, мне еще предстоит оценить нюансы! Я буду работать с этим, и, без сомнения, его отслеживание поможет мне в этом разобраться. Благодарю. Хороший краткий ответ. –
Bummer. Должен был пробовать код, слишком волновался! Это пока не работает для меня. Он выводит «[]» в качестве значения параметра. Я постараюсь усерднее ... Вскоре я думаю ... –
коврик, я думаю, что порядок правил неверен. Если я поместил пустой случай в список, все выглядит намного лучше! Вы думаете, это надзор с вашей стороны? –