खोज…


कुछ भी: `... // 0`

सबसे प्राथमिक डीसीजी नॉनटर्मिनल में से एक है ... //0 , जिसे "कुछ भी" के रूप में पढ़ा जा सकता है:

... --> [] | [_], ... .

इसका उपयोग एक सूची Ls का वर्णन करने के लिए किया जा सकता है जिसमें तत्व E होता है:

phrase(( ..., [E], ... ), Ls)

DCGs के साथ पार्सिंग

डीसीजी का उपयोग पार्सिंग के लिए किया जा सकता है। सभी के सर्वश्रेष्ठ, एक ही डीसीजी का उपयोग अक्सर उन दोनों पार्स और उत्पन्न सूचियों के लिए किया जा सकता है जिनका वर्णन किया जा रहा है। उदाहरण के लिए:

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.

अतिरिक्त तर्क

अतिरिक्त तर्क एक डीसीजी क्लॉज की भविष्यवाणी को परिणाम जोड़ते हैं, जो व्युत्पन्न पेड़ को सजाते हैं। उदाहरण के लिए, एक बीजीय व्याकरण बनाना संभव है जो अंत में मूल्य की गणना करता है।

एक व्याकरण दिया गया जो ऑपरेशन के अतिरिक्त का समर्थन करता है:

% 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