Prolog Language
確定句文法(DCG)
サーチ…
何でも: `... // 0`
最も基本的なDCG非終端記号の1つは... //0
。これは「何でもありません」と読むことができます:
... --> [] | [_], ... .
これは、要素E
を含むリストLs
を記述するのに使用できます。
phrase(( ..., [E], ... ), Ls)
DCGによる解析
DCGを解析に使用することができます。 同じ DCGを使用して、記述されているリストを解析して生成することができます。例えば:
sentence --> article, subject, verb, object.
article --> [the].
subject --> [woman] | [man].
verb --> [likes] | [enjoys].
object --> [apples] | [oranges].
クエリ例:
?- phrase(sentence, Ls).
Ls = [the, woman, likes, apples] ;
Ls = [the, woman, likes, oranges] ;
Ls = [the, woman, enjoys, apples] .
?- phrase(sentence, [the,man,likes,apples]).
true .
余分なゴール
余分な目標は、リストの要素が満たさなければならない条件など、DCG句に処理を追加することを可能にする。
余分な目標は、DCG節の終わりに中括弧の間に観察されます。
% DCG clause requiring an integer
int --> [X], {integer(X)}.
使用法:
?- phrase(int, [3]).
true.
?- phrase(int, [a]).
false.
余分な議論
追加の引数は、導出ツリーを装飾することによって、結果をDCG節の述語に追加する。たとえば、最後に値を計算する代数的文法を作成することができます。
演算の追加をサポートする文法が与えられた場合:
% Extra arguments are passed between parenthesis after the name of the DCG clauses.
exp(C) --> int(A), [+], exp(B), {plus(A, B, C)}.
exp(X) --> int(X).
int(X) --> [X], {integer(X)}.
この文法の結果は検証され、照会できます:
?- phrase(exp(X), [1,+,2,+,3]).
X = 6 ;
Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow