【发布时间】:2020-02-13 16:13:42
【问题描述】:
我正在编写一个代码生成器,它将定句语法转换为其他语法符号。为此,我需要扩展一个语法规则:
:- initialization(main).
main :-
-->(example,A),writeln(A).
% this should print ([a],example1), but this is a runtime error
example --> [a],example1.
example1 --> [b].
但-->(example, A) 并没有扩展规则,即使-->/2 似乎在这里定义。有没有其他方法可以访问 DCG 语法规则的定义?
【问题讨论】:
-
@GuyCoder
listing(example)不打印[a],example1。它改为打印example(A, A). example([a|A], B) :- example(A, B)。 -
你为什么要这个?您正在干扰内置/内置机制。为什么不使用其他运算符?
-
@false 我已经写了好几个DCG语法了,所以我想把它们转换成CHR grammars,而不需要手动重写。
-
一举就能更好地转换该文件。
标签: prolog swi-prolog dcg