我有DCG格式,我想模拟这段代码:
s --> [a].
s --> s, s.并以下列方式调用:
?- phrase(s, X).我弥补了下面的代码,但是缺少了一些东西。
rule(s,[a]).
rule(s,[s,s]).至于短语部分,我不知道如何将这些规则称为短语中的规则?
发布于 2013-12-05 08:21:45
DCG通常实现向规则中添加一对参数,以获得完成解析所需的快速列表处理,这是一种称为差异列表的基本技术的应用程序。您可以使用清单/1检查翻译:
?- [user].
|: s --> [a].
|: s --> s, s.
% user://1 compiled 0.04 sec, 4 clauses
?- listing(s).
s([a|A], A).
s(A, C) :-
s(A, B),
s(B, C).短语/2 'just‘将令牌列表与第一个语法(隐藏)参数关联起来,并将空列表与第二个隐藏列表关联起来,这意味着整个令牌列表必须通过解析来使用。
由于您是在模拟DCG,所以您的任务应该减少到向代码中添加一个令牌列表。如果代码得到正确的实现(不容易做到正确),则模拟将能够解析和生成任何合法短语。在您的示例中,序列至少为1 a。
不知道你如何解释你的规则,很难给出任何明智的暗示.
https://stackoverflow.com/questions/20391737
复制相似问题