如何在prolog中编写方括号?

如何在prolog中编写方括号?,prolog,grammar,context-free-grammar,dcg,Prolog,Grammar,Context Free Grammar,Dcg,这听起来可能很奇怪,但它是在解析器中使用的,我希望能够解析这种形式的东西 富[巴] 因此,这将在列表中表示为: [foo,[,bar,[] 也许在DCG中会写这样一个词: 问题是方括号是一个保留字符,那么我如何在prolog中表示它呢?是不是“[”(在引号中)起作用了?你不能把方括号和其他东西一起当作原子(即,'['和'])吗 举个例子,怎么样 label1(T) --> id(X), label2(Y), {T =.. [X, Y]}. label2(Y) --> ['['], i

这听起来可能很奇怪,但它是在解析器中使用的,我希望能够解析这种形式的东西

富[巴]

因此,这将在列表中表示为:

[foo,[,bar,[] 也许在DCG中会写这样一个词:


问题是方括号是一个保留字符,那么我如何在prolog中表示它呢?

是不是“[”(在引号中)起作用了?

你不能把方括号和其他东西一起当作原子(即,
'['
']
)吗

举个例子,怎么样

label1(T) --> id(X), label2(Y), {T =.. [X, Y]}.
label2(Y) --> ['['], innerexp(Y), [']'].
id(X) --> [X].
innerexp(Y) --> [Y].
执行:

?- phrase(label1(T), [foo, '[', bar, ']'], Rem).
T = foo(bar),
Rem = [].

啊,好吧。对不起,我想不出其他的东西了。我如何从文件中读取方括号中的内容并将它们放在一个逗号中?
?- phrase(label1(T), [foo, '[', bar, ']'], Rem).
T = foo(bar),
Rem = [].