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