Parsing 如何在Prolog中创建高阶DCG解析器?

Parsing 如何在Prolog中创建高阶DCG解析器?,parsing,prolog,dcg,Parsing,Prolog,Dcg,我希望有一些更通用的解析器,例如paren,它将接受一个解析器并用括号括起来: paren(Parser, Result) --> "(", some_magic_dcg_call(Parser, Result), ")". :- phrase(paren(number, N), "(123)"). 123 :- phrase(paren(someatom, A), "(a)"). a 我尝试了call和dcg\u call,但它们似乎没有解决问题。如何在另一个解析器中运行任意解

我希望有一些更通用的解析器,例如
paren
,它将接受一个解析器并用括号括起来:

paren(Parser, Result) -->
  "(", some_magic_dcg_call(Parser, Result), ")".


:- phrase(paren(number, N), "(123)").
123
:- phrase(paren(someatom, A), "(a)").
a

我尝试了
call
dcg\u call
,但它们似乎没有解决问题。如何在另一个解析器中运行任意解析器?

此使用
调用的解决方案在SWI Prolog中工作:

:- set_prolog_flag(double_quotes, chars).

paren(Parser, Result) -->
    "(",
    call(Parser, Result),
    ")".

number(123) -->
    "123".

someatom(a) -->
    "a".
测试:

?- phrase(paren(number, N), "(123)").
N = 123.

?- phrase(paren(someatom, A), "(a)").
A = a.

打电话给顶级生产部我想你误解我了。我想创建一个通用的解析器组合器,它适用于任何给定的产品,因为我肯定犯了一些其他错误。这确实起到了作用