繁体   English   中英

Prolog - 使用DCG解析函数

[英]Prolog - parsing functions with DCG

我需要解析一个代表函数的字符串,如下所示:

<fsignature>"(" <term1>, <term2> ... <termn>")"

还必须进一步控制功能'签名和术语,以便接受功能。 我在Prolog中写过这个DCG:

fsign --> {is_leg(A)}, [A].
terms --> (funct, funct; terms).
terms --> (terms, terms; term).
term --> {is_term(T)}, [T].

但是当我尝试使用短语(funct,[foo,“(”,a,a,“)”])时,它似乎不起作用。 它会溢出。 is_leg只检查字符串是否合法(以字符开头的字符串),而is_term应检查该字词是否为文字(常量,变量或函数)。

什么是不起作用? 我想,可能是变量 - 我应该把它们作为非终结者的参数吗?

谢谢你的帮助。

如果你的表达式都是这样的:

<fsignature> "(" <term1> <term2> ... <termn> ")"

然后根据DCG写出来,它应该看起来像这样(减去你建议的任何字符串验证谓词):

expression --> fsignature, ['('], terms, [')'].
fsignature --> ...      % whatever fsignature looks like
terms --> term.         % "terms" is a single term, or...
terms --> terms, term.  %   ... more terms followed by a single term.
term --> ...            % whatever a term looks like

您还可以将terms的定义写为:

terms --> term | terms, term.

请注意, terms的非递归定义发生在递归定义之前。 此外,上述terms的定义假定您必须至少有一个术语(此问题未在您的问题中说明)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM