簡體   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