एस-एक्सप्रेशन: Difference between revisions
No edit summary |
No edit summary |
||
| Line 1: | Line 1: | ||
{{Short description|Data serialization format}} | {{Short description|Data serialization format}} | ||
[[File:Corrected_S-expression_tree_2.svg|thumb|ट्री ([[डेटा संरचना]]) एस-अभिव्यक्ति का प्रतिनिधित्व करने वाली डेटा संरचना <code>(* 2 (+ 3 4))</code> ]][[कंप्यूटर प्रोग्रामिंग]] में, '''एस-अभिव्यक्ति''' (या '''प्रतीकात्मक अभिव्यक्ति''', जिसे '''सेक्सपीआर''' या '''सेक्सपी''' के रूप में संक्षिप्त किया गया है) नीडित [[ सूची (कंप्यूटिंग) |सूची (कंप्यूटिंग)]] (ट्री डेटा संरचना) डेटा के लिए समान नाम वाले | [[File:Corrected_S-expression_tree_2.svg|thumb|ट्री ([[डेटा संरचना]]) एस-अभिव्यक्ति का प्रतिनिधित्व करने वाली डेटा संरचना <code>(* 2 (+ 3 4))</code> ]][[कंप्यूटर प्रोग्रामिंग]] में, '''एस-अभिव्यक्ति''' (या '''प्रतीकात्मक अभिव्यक्ति''', जिसे '''सेक्सपीआर''' या '''सेक्सपी''' के रूप में संक्षिप्त किया गया है) नीडित [[ सूची (कंप्यूटिंग) |सूची (कंप्यूटिंग)]] (ट्री डेटा संरचना) डेटा के लिए समान नाम वाले अंकन में अभिव्यक्ति है। प्रोग्रामिंग भाषा [[लिस्प (प्रोग्रामिंग भाषा)]] के लिए एस-अभिव्यक्ति का आविष्कार किया गया था और इसे लोकप्रिय बनाया गया था, जो उन्हें स्रोत कोड के साथ-साथ डेटा के लिए भी उपयोग करता है। | ||
लिस्प के सामान्य संश्लेषित [[ सिंटेक्स (प्रोग्रामिंग भाषाएं) |सिंटेक्स (प्रोग्रामिंग भाषाएं)]] में, एस-अभिव्यक्ति को शास्त्रीय रूप से परिभाषित किया गया है<ref name="McCarthy1960">John McCarthy (1960/2006). [http://www-formal.stanford.edu/jmc/recursive/recursive.html Recursive functions of symbolic expressions] {{webarchive|url=https://web.archive.org/web/20040202215021/http://www-formal.stanford.edu/jmc/recursive/recursive.html |date=2004-02-02 }}. Originally published in [[Communications of the ACM]].</ref> जैसा की दर्शया गया है | लिस्प के सामान्य संश्लेषित [[ सिंटेक्स (प्रोग्रामिंग भाषाएं) |सिंटेक्स (प्रोग्रामिंग भाषाएं)]] में, एस-अभिव्यक्ति को शास्त्रीय रूप से परिभाषित किया गया है<ref name="McCarthy1960">John McCarthy (1960/2006). [http://www-formal.stanford.edu/jmc/recursive/recursive.html Recursive functions of symbolic expressions] {{webarchive|url=https://web.archive.org/web/20040202215021/http://www-formal.stanford.edu/jmc/recursive/recursive.html |date=2004-02-02 }}. Originally published in [[Communications of the ACM]].</ref> जैसा की दर्शया गया है | ||
| Line 7: | Line 7: | ||
# <code>(''x'' . ''y'')</code> रूप की [[अभिव्यक्ति (कंप्यूटर विज्ञान)]] जहां x और y एस-अभिव्यक्ति हैं। | # <code>(''x'' . ''y'')</code> रूप की [[अभिव्यक्ति (कंप्यूटर विज्ञान)]] जहां x और y एस-अभिव्यक्ति हैं। | ||
यह परिभाषा कोशिकाओं की श्रृंखला के रूप में सूची के लिस्प के प्रतिनिधित्व को दर्शाती है, प्रत्येक क्रमित युग्म है। साधारण सूचियों में, y आगमी कोष्ठिका (यदि कोई हो) की ओर संकेत करता है, इस प्रकार [[लिंक्ड सूची|संलग्न सूची]] बनाता है। परिभाषा के [[ प्रत्यावर्तन |पुनरावर्ती]] अनुच्छेद का अर्थ है कि यह प्रतिनिधित्व और एस-अभिव्यक्ति | यह परिभाषा कोशिकाओं की श्रृंखला के रूप में सूची के लिस्प के प्रतिनिधित्व को दर्शाती है, प्रत्येक क्रमित युग्म है। साधारण सूचियों में, y आगमी कोष्ठिका (यदि कोई हो) की ओर संकेत करता है, इस प्रकार [[लिंक्ड सूची|संलग्न सूची]] बनाता है। परिभाषा के [[ प्रत्यावर्तन |पुनरावर्ती]] अनुच्छेद का अर्थ है कि यह प्रतिनिधित्व और एस-अभिव्यक्ति अंकन दोनों ही किसी भी [[बाइनरी ट्री]] का प्रतिनिधित्व कर सकते हैं। यद्यपि, प्रतिनिधित्व सैद्धांतिक रूप से परिपत्र संदर्भों की अनुमति दे सकता है, ऐसी स्थितियों में संरचना निश्चित ही ट्री नहीं है, परन्तु [[चक्रीय ग्राफ]] है, और शास्त्रीय एस-अभिव्यक्ति अंकन में इसका प्रतिनिधित्व नहीं किया जा सकता है जब तक कि प्रति संदर्भ के लिए अंकन प्रदान नहीं किया जाता है ([[एसक्यूएल]] [[विदेशी कुंजी]], [[एसजीएमएल]]/[[एक्सएमएल]] आईडीआरईएफ, आदि के अनुरूप)। [[ सामान्य लिस्प |सामान्य लिस्प]] <ref>{{cite web|title=Common Lisp HyperSpec: 22.4 - The Printer Dictionary: *PRINT-CIRCLE*|url=http://clhs.lisp.se/Body/v_pr_cir.htm|date=2018-12-28}}</ref> और [[योजना (प्रोग्रामिंग भाषा)]]<ref>{{cite web|title=Revised<sup>7</sup> Report on the Algorithmic Language Scheme: Section 2.4: Datum Labels|url=https://small.r7rs.org/attachment/r7rs.pdf#section.2.4|date=2013-07-06}}</ref> जैसी आधुनिक लिस्प उपभाषा डेटाम लेबल के माध्यम से ऐसा सिंटैक्स प्रदान करती हैं, जिसके साथ ऑब्जेक्टओं को चिह्नित किया जा सकता है, जिसे बाद में कहीं और दोहराया जा सकता है, जो फिर द्विगुणित संरचना के अतिरिक्त साझा को इंगित करना, जिससे [[ लिस्प पाठक |लिस्प पाठक]] या प्रारूप (सामान्य लिस्प) को पता लगाने में सक्षम बनाना और इस प्रकार असीमित पुनरावृत्ति के बिना चक्रों के मूल्यांकन या निष्पादन को ट्रिगर करना | ||
: <code>#n=(''x'' ''y'' . #n#)</code> | : <code>#n=(''x'' ''y'' . #n#)</code> | ||
एक परमाणु की परिभाषा संदर्भ के अनुसार परिवर्तित होती रहती है; जॉन मैक्कार्थी (कंप्यूटर वैज्ञानिक) द्वारा मूल परिभाषा में,<ref name="McCarthy1960"/> यह माना गया था कि अलग-अलग [[प्रतीक (प्रोग्रामिंग)|प्रतीकों (प्रोग्रामिंग)]] का अनंत समुच्चय स्थित था, जिसे [[लैटिन लिपि|लैटिन लिपियों]] और एकल एम्बेडेड रिक्त स्थान ( | एक परमाणु की परिभाषा संदर्भ के अनुसार परिवर्तित होती रहती है; जॉन मैक्कार्थी (कंप्यूटर वैज्ञानिक) द्वारा मूल परिभाषा में,<ref name="McCarthy1960"/> यह माना गया था कि अलग-अलग [[प्रतीक (प्रोग्रामिंग)|प्रतीकों (प्रोग्रामिंग)]] का अनंत समुच्चय स्थित था, जिसे [[लैटिन लिपि|लैटिन लिपियों]] और एकल एम्बेडेड रिक्त स्थान ( कैरैक्टर [[स्ट्रिंग (कंप्यूटिंग)]] और संख्यात्मक [[ शाब्दिक (कंप्यूटर प्रोग्रामिंग) |शाब्दिक (कंप्यूटर प्रोग्रामिंग)]] का एक उपसमुच्चय ) वाले अंकों की श्रृंखला के रूप में दर्शाया गया था। | ||
अधिकांश आधुनिक | अधिकांश आधुनिक सेक्सपीआर अंकन अधिक सामान्य उद्धृत स्ट्रिंग्स (उदाहरण के लिए विराम चिह्न या पूर्ण [[यूनिकोड]] सहित) की अनुमति देते हैं, और 2 से अधिक सदस्यों के साथ सूचियों का प्रतिनिधित्व करने के लिए संक्षिप्त अंकन का उपयोग करते हैं, ताकि | ||
: <code>(''x'' ''y'' ''z'')</code> | : <code>(''x'' ''y'' ''z'')</code> | ||
इसका अर्थ है कि | |||
: <code>(''x'' . (''y'' . (''z'' . NIL)))</code> | : <code>(''x'' . (''y'' . (''z'' . NIL)))</code> | ||
<code>NIL</code> विशेष | <code>NIL</code> विशेष अंत-सूची [[ वस्तु (कंप्यूटर विज्ञान) |ऑब्जेक्ट (कंप्यूटर विज्ञान)]] है (वैकल्पिक रूप लिखित <code>()</code>, जो योजना (प्रोग्रामिंग भाषा) में एकमात्र प्रतिनिधित्व है<ref>{{Cite web|url=https://schemers.org/Documents/Standards/R5RS/HTML/r5rs-Z-H-9.html|title=Revised^5 Report on the Algorithmic Language Scheme|website=schemers.org}}</ref>)। | ||
प्रोग्रामिंग भाषाओं के लिस्प | प्रोग्रामिंग भाषाओं के लिस्प वर्ग में, स्रोत कोड और डेटा दोनों का प्रतिनिधित्व करने के लिए एस-अभिव्यक्ति का उपयोग किया जाता है। एस-अभिव्यक्ति के अन्य उपयोग [[दस्तावेज़ शैली शब्दार्थ और विशिष्टता भाषा|डॉक्यूमेंट शैली शब्दार्थ और विशिष्टता भाषा]] जैसी लिस्प-व्युत्पन्न भाषाओं में हैं, और [[इंटरनेट संदेश एक्सेस प्रोटोकॉल]] और जॉन मैककार्थी (कंप्यूटर वैज्ञानिक) के [[ सामान्य व्यापार संचार भाषा |सामान्य व्यापार संचार भाषा]] जैसे [[संचार प्रोटोकॉल]] में मार्क-अप के रूप में हैं। इसका उपयोग [[WebAssembly|वेब असेंबली]] के पाठ प्रतिनिधित्व के रूप में भी किया जाता है। सिंटैक्स और समर्थित [[डेटा प्रकार|डेटा प्रकारों]] का विवरण अलग-अलग भाषाओं में भिन्न होता है, परन्तु इन भाषाओं में सबसे सामान्य विशेषता एस-अभिव्यक्ति और प्रीफ़िक्स अंकन का उपयोग है। | ||
== | == डेटाटाइप और सिंटैक्स == | ||
एस-अभिव्यक्ति प्रारूप के कई प्रकार हैं, जो विभिन्न | एस-अभिव्यक्ति प्रारूप के कई प्रकार हैं, जो विभिन्न डेटाटाइप के लिए विभिन्न सिंटैक्स का समर्थन करते हैं। इस प्रकार से सबसे व्यापक रूप से समर्थित हैं: | ||
* सूचियाँ और जोड़े: <code>(1 () (2 . 3) (4))</code> | * सूचियाँ और जोड़े: <code>(1 () (2 . 3) (4))</code> | ||
* प्रतीक: <code>with-hyphen</code> <code>?@!$</code> <code>|a symbol with spaces|</code> | * प्रतीक: <code>with-hyphen</code> <code>?@!$</code> <code>|a symbol with spaces|</code> | ||
| Line 30: | Line 30: | ||
* पूर्णांक: <code>-9876543210</code> | * पूर्णांक: <code>-9876543210</code> | ||
* दशमलव संख्याएं: <code>-0.0</code> <code>6.28318</code> <code>6.022e23</code> | * दशमलव संख्याएं: <code>-0.0</code> <code>6.28318</code> <code>6.022e23</code> | ||
कैरैक्टर <code>#</code> का उपयोग अक्सर सिंटैक्स में एक्सटेंशन उपसर्ग करने के लिए किया जाता है, उदाहरण के लिए हेक्साडेसिमल पूर्णांकों के लिए <code>#x10</code> हेक्साडेसिमल या कैरैक्टरों के लिए <code>#\C</code> है। | |||
== लिस्प == | == लिस्प में प्रयोग == | ||
लिस्प में स्रोत कोड का प्रतिनिधित्व करते समय, एस-अभिव्यक्ति का | लिस्प में स्रोत कोड का प्रतिनिधित्व करते समय, एस-अभिव्यक्ति का प्रथम अवयव सामान्यतः ऑपरेटर या फ़ंक्शन का नाम होता है और किसी भी शेष अवयवों को तर्कों के रूप में माना जाता है। इसे उपसर्ग अंकन या [[पोलिश संकेतन|पोलिश अंकन]] कहा जाता है। उदाहरण के रूप में, C (प्रोग्रामिंग लैंग्वेज) में {{nowrap begin}}<code>4 == (2 + 2)</code>{{nowrap end}} लिखी गई [[बूलियन तर्क]] अभिव्यक्ति लिखा गया को लिस्प के एस-एक्सपीआर-आधारित उपसर्ग अंकन में {{nowrap begin}}<code>(= 4 (+ 2 2))</code>{{nowrap end}} के रूप में दर्शाया गया है। | ||
जैसा ऊपर बताया गया है, परमाणु की | जैसा ऊपर बताया गया है, परमाणु की यथार्थ परिभाषा एलआईएसपी जैसी भाषाओं में भिन्न होती है। उद्धृत स्ट्रिंग में सामान्यतः उद्धरण के अतिरिक्त कुछ भी हो सकता है, जबकि एक गैर-उद्धृत पहचानकर्ता परमाणु में सामान्यतः उद्धरण, रिक्त स्थान के कैरैक्टर, लघु कोष्ठक, कोष्ठक, धनुर्कोष्ठक, बैकस्लैश और अर्धविराम के अतिरिक्त कुछ भी हो सकता है। किसी भी स्थिति में, निषिद्ध कैरैक्टर को सामान्यतः पूर्ववर्ती बैकस्लैश से बचकर सम्मिलित किया जा सकता है। यूनिकोड समर्थन भिन्न होता है। | ||
एक गैर-उद्धृत पहचानकर्ता परमाणु में | |||
एस- | एस-एक्सपीआर परिभाषा की पुनरावर्ती स्थिति परंपरागत रूप से कॉन कोष्ठकों का उपयोग करके कार्यान्वित किया जाता है। | ||
एस-अभिव्यक्ति मूल रूप से | एस-अभिव्यक्ति मूल रूप से मात्र [[ एम-अभिव्यक्ति |एम-अभिव्यक्ति]] द्वारा अन्तःक्षेप किए जाने वाले डेटा के लिए अभिप्रेत थे, परन्तु लिस्प का प्रथम कार्यान्वयन एम-अभिव्यक्ति के एस-अभिव्यक्ति एन्कोडिंग का इंटरप्रेटर था, और लिस्प प्रोग्रामर शीघ्र ही दोनों कोड और डेटा के लिए एस-अभिव्यक्ति का उपयोग करने के प्रवृत्त हो गए। इसका अर्थ है कि लिस्प समजातीय है; अर्थात्, प्रोग्रामों का प्राथमिक प्रतिनिधित्व भी आदिम प्रकार की भाषा में डेटा संरचना है। | ||
इसका | |||
=== डेटा एस-अभिव्यक्ति के उदाहरण === | === डेटा एस-अभिव्यक्ति के उदाहरण === | ||
नीडित सूचियों को एस-अभिव्यक्ति के रूप में लिखा जा सकता है: <code>((milk juice) (honey marmalade))</code> दो- | नीडित सूचियों को एस-अभिव्यक्ति के रूप में लिखा जा सकता है: <code>((milk juice) (honey marmalade))</code> दो-अवयव एस-अभिव्यक्ति है जिसके अवयव भी दो-अवयव एस-अभिव्यक्ति हैं। लिस्प (और यह आलेख) में प्रयुक्त व्हाइटस्पेस-पृथक अंकन सामान्य है। पंक्ति विराम (न्यूलाइन कैरैक्टर) सामान्यतः विभाजक के रूप में योग्य होते हैं। | ||
यह एस-अभिव्यक्ति (गज़दार/मेलिश, लिस्प में प्राकृतिक भाषा प्रसंस्करण) के रूप में लिखे गए अंग्रेजी के छोटे से उपसमुच्चय के लिए सरल संदर्भ-मुक्त व्याकरण है, जहां | यह एस-अभिव्यक्ति (गज़दार/मेलिश, लिस्प में प्राकृतिक भाषा प्रसंस्करण) के रूप में लिखे गए अंग्रेजी के छोटे से उपसमुच्चय के लिए सरल संदर्भ-मुक्त व्याकरण है, जहां S = वाक्य, NP = संज्ञा वाक्यांश, VP = क्रिया वाक्यांश, V = क्रिया : | ||
<syntaxhighlight lang="lisp"> | <syntaxhighlight lang="lisp"> | ||
(((S) (NP VP)) | (((S) (NP VP)) | ||
| Line 60: | Line 58: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
=== सोर्स कोड एस-अभिव्यक्ति का उदाहरण === | |||
प्रोग्राम कोड एस-अभिव्यक्ति में लिखा जा सकता है, सामान्यतः प्रीफिक्स अंकन का उपयोग करते हुए। | |||
इस प्रकार से सामान्य लिस्प में उदाहरण: | |||
सामान्य लिस्प में उदाहरण: | |||
<syntaxhighlight lang="lisp"> | <syntaxhighlight lang="lisp"> | ||
(defun factorial (x) | (defun factorial (x) | ||
| Line 72: | Line 68: | ||
(* x (factorial (- x 1))))) | (* x (factorial (- x 1))))) | ||
</syntaxhighlight> | </syntaxhighlight> | ||
फ़ंक्शन | फ़ंक्शन READ का उपयोग करके एस-अभिव्यक्ति को लिस्प में पढ़ा जा सकता है। READ एस-अभिव्यक्ति के टेक्स्टुअल प्रतिनिधित्व को पढ़ता है और लिस्प डेटा लौटाता है। फ़ंक्शन PRINT का उपयोग एस-अभिव्यक्ति को आउटपुट करने के लिए किया जा सकता है। आउटपुट तब फ़ंक्शन READ के साथ पढ़ा जा सकता है, जब सभी मुद्रित डेटा ऑब्जेक्ट में पठनीय प्रतिनिधित्व होता है। लिस्प में संख्याओं, स्ट्रिंग्स, प्रतीकों, सूचियों और कई अन्य डेटा प्रकारों के लिए पठनीय निरूपण हैं। PPRINT फ़ंक्शन का उपयोग करके प्रोग्राम कोड को सुंदर मुद्रित एस-अभिव्यक्ति के रूप में स्वरूपित किया जा सकता है (नोट: दो Ps के साथ, ''सुंदर''-प्रिंट के लिए छोटा)। | ||
लिस्प प्रोग्राम वैध एस-अभिव्यक्ति हैं, परन्तु सभी एस-अभिव्यक्ति मान्य लिस्प प्रोग्राम नहीं हैं। <code>(1.0 + 3.1)</code> वैध एस-अभिव्यक्ति है, परन्तु वैध लिस्प प्रोग्राम नहीं है, क्योंकि लिस्प उपसर्ग | लिस्प प्रोग्राम वैध एस-अभिव्यक्ति हैं, परन्तु सभी एस-अभिव्यक्ति मान्य लिस्प प्रोग्राम नहीं हैं। <code>(1.0 + 3.1)</code> वैध एस-अभिव्यक्ति है, परन्तु वैध लिस्प प्रोग्राम नहीं है, क्योंकि लिस्प उपसर्ग अंकन का उपयोग करता है और फ्लोटिंग पॉइंट नंबर (यहां 1.0) ऑपरेशन (अभिव्यक्ति का प्रथम अवयव) के रूप में मान्य नहीं है। | ||
एक एकल उद्धरण चिह्न से पहले एस-अभिव्यक्ति, जैसा कि <code>'x</code>, लिस्प (प्रोग्रामिंग भाषा) के लिए वाक्यात्मक चीनी है # स्व-मूल्यांकन रूपों और उद्धरण | उद्धृत एस-अभिव्यक्ति, इस | एक एकल उद्धरण चिह्न से पहले एस-अभिव्यक्ति, जैसा कि <code>'x</code>, लिस्प (प्रोग्रामिंग भाषा) के लिए वाक्यात्मक चीनी है # स्व-मूल्यांकन रूपों और उद्धरण | उद्धृत एस-अभिव्यक्ति, इस स्थिति में <code>(quote x)</code>. | ||
== पार्सिंग == | == पार्सिंग == | ||
एस-अभिव्यक्ति की तुलना अक्सर एक्सएमएल से की जाती है: मुख्य अंतर यह है कि एस-अभिव्यक्ति में | एस-अभिव्यक्ति की तुलना अक्सर एक्सएमएल से की जाती है: मुख्य अंतर यह है कि एस-अभिव्यक्ति में मात्र प्रकार का कंटेनमेंट होता है, बिंदीदार युग्म, जबकि एक्सएमएल टैग में सरल गुण, अन्य टैग या [[सीडीएटीए]] हो सकते हैं, प्रत्येक अलग-अलग सिंटैक्स का उपयोग करता है। सरल उपयोग के मामलों के लिए, एस-अभिव्यक्ति एक्सएमएल की तुलना में सरल हैं, परन्तु अधिक उन्नत उपयोग के मामलों के लिए, एक्सएमएल में क्वेरी भाषा है जिसे [[XPath]] कहा जाता है, एक्सएमएल डेटा के प्रबंधन को आसान बनाने के लिए कई टूल और थर्ड पार्टी लाइब्रेरी। | ||
== मानकीकरण == | == मानकीकरण == | ||
कुछ लिस्प-व्युत्पन्न प्रोग्रामिंग भाषाओं के मानकों में उनके एस-अभिव्यक्ति सिंटैक्स के लिए विनिर्देश | कुछ लिस्प-व्युत्पन्न प्रोग्रामिंग भाषाओं के मानकों में उनके एस-अभिव्यक्ति सिंटैक्स के लिए विनिर्देश सम्मिलित है। इनमें सामान्य लिस्प (ANSI मानक डॉक्यूमेंट ANSI INCITS 226-1994 (R2004)), स्कीम (प्रोग्रामिंग भाषा) (R5RS और [[R6RS]]) सम्मिलित हैं।<ref>{{Cite journal|title=Revised6 Report on the Algorithmic Language Scheme|date=Aug 12, 2009|journal=Journal of Functional Programming|volume=19|issue=S1|pages=1–301|doi=10.1017/S0956796809990074|last1=Sperber|first1=Michael|last2=Dybvig|first2=R. Kent|last3=Flatt|first3=Matthew|last4=Van Straaten|first4=Anton|last5=Findler|first5=Robby|last6=Matthews|first6=Jacob|citeseerx=10.1.1.372.373}}</ref>), और आईएसएलआईएसपी। | ||
=== रिवेस्ट का संस्करण === | === रिवेस्ट का संस्करण === | ||
| Line 89: | Line 85: | ||
मई 1997 में, [[रॉन रिवेस्ट]] ने [[इंटरनेट ड्राफ्ट]] प्रस्तुत किया<ref>[https://web.archive.org/web/20230223024606/http://people.csail.mit.edu/rivest/Sexp.txt S-expressions], Network Working Group, Internet Draft, Expires November 4, 1997 - R. Rivest, May 4, 1997 draft-rivest-sexp-00.txt, Ronald L. Rivest, CSAIL MIT website</ref> टिप्पणियों के अनुरोध के रूप में प्रकाशन के लिए विचार किया जाएगा। मसौदे ने लिस्प एस-अभिव्यक्ति पर आधारित सिंटैक्स को परिभाषित किया परन्तु विशेष रूप से प्रोग्रामिंग के अतिरिक्त सामान्य-उद्देश्य डेटा भंडारण और विनिमय (एक्सएमएल के समान) के लिए अभिप्रेत है। इसे कभी भी RFC के रूप में स्वीकृत नहीं किया गया था, परन्तु तब से इसे अन्य RFC (जैसे RFC 2693) और कई अन्य प्रकाशनों द्वारा उद्धृत और उपयोग किया जाता है।<ref>[https://scholar.google.com/scholar?hl=en&lr=&safe=off&q=rivest+sexp&btnG=Search rivest sexp], Google Scholar (search)</ref> यह मूल रूप से [[सरल सार्वजनिक कुंजी अवसंरचना]] में उपयोग के लिए अभिप्रेत था। | मई 1997 में, [[रॉन रिवेस्ट]] ने [[इंटरनेट ड्राफ्ट]] प्रस्तुत किया<ref>[https://web.archive.org/web/20230223024606/http://people.csail.mit.edu/rivest/Sexp.txt S-expressions], Network Working Group, Internet Draft, Expires November 4, 1997 - R. Rivest, May 4, 1997 draft-rivest-sexp-00.txt, Ronald L. Rivest, CSAIL MIT website</ref> टिप्पणियों के अनुरोध के रूप में प्रकाशन के लिए विचार किया जाएगा। मसौदे ने लिस्प एस-अभिव्यक्ति पर आधारित सिंटैक्स को परिभाषित किया परन्तु विशेष रूप से प्रोग्रामिंग के अतिरिक्त सामान्य-उद्देश्य डेटा भंडारण और विनिमय (एक्सएमएल के समान) के लिए अभिप्रेत है। इसे कभी भी RFC के रूप में स्वीकृत नहीं किया गया था, परन्तु तब से इसे अन्य RFC (जैसे RFC 2693) और कई अन्य प्रकाशनों द्वारा उद्धृत और उपयोग किया जाता है।<ref>[https://scholar.google.com/scholar?hl=en&lr=&safe=off&q=rivest+sexp&btnG=Search rivest sexp], Google Scholar (search)</ref> यह मूल रूप से [[सरल सार्वजनिक कुंजी अवसंरचना]] में उपयोग के लिए अभिप्रेत था। | ||
रिवेस्ट का प्रारूप एस-अभिव्यक्ति को ऑक्टेट-स्ट्रिंग ([[बाइट]]्स की श्रृंखला) या अन्य एस-अभिव्यक्ति की सीमित सूची के रूप में परिभाषित करता है। यह इस संरचना को व्यक्त करने के लिए तीन इंटरचेंज स्वरूपों का | रिवेस्ट का प्रारूप एस-अभिव्यक्ति को ऑक्टेट-स्ट्रिंग ([[बाइट]]्स की श्रृंखला) या अन्य एस-अभिव्यक्ति की सीमित सूची के रूप में परिभाषित करता है। यह इस संरचना को व्यक्त करने के लिए तीन इंटरचेंज स्वरूपों का कैरैक्टरन करता है। उन्नत परिवहन है, जो स्वरूपण के स्थिति में बहुत लचीला है, और वाक्यात्मक रूप से लिस्प-शैली के अभिव्यक्तियों के समान है, परन्तु वे समान नहीं हैं। उन्नत परिवहन, उदाहरण के लिए, ऑक्टेट-स्ट्रिंग्स को शब्दशः प्रदर्शित करने की अनुमति देता है (स्ट्रिंग की लंबाई कोलन और पूरे कच्चे स्ट्रिंग के बाद), उद्धृत फॉर्म जो एस्केप कैरेक्टर, [[हेक्साडेसिमल]], [[बेस 64]] की अनुमति देता है, या सीधे टोकन के रूप में रखा जाता है यदि यह मिलता है कुछ शर्तें। (रिवेस्ट के टोकन लिस्प टोकन से भिन्न होते हैं जिसमें पूर्व सिर्फ सुविधा और सौंदर्यशास्त्र के लिए होते हैं, और अन्य स्ट्रिंग्स की तरह ही व्यवहार किए जाते हैं, जबकि बाद वाले का विशिष्ट वाक्यात्मक अर्थ होता है।) | ||
रिवेस्ट का मसौदा डिजिटल हस्ताक्षर उद्देश्यों के लिए [[कैनोनिकल एस-एक्सप्रेशन|कैनोनिकल एस-अभिव्यक्ति]] को परिभाषित करता है। इसका उद्देश्य कॉम्पैक्ट होना है, पार्स करना आसान है, और किसी सार एस-अभिव्यक्ति के लिए अद्वितीय है। यह | रिवेस्ट का मसौदा डिजिटल हस्ताक्षर उद्देश्यों के लिए [[कैनोनिकल एस-एक्सप्रेशन|कैनोनिकल एस-अभिव्यक्ति]] को परिभाषित करता है। इसका उद्देश्य कॉम्पैक्ट होना है, पार्स करना आसान है, और किसी सार एस-अभिव्यक्ति के लिए अद्वितीय है। यह मात्र वर्बैटिम स्ट्रिंग्स की अनुमति देता है, और बाहरी स्ट्रिंग्स को स्वरूपित करने के रूप में व्हाइटस्पेस को प्रतिबंधित करता है। अंत में मूल परिवहन प्रतिनिधित्व है, जो या तो विहित रूप है या बेस64 के समान एन्कोडेड है और [[ब्रैकेट]] से घिरा हुआ है, बाद वाला सिस्टम में कैनोनिक रूप से एन्कोडेड एस-अभिव्यक्ति को सुरक्षित रूप से परिवहन करने का इरादा रखता है जो रिक्ति को परिवर्तित कर सकता है (उदाहरण के लिए ईमेल सिस्टम जो 80-कैरैक्टर-चौड़ी रेखाएँ हैं और इससे अधिक कुछ भी लपेटता है)। | ||
यह प्रारूप SPKI के बाहर उपयोग के लिए व्यापक रूप से अनुकूलित नहीं किया गया है (कुछ उपयोगकर्ता [[GnuPG]], libgcrypt, Nettle (क्रिप्टोग्राफ़िक लाइब्रेरी) और [[GNU]] lsh हैं)। रिवेस्ट का एस-अभिव्यक्ति वेब पेज पार्सर और जनरेटर ([[मेरा लाइसेंस]] के तहत उपलब्ध) के लिए सी (प्रोग्रामिंग भाषा) स्रोत कोड प्रदान करता है, जिसे अन्य | यह प्रारूप SPKI के बाहर उपयोग के लिए व्यापक रूप से अनुकूलित नहीं किया गया है (कुछ उपयोगकर्ता [[GnuPG]], libgcrypt, Nettle (क्रिप्टोग्राफ़िक लाइब्रेरी) और [[GNU]] lsh हैं)। रिवेस्ट का एस-अभिव्यक्ति वेब पेज पार्सर और जनरेटर ([[मेरा लाइसेंस]] के तहत उपलब्ध) के लिए सी (प्रोग्रामिंग भाषा) स्रोत कोड प्रदान करता है, जिसे अन्य प्रोग्रामों में अनुकूलित और एम्बेड किया जा सकता है।<ref>{{Cite web|url=https://web.archive.org/web/20230223024606/http://people.csail.mit.edu/rivest/Sexp.txt|title=SEXP (एस-एक्सप्रेशन)|website=people.csail.mit.edu}}</ref> इसके अतिरिक्त, प्रारूप को स्वतंत्र रूप से लागू करने पर कोई प्रतिबंध नहीं है। | ||
== यह भी देखें == | == यह भी देखें == | ||
| Line 109: | Line 105: | ||
==बाहरी संबंध== | ==बाहरी संबंध== | ||
* [https://github.com/mjsottile/sfsexp sfsexp] the small, fast | * [https://github.com/mjsottile/sfsexp sfsexp] the small, fast एस-expression library for C/C++ on GitHub | ||
* [http://leon.bottou.org/projects/minilisp miniलिस्प], by Léon Bottou. | * [http://leon.bottou.org/projects/minilisp miniलिस्प], by Léon Bottou. | ||
* [http://rosettacode.org/wiki/S-expressions | * [http://rosettacode.org/wiki/S-expressions एस-expressions on Rosettacode] has implementations of readers and writers in many languages. | ||
{{Lisp programming language}} | {{Lisp programming language}} | ||
Revision as of 19:35, 27 June 2023
कंप्यूटर प्रोग्रामिंग में, एस-अभिव्यक्ति (या प्रतीकात्मक अभिव्यक्ति, जिसे सेक्सपीआर या सेक्सपी के रूप में संक्षिप्त किया गया है) नीडित सूची (कंप्यूटिंग) (ट्री डेटा संरचना) डेटा के लिए समान नाम वाले अंकन में अभिव्यक्ति है। प्रोग्रामिंग भाषा लिस्प (प्रोग्रामिंग भाषा) के लिए एस-अभिव्यक्ति का आविष्कार किया गया था और इसे लोकप्रिय बनाया गया था, जो उन्हें स्रोत कोड के साथ-साथ डेटा के लिए भी उपयोग करता है।
लिस्प के सामान्य संश्लेषित सिंटेक्स (प्रोग्रामिंग भाषाएं) में, एस-अभिव्यक्ति को शास्त्रीय रूप से परिभाषित किया गया है[1] जैसा की दर्शया गया है
xरूप का परमाणु, या(x . y)रूप की अभिव्यक्ति (कंप्यूटर विज्ञान) जहां x और y एस-अभिव्यक्ति हैं।
यह परिभाषा कोशिकाओं की श्रृंखला के रूप में सूची के लिस्प के प्रतिनिधित्व को दर्शाती है, प्रत्येक क्रमित युग्म है। साधारण सूचियों में, y आगमी कोष्ठिका (यदि कोई हो) की ओर संकेत करता है, इस प्रकार संलग्न सूची बनाता है। परिभाषा के पुनरावर्ती अनुच्छेद का अर्थ है कि यह प्रतिनिधित्व और एस-अभिव्यक्ति अंकन दोनों ही किसी भी बाइनरी ट्री का प्रतिनिधित्व कर सकते हैं। यद्यपि, प्रतिनिधित्व सैद्धांतिक रूप से परिपत्र संदर्भों की अनुमति दे सकता है, ऐसी स्थितियों में संरचना निश्चित ही ट्री नहीं है, परन्तु चक्रीय ग्राफ है, और शास्त्रीय एस-अभिव्यक्ति अंकन में इसका प्रतिनिधित्व नहीं किया जा सकता है जब तक कि प्रति संदर्भ के लिए अंकन प्रदान नहीं किया जाता है (एसक्यूएल विदेशी कुंजी, एसजीएमएल/एक्सएमएल आईडीआरईएफ, आदि के अनुरूप)। सामान्य लिस्प [2] और योजना (प्रोग्रामिंग भाषा)[3] जैसी आधुनिक लिस्प उपभाषा डेटाम लेबल के माध्यम से ऐसा सिंटैक्स प्रदान करती हैं, जिसके साथ ऑब्जेक्टओं को चिह्नित किया जा सकता है, जिसे बाद में कहीं और दोहराया जा सकता है, जो फिर द्विगुणित संरचना के अतिरिक्त साझा को इंगित करना, जिससे लिस्प पाठक या प्रारूप (सामान्य लिस्प) को पता लगाने में सक्षम बनाना और इस प्रकार असीमित पुनरावृत्ति के बिना चक्रों के मूल्यांकन या निष्पादन को ट्रिगर करना
#n=(x y . #n#)
एक परमाणु की परिभाषा संदर्भ के अनुसार परिवर्तित होती रहती है; जॉन मैक्कार्थी (कंप्यूटर वैज्ञानिक) द्वारा मूल परिभाषा में,[1] यह माना गया था कि अलग-अलग प्रतीकों (प्रोग्रामिंग) का अनंत समुच्चय स्थित था, जिसे लैटिन लिपियों और एकल एम्बेडेड रिक्त स्थान ( कैरैक्टर स्ट्रिंग (कंप्यूटिंग) और संख्यात्मक शाब्दिक (कंप्यूटर प्रोग्रामिंग) का एक उपसमुच्चय ) वाले अंकों की श्रृंखला के रूप में दर्शाया गया था।
अधिकांश आधुनिक सेक्सपीआर अंकन अधिक सामान्य उद्धृत स्ट्रिंग्स (उदाहरण के लिए विराम चिह्न या पूर्ण यूनिकोड सहित) की अनुमति देते हैं, और 2 से अधिक सदस्यों के साथ सूचियों का प्रतिनिधित्व करने के लिए संक्षिप्त अंकन का उपयोग करते हैं, ताकि
(x y z)
इसका अर्थ है कि
(x . (y . (z . NIL)))
NIL विशेष अंत-सूची ऑब्जेक्ट (कंप्यूटर विज्ञान) है (वैकल्पिक रूप लिखित (), जो योजना (प्रोग्रामिंग भाषा) में एकमात्र प्रतिनिधित्व है[4])।
प्रोग्रामिंग भाषाओं के लिस्प वर्ग में, स्रोत कोड और डेटा दोनों का प्रतिनिधित्व करने के लिए एस-अभिव्यक्ति का उपयोग किया जाता है। एस-अभिव्यक्ति के अन्य उपयोग डॉक्यूमेंट शैली शब्दार्थ और विशिष्टता भाषा जैसी लिस्प-व्युत्पन्न भाषाओं में हैं, और इंटरनेट संदेश एक्सेस प्रोटोकॉल और जॉन मैककार्थी (कंप्यूटर वैज्ञानिक) के सामान्य व्यापार संचार भाषा जैसे संचार प्रोटोकॉल में मार्क-अप के रूप में हैं। इसका उपयोग वेब असेंबली के पाठ प्रतिनिधित्व के रूप में भी किया जाता है। सिंटैक्स और समर्थित डेटा प्रकारों का विवरण अलग-अलग भाषाओं में भिन्न होता है, परन्तु इन भाषाओं में सबसे सामान्य विशेषता एस-अभिव्यक्ति और प्रीफ़िक्स अंकन का उपयोग है।
डेटाटाइप और सिंटैक्स
एस-अभिव्यक्ति प्रारूप के कई प्रकार हैं, जो विभिन्न डेटाटाइप के लिए विभिन्न सिंटैक्स का समर्थन करते हैं। इस प्रकार से सबसे व्यापक रूप से समर्थित हैं:
- सूचियाँ और जोड़े:
(1 () (2 . 3) (4)) - प्रतीक:
with-hyphen?@!$|a symbol with spaces| - स्ट्रिंग्स:
"Hello, world!" - पूर्णांक:
-9876543210 - दशमलव संख्याएं:
-0.06.283186.022e23
कैरैक्टर # का उपयोग अक्सर सिंटैक्स में एक्सटेंशन उपसर्ग करने के लिए किया जाता है, उदाहरण के लिए हेक्साडेसिमल पूर्णांकों के लिए #x10 हेक्साडेसिमल या कैरैक्टरों के लिए #\C है।
लिस्प में प्रयोग
लिस्प में स्रोत कोड का प्रतिनिधित्व करते समय, एस-अभिव्यक्ति का प्रथम अवयव सामान्यतः ऑपरेटर या फ़ंक्शन का नाम होता है और किसी भी शेष अवयवों को तर्कों के रूप में माना जाता है। इसे उपसर्ग अंकन या पोलिश अंकन कहा जाता है। उदाहरण के रूप में, C (प्रोग्रामिंग लैंग्वेज) में 4 == (2 + 2) लिखी गई बूलियन तर्क अभिव्यक्ति लिखा गया को लिस्प के एस-एक्सपीआर-आधारित उपसर्ग अंकन में (= 4 (+ 2 2)) के रूप में दर्शाया गया है।
जैसा ऊपर बताया गया है, परमाणु की यथार्थ परिभाषा एलआईएसपी जैसी भाषाओं में भिन्न होती है। उद्धृत स्ट्रिंग में सामान्यतः उद्धरण के अतिरिक्त कुछ भी हो सकता है, जबकि एक गैर-उद्धृत पहचानकर्ता परमाणु में सामान्यतः उद्धरण, रिक्त स्थान के कैरैक्टर, लघु कोष्ठक, कोष्ठक, धनुर्कोष्ठक, बैकस्लैश और अर्धविराम के अतिरिक्त कुछ भी हो सकता है। किसी भी स्थिति में, निषिद्ध कैरैक्टर को सामान्यतः पूर्ववर्ती बैकस्लैश से बचकर सम्मिलित किया जा सकता है। यूनिकोड समर्थन भिन्न होता है।
एस-एक्सपीआर परिभाषा की पुनरावर्ती स्थिति परंपरागत रूप से कॉन कोष्ठकों का उपयोग करके कार्यान्वित किया जाता है।
एस-अभिव्यक्ति मूल रूप से मात्र एम-अभिव्यक्ति द्वारा अन्तःक्षेप किए जाने वाले डेटा के लिए अभिप्रेत थे, परन्तु लिस्प का प्रथम कार्यान्वयन एम-अभिव्यक्ति के एस-अभिव्यक्ति एन्कोडिंग का इंटरप्रेटर था, और लिस्प प्रोग्रामर शीघ्र ही दोनों कोड और डेटा के लिए एस-अभिव्यक्ति का उपयोग करने के प्रवृत्त हो गए। इसका अर्थ है कि लिस्प समजातीय है; अर्थात्, प्रोग्रामों का प्राथमिक प्रतिनिधित्व भी आदिम प्रकार की भाषा में डेटा संरचना है।
डेटा एस-अभिव्यक्ति के उदाहरण
नीडित सूचियों को एस-अभिव्यक्ति के रूप में लिखा जा सकता है: ((milk juice) (honey marmalade)) दो-अवयव एस-अभिव्यक्ति है जिसके अवयव भी दो-अवयव एस-अभिव्यक्ति हैं। लिस्प (और यह आलेख) में प्रयुक्त व्हाइटस्पेस-पृथक अंकन सामान्य है। पंक्ति विराम (न्यूलाइन कैरैक्टर) सामान्यतः विभाजक के रूप में योग्य होते हैं।
यह एस-अभिव्यक्ति (गज़दार/मेलिश, लिस्प में प्राकृतिक भाषा प्रसंस्करण) के रूप में लिखे गए अंग्रेजी के छोटे से उपसमुच्चय के लिए सरल संदर्भ-मुक्त व्याकरण है, जहां S = वाक्य, NP = संज्ञा वाक्यांश, VP = क्रिया वाक्यांश, V = क्रिया :
(((S) (NP VP))
((VP) (V))
((VP) (V NP))
((V) died)
((V) employed)
((NP) nurses)
((NP) patients)
((NP) Medicenter)
((NP) "Dr Chan"))
सोर्स कोड एस-अभिव्यक्ति का उदाहरण
प्रोग्राम कोड एस-अभिव्यक्ति में लिखा जा सकता है, सामान्यतः प्रीफिक्स अंकन का उपयोग करते हुए।
इस प्रकार से सामान्य लिस्प में उदाहरण:
(defun factorial (x)
(if (zerop x)
1
(* x (factorial (- x 1)))))
फ़ंक्शन READ का उपयोग करके एस-अभिव्यक्ति को लिस्प में पढ़ा जा सकता है। READ एस-अभिव्यक्ति के टेक्स्टुअल प्रतिनिधित्व को पढ़ता है और लिस्प डेटा लौटाता है। फ़ंक्शन PRINT का उपयोग एस-अभिव्यक्ति को आउटपुट करने के लिए किया जा सकता है। आउटपुट तब फ़ंक्शन READ के साथ पढ़ा जा सकता है, जब सभी मुद्रित डेटा ऑब्जेक्ट में पठनीय प्रतिनिधित्व होता है। लिस्प में संख्याओं, स्ट्रिंग्स, प्रतीकों, सूचियों और कई अन्य डेटा प्रकारों के लिए पठनीय निरूपण हैं। PPRINT फ़ंक्शन का उपयोग करके प्रोग्राम कोड को सुंदर मुद्रित एस-अभिव्यक्ति के रूप में स्वरूपित किया जा सकता है (नोट: दो Ps के साथ, सुंदर-प्रिंट के लिए छोटा)।
लिस्प प्रोग्राम वैध एस-अभिव्यक्ति हैं, परन्तु सभी एस-अभिव्यक्ति मान्य लिस्प प्रोग्राम नहीं हैं। (1.0 + 3.1) वैध एस-अभिव्यक्ति है, परन्तु वैध लिस्प प्रोग्राम नहीं है, क्योंकि लिस्प उपसर्ग अंकन का उपयोग करता है और फ्लोटिंग पॉइंट नंबर (यहां 1.0) ऑपरेशन (अभिव्यक्ति का प्रथम अवयव) के रूप में मान्य नहीं है।
एक एकल उद्धरण चिह्न से पहले एस-अभिव्यक्ति, जैसा कि 'x, लिस्प (प्रोग्रामिंग भाषा) के लिए वाक्यात्मक चीनी है # स्व-मूल्यांकन रूपों और उद्धरण | उद्धृत एस-अभिव्यक्ति, इस स्थिति में (quote x).
पार्सिंग
एस-अभिव्यक्ति की तुलना अक्सर एक्सएमएल से की जाती है: मुख्य अंतर यह है कि एस-अभिव्यक्ति में मात्र प्रकार का कंटेनमेंट होता है, बिंदीदार युग्म, जबकि एक्सएमएल टैग में सरल गुण, अन्य टैग या सीडीएटीए हो सकते हैं, प्रत्येक अलग-अलग सिंटैक्स का उपयोग करता है। सरल उपयोग के मामलों के लिए, एस-अभिव्यक्ति एक्सएमएल की तुलना में सरल हैं, परन्तु अधिक उन्नत उपयोग के मामलों के लिए, एक्सएमएल में क्वेरी भाषा है जिसे XPath कहा जाता है, एक्सएमएल डेटा के प्रबंधन को आसान बनाने के लिए कई टूल और थर्ड पार्टी लाइब्रेरी।
मानकीकरण
कुछ लिस्प-व्युत्पन्न प्रोग्रामिंग भाषाओं के मानकों में उनके एस-अभिव्यक्ति सिंटैक्स के लिए विनिर्देश सम्मिलित है। इनमें सामान्य लिस्प (ANSI मानक डॉक्यूमेंट ANSI INCITS 226-1994 (R2004)), स्कीम (प्रोग्रामिंग भाषा) (R5RS और R6RS) सम्मिलित हैं।[5]), और आईएसएलआईएसपी।
रिवेस्ट का संस्करण
मई 1997 में, रॉन रिवेस्ट ने इंटरनेट ड्राफ्ट प्रस्तुत किया[6] टिप्पणियों के अनुरोध के रूप में प्रकाशन के लिए विचार किया जाएगा। मसौदे ने लिस्प एस-अभिव्यक्ति पर आधारित सिंटैक्स को परिभाषित किया परन्तु विशेष रूप से प्रोग्रामिंग के अतिरिक्त सामान्य-उद्देश्य डेटा भंडारण और विनिमय (एक्सएमएल के समान) के लिए अभिप्रेत है। इसे कभी भी RFC के रूप में स्वीकृत नहीं किया गया था, परन्तु तब से इसे अन्य RFC (जैसे RFC 2693) और कई अन्य प्रकाशनों द्वारा उद्धृत और उपयोग किया जाता है।[7] यह मूल रूप से सरल सार्वजनिक कुंजी अवसंरचना में उपयोग के लिए अभिप्रेत था।
रिवेस्ट का प्रारूप एस-अभिव्यक्ति को ऑक्टेट-स्ट्रिंग (बाइट्स की श्रृंखला) या अन्य एस-अभिव्यक्ति की सीमित सूची के रूप में परिभाषित करता है। यह इस संरचना को व्यक्त करने के लिए तीन इंटरचेंज स्वरूपों का कैरैक्टरन करता है। उन्नत परिवहन है, जो स्वरूपण के स्थिति में बहुत लचीला है, और वाक्यात्मक रूप से लिस्प-शैली के अभिव्यक्तियों के समान है, परन्तु वे समान नहीं हैं। उन्नत परिवहन, उदाहरण के लिए, ऑक्टेट-स्ट्रिंग्स को शब्दशः प्रदर्शित करने की अनुमति देता है (स्ट्रिंग की लंबाई कोलन और पूरे कच्चे स्ट्रिंग के बाद), उद्धृत फॉर्म जो एस्केप कैरेक्टर, हेक्साडेसिमल, बेस 64 की अनुमति देता है, या सीधे टोकन के रूप में रखा जाता है यदि यह मिलता है कुछ शर्तें। (रिवेस्ट के टोकन लिस्प टोकन से भिन्न होते हैं जिसमें पूर्व सिर्फ सुविधा और सौंदर्यशास्त्र के लिए होते हैं, और अन्य स्ट्रिंग्स की तरह ही व्यवहार किए जाते हैं, जबकि बाद वाले का विशिष्ट वाक्यात्मक अर्थ होता है।)
रिवेस्ट का मसौदा डिजिटल हस्ताक्षर उद्देश्यों के लिए कैनोनिकल एस-अभिव्यक्ति को परिभाषित करता है। इसका उद्देश्य कॉम्पैक्ट होना है, पार्स करना आसान है, और किसी सार एस-अभिव्यक्ति के लिए अद्वितीय है। यह मात्र वर्बैटिम स्ट्रिंग्स की अनुमति देता है, और बाहरी स्ट्रिंग्स को स्वरूपित करने के रूप में व्हाइटस्पेस को प्रतिबंधित करता है। अंत में मूल परिवहन प्रतिनिधित्व है, जो या तो विहित रूप है या बेस64 के समान एन्कोडेड है और ब्रैकेट से घिरा हुआ है, बाद वाला सिस्टम में कैनोनिक रूप से एन्कोडेड एस-अभिव्यक्ति को सुरक्षित रूप से परिवहन करने का इरादा रखता है जो रिक्ति को परिवर्तित कर सकता है (उदाहरण के लिए ईमेल सिस्टम जो 80-कैरैक्टर-चौड़ी रेखाएँ हैं और इससे अधिक कुछ भी लपेटता है)।
यह प्रारूप SPKI के बाहर उपयोग के लिए व्यापक रूप से अनुकूलित नहीं किया गया है (कुछ उपयोगकर्ता GnuPG, libgcrypt, Nettle (क्रिप्टोग्राफ़िक लाइब्रेरी) और GNU lsh हैं)। रिवेस्ट का एस-अभिव्यक्ति वेब पेज पार्सर और जनरेटर (मेरा लाइसेंस के तहत उपलब्ध) के लिए सी (प्रोग्रामिंग भाषा) स्रोत कोड प्रदान करता है, जिसे अन्य प्रोग्रामों में अनुकूलित और एम्बेड किया जा सकता है।[8] इसके अतिरिक्त, प्रारूप को स्वतंत्र रूप से लागू करने पर कोई प्रतिबंध नहीं है।
यह भी देखें
- दोष
- कार और सीडीआर
- Fexpr
- लैम्ब्डा कैलकुलस
- एम-अभिव्यक्ति
- कैनोनिकल एस-अभिव्यक्ति
- डेटा क्रमांकन स्वरूपों की तुलना
संदर्भ
- ↑ 1.0 1.1 John McCarthy (1960/2006). Recursive functions of symbolic expressions Archived 2004-02-02 at the Wayback Machine. Originally published in Communications of the ACM.
- ↑ "Common Lisp HyperSpec: 22.4 - The Printer Dictionary: *PRINT-CIRCLE*". 2018-12-28.
- ↑ "Revised7 Report on the Algorithmic Language Scheme: Section 2.4: Datum Labels" (PDF). 2013-07-06.
- ↑ "Revised^5 Report on the Algorithmic Language Scheme". schemers.org.
- ↑ Sperber, Michael; Dybvig, R. Kent; Flatt, Matthew; Van Straaten, Anton; Findler, Robby; Matthews, Jacob (Aug 12, 2009). "Revised6 Report on the Algorithmic Language Scheme". Journal of Functional Programming. 19 (S1): 1–301. CiteSeerX 10.1.1.372.373. doi:10.1017/S0956796809990074.
- ↑ S-expressions, Network Working Group, Internet Draft, Expires November 4, 1997 - R. Rivest, May 4, 1997 draft-rivest-sexp-00.txt, Ronald L. Rivest, CSAIL MIT website
- ↑ rivest sexp, Google Scholar (search)
- ↑ "SEXP (एस-एक्सप्रेशन)". people.csail.mit.edu.
बाहरी संबंध
- sfsexp the small, fast एस-expression library for C/C++ on GitHub
- miniलिस्प, by Léon Bottou.
- एस-expressions on Rosettacode has implementations of readers and writers in many languages.