[英]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.