【发布时间】:2013-09-10 12:37:38
【问题描述】:
这个答案:Very basic dcg prolog syntax 帮助了我一点,但 [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() 到标准输出执行的规则,因此我可以看到它运行时发生了什么。如果我手动编写代码,我会这样做:
%% 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, ??? )}, !.
那么“???”是。有没有可能……应该有。我将重新阅读 gprolog 规则,了解它如何再次扩展 DCG 规则,以防我自己(捂脸)但同时欢迎任何帮助。
谢谢, 肖恩。
【问题讨论】: