इवल
कुछ प्रोग्रामिंग भाषाएं इवल, अंग्रेजी मूल्यांकन के लिए संक्षिप्त, एक ऐसा कार्य है जो एक स्ट्रिंग का मूल्यांकन करता है जैसे कि यह भाषा में एक अभिव्यक्ति है, जो एक परिणाम देता है; दूसरों में, यह कोड की कई पंक्तियों को निष्पादित करता है जैसे कि उन्हें इवल सहित लाइन के अतिरिक्त सम्मलित किया गया हो। इवल के लिए इनपुट आवश्यक रूप से एक स्ट्रिंग नहीं है; यह कोड का संरचित प्रतिनिधित्व हो सकता है, जैसे कि सार सिंटैक्स ट्री (जैसे लिस्प फॉर्म), या विशेष प्रकार जैसे किcode
(पायथन के रूप में) विवरण के लिए अनुरूप निष्पादन है, जो एक स्ट्रिंग (या अन्य प्रारूप में कोड) को निष्पादित करता है जैसे कि एक विवरण जो कुछ भाषाओं में उपस्थित हैं, जबकि अन्य भाषाओं में दोनों में से केवल एक इवल
या एक्ज़ेक
है।
इवल और अप्लाई मेटा-सर्कुलर मूल्यांकनकर्ताओं के उदाहरण हैं, एक भाषा के व्याख्याकार जिन्हें भाषा के अन्दर ही लागू किया जा सकता है।[citation needed]
सुरक्षा जोखिम
अविश्वसनीय स्रोत से डेटा के साथ इवल का उपयोग करने से सुरक्षा में भेद्यता आ सकती है। उदाहरण के लिए, यह मानते हुए कि get_data()
फ़ंक्शन इंटरनेट से डेटा प्राप्त करता है, यह पायथन कोड असुरक्षित है:
सत्र ['प्रमाणीकृत'] = कृत्रिम डेटा = गेट_डेटा () फू = इवल (डेटा)
एक अटैकर डेटा के रूप में "session.update(authenticated=True)"
स्ट्रिंग के साथ प्रोग्राम की आपूर्ति कर सकता है, जो एक प्रामाणिक कुंजी को सही होने के लिए सेट करने के लिए सत्र शब्दकोश को अपडेट करेगा। इसका समाधान करने के लिए, इवल के साथ उपयोग किए जाने वाले सभी डेटा से बचा जाना चाहिए, या इसे संभावित रूप से हानिकारक कार्यों तक पहुंचे बिना चलाया जाना चाहिए।
कार्यान्वयन
व्याख्या की गई भाषाओं में, इवल लगभग हमेशा उसी दुभाषिया के साथ सामान्य कोड के रूप में कार्यान्वित किया जाता है। संकलित भाषाओं में, प्रोग्राम को संकलित करने के लिए उपयोग किए जाने वाले एक ही कंपाइलर को इवल फ़ंक्शन का उपयोग करके प्रोग्राम में एम्बेड किया जा सकता है; अलग दुभाषियों का कभी-कभी उपयोग किया जाता है, चूंकि इसके परिणामस्वरूप कोड दोहराव होता है।
प्रोग्रामिंग लैंग्वेज
ईसीएमएस्क्रिप्ट
जावास्क्रिप्ट
जावास्क्रिप्ट में,इवल
एक अभिव्यक्ति मूल्यांकनकर्ता और एक स्टेट्मन्ट निष्पादक के बीच एक संकर है। यह मूल्यांकन की गई अंतिम अभिव्यक्ति का परिणाम देता है।
अभिव्यक्ति मूल्यांकनकर्ता के रूप में उदाहरण: <वाक्यविन्यास लैंग = जावास्क्रिप्ट> फू = 2; चेतावनी (इवल ('फू + 2')); </वाक्यविन्यास हाइलाइट>
एक स्टेट्मन्ट निष्पादक के रूप में उदाहरण: <वाक्यविन्यास लैंग = जावास्क्रिप्ट> फू = 2; इवल ('फू = फू + 2; अलर्ट (फू);'); </वाक्यविन्यास हाइलाइट>
जावास्क्रिप्ट का एक प्रयोगइवल
जेसन टेक्स्ट को पार्स करना है, संभवतया अजाक्स ढांचे के भाग के रूप में। चूंकि, आधुनिक ब्राउज़र इस कार्य के लिए अधिक सुरक्षित विकल्प के रूप में जेसन.पार्स प्रदान करते हैं।
एक्शन स्क्रिप्ट
एक्शन स्क्रिप्ट (फ्लैश की प्रोग्रामिंग भाषा) में,इवल
मनमाने अभिव्यक्तियों का मूल्यांकन करने के लिए उपयोग नहीं किया जा सकता है। फ्लैश 8 प्रलेखन के अनुसार, इसका उपयोग उन भावों तक सीमित है जो पुनर्प्राप्त करने के लिए एक चर, संपत्ति, वस्तु या मूवी क्लिप के नाम का प्रतिनिधित्व करते हैं। यह पैरामीटर या तो स्ट्रिंग या ऑब्जेक्ट इंस्टेंस का सीधा संदर्भ हो सकता है।[1]
एक्शन स्क्रिप्ट 3इवल
का समर्थन नहीं करता है।
एक्शन स्क्रिप्ट 3 इवल लाइब्रेरी[2] और डी.एवल एपीआई[3] समकक्ष बनाने के लिए विकास परियोजनाएं थीइवल
एक्शन स्क्रिप्ट 3 में। दोनों समाप्त हो गए हैं, क्योंकि एडोब फ्लैश प्लेयर अपने जीवन के अंत तक पहुंच गया है।
लिस्प
लिस्प 1958 में एक इवल फ़ंक्शन का उपयोग करने वाली मूल भाषा थी। वास्तव में, इवल फ़ंक्शन की परिभाषा के कारण भाषा दुभाषिया का पहला कार्यान्वयन का नेतृत्व किया।[4] इवल फ़ंक्शन को परिभाषित करने से पहले, लिस्प फ़ंक्शंस को असेंबली लैंग्वेज स्टेटमेंट्स में मैन्युअल रूप से संकलित किया गया था। चूंकि, एक बार इवल फ़ंक्शन को नियम रूप मे संकलित कर लेने के बाद इसे एक साधारण रीड-इवल-प्रिंट लूप भाग के रूप में उपयोग किया गया था, जिसने पहले लिस्प दुभाषिया का आधार बनाया था।
लिस्प इवल फ़ंक्शन के बाद के संस्करणों को भी कंपाइलर के रूप में उपयोग किया गया है। लिस्प में इवल फ़ंक्शन एक फॉर्म के मूल्यांकन और तर्क के रूप में निष्पादित होने की अपेक्षा करता है। दिए गए फॉर्म का रिटर्न वैल्यू कॉल टू इवल का रिटर्न वैल्यू होगा।यह एक उदाहरण लिस्प कोड है:
<वाक्यविन्यास प्रकाश लैंग = लिस्प>
- एक फॉर्म जो + फ़ंक्शन को 1,2 और 3 के साथ तर्क के रूप में कॉल करता है।
- यह 6 लौटाता है।
(+ 1 2 3)
- लिस्प में किसी भी रूप का मूल्यांकन किया जाना है, इसलिए
- + को कॉल किया गया था।
- हम लिस्प को मूल्यांकन करने से रोक सकते हैं
- उदाहरण के लिए ' के साथ उपसर्ग करके एक फॉर्म का
(सेट फॉर्म1 '(+ 1 2 3))
- जब फॉर्म 1 में एक फॉर्म होता है जिसका उपयोग इवल द्वारा किया जा सकता है
- उदाहरण
(ईवल फॉर्म 1)
- इवल मूल्यांकन (+ 1 2 3) और 6 लौटा।
</वाक्यविन्यास हाइलाइट>
लिस्प बहुत लचीला होने के लिए जाना जाता है और इसलिए यह इवल कार्य है। उदाहरण के लिए, स्ट्रिंग की सामग्री का मूल्यांकन करने के लिए, स्ट्रिंग को रीड-टू-स्ट्रिंग फ़ंक्शन का उपयोग करके पहले लिस्प फॉर्म में परिवर्तित करना होगा और फिर परिणामी फॉर्म को इवल पास करना होगा:
(इवल (रीड-फ्रॉम-स्ट्रिंग (format t \ Hello World!!!~%\ ) ))
भ्रम का एक प्रमुख बिंदु प्रश्न है, किस संदर्भ में फॉर्म में प्रतीकों का मूल्यांकन किया जाएगा। उपरोक्त उदाहरण में, फॉर्म 1 में प्रतीक + है। उदाहरण के उद्देश्य के अनुसार कार्य करने के लिए इस प्रतीक के मूल्यांकन को जोड़ने के लिए फ़ंक्शन प्राप्त करना चाहिए। इस प्रकार लिस्प की कुछ बोलियाँ मूल्यांकन के संदर्भ को निर्दिष्ट करने के लिए इवल के लिए एक अतिरिक्त पैरामीटर की अनुमति देती हैं (पायथन के इवल फ़ंक्शन के वैकल्पिक तर्कों के समान - नीचे देखें)। लिस्प (R5RS और बाद में) की योजना बोली में एक उदाहरण:
<वाक्यविन्यास लैंग = योजना>
- उपरोक्त उदाहरण की तरह कुछ सरल रूप को परिभाषित करें।
(फॉर्म2 परिभाषित करें '(+ 5 2)) मूल्य: फॉर्म 2
- प्रारंभिक संदर्भ में प्रपत्र का मूल्यांकन करें।
- मूल्यांकन के लिए एक संदर्भ को स्कीम स्लैंग में पर्यावरण कहा जाता है।
(इवल (फॉर्म 2 उपयोगकर्ता-प्रारंभिक-पर्यावरण) मूल्य: 7
- प्रारंभिक वातावरण को भ्रमित करें, जिससे + होगा
- घटाव समारोह के लिए एक नाम।
(पर्यावरण-परिभाषित उपयोगकर्ता-प्रारंभिक-पर्यावरण '+ -) मूल्य: +
- फॉर्म का फिर से मूल्यांकन करें।
- ध्यान दें कि लौटाया गया मान बदल गया है।
(इवल (फॉर्म2 उपयोगकर्ता-प्रारंभिक-पर्यावरण) मूल्य: 3 </वाक्यविन्यास हाइलाइट>
पर्ल
पर्ल में,इवल
कार्य एक अभिव्यक्ति मूल्यांकनकर्ता और एक विवरण निष्पादक के बीच एक संकर है। यह मूल्यांकन की गई अंतिम अभिव्यक्ति का परिणाम देता है (सभी कथन पर्ल प्रोग्रामिंग में अभिव्यक्ति हैं), और अंतिम अर्धविराम को छोड़े जाने की अनुमति देता है।
अभिव्यक्ति मूल्यांकनकर्ता के रूप में उदाहरण: <वाक्यविन्यास प्रकाश लैंग = पर्ल> $ फू = 2; प्रिंट इवल ('$ फू + 2'), \ n; </वाक्यविन्यास हाइलाइट>
एक विवरण निष्पादक के रूप में उदाहरण: <वाक्यविन्यास प्रकाश लैंग = पर्ल> $ फू = 2; इवल ('$ फू + = 2; प्रिंट $ फू \ n;'); </वाक्यविन्यास हाइलाइट>
पर्ल में इवल ब्लॉक भी हैं, जो इसके अपवाद हैंडलिंग तंत्र के रूप में कार्य करता है (अपवाद हैंडलिंग सिंटैक्स#पर्ल देखें)। यह इवल के उपरोक्त उपयोग से अलग है जिसमें इवल ब्लॉक के अंदर उस कोड में रन-टाइम के अतिरिक्त संकलन-समय पर व्याख्या की जाती है, इसलिए यह इस लेख में उपयोग किए गए इवल का अर्थ नहीं है।
पीएचपी
प्रिंट पीएचपी, इवल एक स्ट्रिंग में कोड को लगभग ठीक उसी तरह निष्पादित करता है जैसे कि इसे कॉल करने के अतिरिक्त फ़ाइल में डाल दिया गया हो। एकमात्र अपवाद यह है कि त्रुटियों को एक कॉल से इवल () के रूप में रिपोर्ट किया जाता है, और रिटर्न स्टेटमेंट फ़ंक्शन का परिणाम बन जाता है।
कुछ भाषाओं के विपरीत, इवल का तर्क एक या अधिक पूर्ण कथनों की एक स्ट्रिंग होना चाहिए, केवल भाव नहीं; चूंकि, कोई भी रिटर्न स्टेटमेंट में एक्सप्रेशन डालकर इवल का "एक्सप्रेशन" फॉर्म प्राप्त कर सकता है, जिससे इवल उस एक्सप्रेशन के परिणाम को वापस कर देता है।
कुछ भाषाओं के विपरीत, PHP का इवल एक फ़ंक्शन के अतिरिक्त एक "भाषा निर्माण" है,[5] और इसलिए कुछ संदर्भों में इसका उपयोग नहीं किया जा सकता है जहां फ़ंक्शन हो सकते हैं, जैसे उच्च-क्रम के कार्य।
प्रतिध्वनि का उपयोग करने का उदाहरण: <वाक्यविन्यास लैंग = php> <?php $foo = हैलो, दुनिया!\n ; इवल ('इको $ फू;'); ?> </वाक्यविन्यास हाइलाइट>
मान लौटाने का उदाहरण: <वाक्यविन्यास लैंग = php> <?php $foo = अलविदा, दुनिया!\n ; // PHP5 में काम नहीं करता गूंज इवल ('वापसी $ फू;'); ?> </वाक्यविन्यास हाइलाइट>
लुआ
लुआ 5.1 में,लोडस्ट्रिंग
लुआ कोड को एक अज्ञात फ़ंक्शन में संकलित करता है।
अभिव्यक्ति मूल्यांकनकर्ता के रूप में उदाहरण: <वाक्यविन्यास लैंग = लुआ> लोडस्ट्रिंग (प्रिंट ('हैलो वर्ल्ड!')) () </वाक्यविन्यास हाइलाइट>
दो चरणों में मूल्यांकन करने का उदाहरण: <वाक्यविन्यास लैंग = लुआ> ए = 1 f = लोडस्ट्रिंग (एक + 1 लौटाएं) - अभिव्यक्ति को एक अज्ञात फ़ंक्शन में संकलित करें प्रिंट (एफ ()) - निष्पादित करें (और परिणाम '2' प्रिंट करें) </वाक्यविन्यास हाइलाइट>
लुआ 5.2 स्थित लोड फ़ंक्शन के पक्ष में लोडस्ट्रिंग को बहिष्कृत करता है, जिसे स्ट्रिंग्स को स्वीकार करने के लिए संवर्धित किया गया है। इसके अतिरिक्त, यह फ़ंक्शन के वातावरण को सीधे प्रदान करने की अनुमति देता है, चूंकि वातावरण अब बंद हो गया है (कंप्यूटर विज्ञान)। <वाक्यविन्यास लैंग = लुआ> प्रिंट (लोड (प्रिंट ('हैलो' .. ए), टी, {ए = वर्ल्ड!, प्रिंट = प्रिंट}) ()) </वाक्यविन्यास हाइलाइट>
परिशिष्ट भाग
पोस्ट स्क्रिप्ट का निष्पादन ऑपरेटर एक ऑपरेंड लेता है - यदि यह एक साधारण शाब्दिक है तो यह इसे स्टैक का प्रयोजन है। यदि कोई पोस्टस्क्रिप्ट अभिव्यक्ति वाली स्ट्रिंग लेता है, तो कोई स्ट्रिंग को निष्पादन योग्य में परिवर्तित कर सकता है जिसे दुभाषिया द्वारा निष्पादित किया जा सकता है, उदाहरण के लिए:
<वाक्यविन्यास लैंग = पोस्टस्क्रिप्ट>
((हैलो वर्ल्ड) =) सीवीएक्स निष्पादन
</वाक्यविन्यास हाइलाइट> पोस्टस्क्रिप्ट अभिव्यक्ति को परिवर्तित करता है
<वाक्यविन्यास लैंग = पोस्टस्क्रिप्ट>
(हैलो वर्ल्ड) =
</वाक्यविन्यास हाइलाइट> जो स्टैक से हैलो वर्ल्ड स्ट्रिंग को पॉप करता है और इसे निष्पादन योग्य प्रकार के लिए स्क्रीन पर प्रदर्शित करता है, फिर निष्पादित किया जाता है।
पोस्टस्क्रिप्ट run
ऑपरेटर कार्यक्षमता में समान है, लेकिन इसके अतिरिक्त दुभाषिया फ़ाइल में ही पोस्टस्क्रिप्ट एक्सप्रेशन की व्याख्या करता है।
<वाक्यविन्यास लैंग = पोस्टस्क्रिप्ट> (file.ps) चलाएँ </वाक्यविन्यास हाइलाइट>
पायथन
पायथन (भाषा) में,इवल
अपने सरलतम रूप में कार्य एकल अभिव्यक्ति का मूल्यांकन करता है।
इवल
उदाहरण (इंटरैक्टिव खोल):
<वाक्यविन्यास लैंग = पिकॉन>
>>> एक्स = 1
>>> इवल('x + 1')
2
>>> इवल ('एक्स')
1
</वाक्यविन्यास हाइलाइट> इवल
e> फ़ंक्शन दो वैकल्पिक तर्क लेता है, वैश्विक और स्थानीय, जो प्रोग्रामर को अभिव्यक्ति के मूल्यांकन के लिए एक प्रतिबंधित वातावरण स्थापित करने की अनुमति देता है। exec
ई> विवरण (या exec
फ़ंक्शन पायथन 3.x में) विवरणों को निष्पादित करता है:
exec
उदाहरण (इंटरैक्टिव खोल):
<वाक्यविन्यास लैंग = पिकॉन>
>>> एक्स = 1
>>> वाई = 1
>>> निष्पादन एक्स + = 1; वाई - = 1
>>> एक्स
2
>>> वाई
0
</वाक्यविन्यास हाइलाइट>
कथनों/अभिव्यक्तियों के मूल्यांकन के लिए सबसे सामान्य रूप कोड ऑब्जेक्ट्स का उपयोग कर रहा है। इन्हें आह्वान करके बनाया जा सकता है कम्पाइल()
फ़ंक्शन और यह बताकर कि इसे किस प्रकार के इनपुट को संकलित करना है: aexec
विवरण, एइवल
बयान या एसिंगगल
कथन:
कम्पाइल
उदाहरण (इंटरैक्टिव खोल):
<वाक्यविन्यास लैंग = पिकॉन>
>>> एक्स = 1
>>> वाई = 2
>>> इवल (संकलन (प्रिंट 'x + y =', x + y, कम्पाइल- सैम्पल.पीवाई, एकल))
एक्स + वाई = 3
</वाक्यविन्यास हाइलाइट>
डी
डी प्रोग्रामिंग एक सांख्यिकीय रूप से संकलित भाषा है और इसलिए इसमें सम्मलित नहीं हैइवल
पारंपरिक अर्थों में कथन, परंतु इसमें संबंधित "मिक्सिन" कथन सम्मलित है। अंतर यह है कि, जहां "इवल" एक स्ट्रिंग को रनटाइम पर कोड के रूप में व्याख्या करता है, "मिक्सिन" के साथ स्ट्रिंग को सामान्य कोड की तरह स्थिर रूप से संकलित किया जाता है और संकलन समय पर जाना जाना चाहिए।
उदाहरण के लिए:
<वाक्यविन्यास प्रकाश लैंग = डी> आयात std.stdio;
शून्य मुख्य () {
इंट संख्या = 0; मिक्सिन (संख्या ++;); राइटलन (संख्या); // प्रिंट 1।
} </वाक्यविन्यास हाइलाइट>
उपरोक्त उदाहरण ठीक उसी असेंबली भाषा के निर्देशों को संकलित करेगा जैसे किnum++;
मिश्रित होने के अतिरिक्त सीधे लिखा गया था। मिक्सिन के तर्क को एक स्ट्रिंग शाब्दिक होने की आवश्यकता नहीं है, परंतु मनमाना अभिव्यक्ति जिसके परिणामस्वरूप एक स्ट्रिंग मान होता है, जिसमें फ़ंक्शन कॉल सम्मलित होते हैं, जिनका संकलन समय पर मूल्यांकन किया जा सकता है।
शीत संलयन
कोल्ड फ्यूजन काइवैल्यूएट
फ़ंक्शन आपको रनटाइम पर स्ट्रिंग अभिव्यक्ति का मूल्यांकन करने देता है।
<वाक्यविन्यास लैंग = सीएफएम>
<cfset x = int(1+1) >
<cfset y = मूल्यांकन (x)>
</वाक्यविन्यास हाइलाइट>
यह विशेष रूप से तब उपयोगी होता है जब आपको उस चर को प्रोग्रामेटिक रूप से चुनने की आवश्यकता होती है जिसे आप पढ़ना चाहते हैं।
रूबी
रूबी प्रोग्रामिंग लैंग्वेज दुभाषिया पायथन या पर्ल के समान एक इवल फ़ंक्शन प्रदान करता है, और एक कार्यक्षेत्र (प्रोग्रामिंग), या बाइंडिंग को भी निर्दिष्ट करने की अनुमति देता है।
किसी फ़ंक्शन के बंधन को निर्दिष्ट करने के अतिरिक्त, इवल का उपयोग विशिष्ट वर्ग परिभाषा बाइंडिंग या ऑब्जेक्ट इंस्टेंस बाइंडिंग के अन्दर अभिव्यक्ति का मूल्यांकन करने के लिए भी किया जा सकता है, जिससे स्ट्रिंग्स में निर्दिष्ट नई विधियों के साथ कक्षाओं को विस्तारित किया जा सकता है।
<वाक्यविन्यास लैंग = रूबी> ए = 1 इवल('a + 1') # (2 का मूल्यांकन करता है)
- एक संदर्भ के भीतर मूल्यांकन
डेफ गेटबाइंडिंग (ए)
बंधन
अंत इवल('a+1',गेट_बाइंडिंग(3)) # (4 का मूल्यांकन करता है, चूंकि गेट_बाइंडिंग के संदर्भ में 'a' 3 है) </वाक्यविन्यास हाइलाइट>
<वाक्यविन्यास लैंग = रूबी> क्लास टेस्ट; अंत टेस्ट क्लास_इवल( डेफ हैलो; वापसी 'हैलो'; एन्ड) # इस क्लास में 'हैलो' मेथड जोड़ें टेस्ट.न्यू.हैलो # हैलो का मूल्यांकन करता है </वाक्यविन्यास हाइलाइट>
फोर्थ
फोर्थ के अधिकांश मानक कार्यान्वयन के दो संस्करण हैं इवल
: मूल्यांकन और व्याख्या ।
विन 32 फोर्थ कोड उदाहरण: <वाक्यविन्यास लैंग = आगे>
एस 2 2 +। मूल्यांकन \ आउटपुट 4
</वाक्यविन्यास हाइलाइट>
फ्रेड
फ्रेमवर्क एफआरईडी एक इंटरएक्टिव भाषा है जिसमें इवल द्वारा सभी कोड का स्वचालित रूप से मूल्यांकन किया जाता है। नीचे दिए गए उदाहरणों में स्ट्रिंग पैरामीटर ठीक वैसे ही चलेंगे जैसे किसी सूत्र में टाइप किए गए और निष्पादित किए गए हों या जब चयनित और निष्पादित किए गए हों।
एम्परसेंड & तार संयोजन संचालिका है। इवल पुनरावर्ती रूप से इसके पैरामीटर को जोड़ता है, हल करता है और मूल्यांकन करता है।
फ्रेड का एक आंतरिक कार्य भी है जिसका नाम है @value
जो पैरामीटर स्ट्रिंग का मूल्यांकन करता है। @value
का वैकल्पिक दूसरा सांख्यिक पैरामीटर विशेष प्रकार जैसे दिनांक, समय के लिए इनपुट प्रकार और स्वरूपों को इंगित करता है। आदि और दिए गए मान प्रारूप को निर्धारित करता है।
सुरक्षा कारणों से @value संदर्भ का दायरा वैश्विक सापेक्ष है इसलिए @local के साथ बनाए गए स्थानीय चर @value के लिए अदृश्य हैं। उन्हें एकमात्र उसी सूत्र क्षेत्र में कोड द्वारा देखा जा सकता है। उसी टोकन द्वारा @value स्कोप में बनाए गए स्थानीय संस्करण केवल @value द्वारा देखे जा सकते हैं और उसी सूत्र या किसी अन्य कोड में कोड के लिए अदृश्य हैं।
फ्रेड कोड उदाहरण:
<वाक्यविन्यास लैंग = पाठ> @मान (5 + 4 + 1) # सांख्यिक मान 10 लौटाएं @ मान (2 और 3) # सांख्यिक मान 23 लौटाएं @ मान (2 और + 3) # सांख्यिक मान 5 लौटाएं @ मान (2 और + और 3) # सांख्यिक मान 5 लौटाएं @ मान (2 + 3) # सांख्यिक मान 5 लौटाएं
my_var := 3, @ मान (2 + my_var) # सांख्यिक मान 5 लौटाएं
my_var := -3, @value( 2 + @abs(my_var) ) # सांख्यिक मान 5 लौटाएं
यह एक त्रुटि लौटाएगा चूंकि @value का दायरा वैश्विक है और @local वैश्विक संदर्भों के लिए अदृश्य है और एकमात्र अपने स्वयं के सूत्र में कोड द्वारा देखा जा सकता है। @ स्थानीय (ए, बी), ए := 1, ख := 2, @ मान (ए + बी) # एक त्रुटि मान लौटाएं (1 *)
परंतु अगर ए और बी फ्रेम @value हैं जो वैश्विक और साथ ही सापेक्ष चर फ्रेम को संदर्भित कर सकते हैं, @value उन्हें देख सकते हैं ए := 1, ख := 2, @ मान (ए + बी) # संख्यात्मक मान लौटाएं 3
कोड की यह पंक्ति 3 वापस आ जाएगी चूंकि स्थानीय संस्करण @value दायरे में बनाए और देखे जाते हैं @value( @local(a,b),a:=1,b:=2,a+b ) # सांख्यिक मान लौटाएं 3
परंतु कोड की अगली दो पंक्तियाँ एक अपरिभाषित संदर्भ त्रुटि लौटाएंगी चूंकि a और b स्थानीय @value स्कोप में बनाए गए हैं और सूत्र के बाकी कोड के लिए अदृश्य हैं, वास्तव में किसी भी कोड के लिए कहीं भी परंतु इस @value स्कोप में। @ मान (@ स्थानीय (ए, बी), ए: = 1, बी: = 2), a+b # एक अपरिभाषित संदर्भ त्रुटि लौटाता है
@ मान ( {12/12/2012} , 16) # 12 दिसंबर, 2012 को स्ट्रिंग लौटाएं
@value( @fileload(@inputline( Enter Drive letter , & @item1 & ) & & :\myfile.txt ) ) # जहां @item1 को पैरामीटर c प्राप्त हुआ है, </वाक्यविन्यास हाइलाइट> स्ट्रिंग भागों को निष्पादित करेगा, नीचे स्ट्रिंग का निर्माण करेगा, और इसे @inputline से प्रारंभ होने वाले प्रोग्राम के रूप में निष्पादित करेगा जो उपयोगकर्ता इनपुट का अनुरोध करता है, C का सुझाव देता है, यदि उपयोगकर्ता सी दर्ज करता है @fileload इसके पैरामीटर के रूप में स्ट्रिंग c:\myfile.txt के साथ चलता है: <वाक्यविन्यास लैंग = पाठ> @fileload(@inputline( ड्राइव लेटर दर्ज करें , c ) & :\myfile.txt ) # डेस्कटॉप पर myfile.txt लोड करता है </वाक्यविन्यास हाइलाइट>
बेसिक
असली बुनियादी
रीयलबेसिक में, आरबीस्क्रिप्ट नामक एक वर्ग है जो रनटाइम पर रीयलबेसिक कोड निष्पादित कर सकता है। आरबीस्क्रिप्ट सैंडबॉक्स है— उसमें एकमात्र मुख्य भाषा विशेषताएँ हैं, और इसे उन चीज़ों तक पहुँचने की अनुमति देनी होगी जो इसे रखना चाहते हैं। वैकल्पिक रूप से संदर्भ संपत्ति के लिए एक वस्तु आवंटित कर सकते हैं। यह आरबीस्क्रिप्ट में कोड को फ़ंक्शन कॉल करने और संदर्भ वस्तु के गुणों का उपयोग करने की अनुमति देता है। चूंकि, यह अभी भी एकमात्र सबसे बुनियादी प्रकारों को समझने तक ही सीमित है, इसलिए यदि आपके पास कोई ऐसा फ़ंक्शन है जो एक शब्दकोश या माइ स्पिफी ऑब्जेक्ट देता है, तो आरबी स्क्रिप्ट इसका उपयोग करने में असमर्थ होगा। प्रिंट और इनपुट इवेंट्स के माध्यम से अपने आरबी स्क्रिप्ट के साथ भी संवाद कर सकते हैं।
वीबीस्क्रिप्ट
Microsoft की VBScript, जो एक व्याख्या की गई भाषा है, के दो निर्माण हैं। Eval
एक फ़ंक्शन मूल्यांकनकर्ता है जो उपयोगकर्ता परिभाषित कार्यों के लिए कॉल शामिल कर सकता है। (इन कार्यों के दुष्प्रभाव हो सकते हैं जैसे कि वैश्विक चर के मूल्यों को बदलना।) Execute
एक या एक से अधिक कोलन-पृथक कथन निष्पादित करता है, जो वैश्विक स्थिति को बदल सकता है।
वीबीस्क्रिप्ट और जेस्क्रिप्ट दोनों eval
माइक्रोसॉफ्ट स्क्रिप्ट कंट्रोल नामक ActiveX नियंत्रण के माध्यम से संकलित विंडोज़ अनुप्रयोगों के डेवलपर्स के लिए उपलब्ध हैं (उन भाषाओं में लिखे गए हैं जो इवल का समर्थन नहीं करते हैं), जिनकी इवल विधि को एप्लिकेशन कोड द्वारा कॉल किया जा सकता है। यूज़र-डिफ़ाइंड फ़ंक्शंस की कॉलिंग का समर्थन करने के लिए, पहले एडकोड विधि के साथ नियंत्रण को इनिशियलाइज़ करना चाहिए, जो एक स्ट्रिंग (या एक स्ट्रिंग संसाधन) को लोड करता है, जिसमें किसी की पसंद की भाषा में परिभाषित यूज़र-डिफ़ाइंड फ़ंक्शंस की लाइब्रेरी होती है, इवल को कॉल करने से पहले .
अनुप्रयोगों के लिए विजुअल बेसिक
Microsoft Office की प्रोग्रामिंग भाषा, Visual Basic for Applications (VBA), एक वर्चुअल मशीन भाषा है जहाँ रनटाइम वातावरण बाइट कोड | पी-कोड को संकलित और चलाता है। इवल का इसका स्वाद केवल अभिव्यक्ति मूल्यांकन का समर्थन करता है, जहां अभिव्यक्ति में उपयोगकर्ता-परिभाषित फ़ंक्शन और ऑब्जेक्ट शामिल हो सकते हैं (लेकिन उपयोगकर्ता-परिभाषित चर नाम नहीं)। ध्यान दें, मूल्यांकनकर्ता VBS से अलग है, और कुछ उपयोगकर्ता परिभाषित कार्यों का आह्वान VBA में VBScript में समान कोड की तुलना में अलग तरह से काम कर सकता है।
स्मॉलटॉक
चूंकि स्मॉलटाक के कंपाइलर वर्ग मानक क्लास लाइब्रेरी का हिस्सा हैं और आमतौर पर रन टाइम पर मौजूद होते हैं, इन्हें कोड स्ट्रिंग का मूल्यांकन करने के लिए इस्तेमाल किया जा सकता है। <वाक्यविन्यास लैंग = स्मॉलटॉक> संकलक मूल्यांकन:'1 + 2' </वाक्यविन्यास हाइलाइट> क्योंकि क्लास और मेथड की परिभाषाएँ मैसेज-सेंड्स (क्लास ऑब्जेक्ट्स) द्वारा भी लागू की जाती हैं, यहाँ तक कि कोड परिवर्तन भी संभव हैं: <वाक्यविन्यास लैंग = स्मॉलटॉक> कंपाइलर मूल्यांकन: 'ऑब्जेक्ट सबक्लास: # फू' </वाक्यविन्यास हाइलाइट>
टीसीएल
टीसीएल प्रोग्रामिंग भाषा में एक कमांड कहा जाता है eval
, जो एक तर्क के रूप में प्रदान किए गए स्रोत कोड को निष्पादित करता है। Tcl स्ट्रिंग्स के रूप में सभी स्रोत कोड का प्रतिनिधित्व करता है, जिसमें घुंघराले ब्रेसिज़ उद्धरण चिह्नों के रूप में कार्य करते हैं, ताकि तर्क को eval
किसी अन्य स्रोत कोड के समान स्वरूपण हो सकता है।
<वाक्यविन्यास प्रकाश लैंग = टीसीएल> सेट फू { जबकि {[incr i]<10} { पुट $i का वर्ग है [expr $i*$i] } } eval $foo </वाक्यविन्यास हाइलाइट>
बीएस
bs (प्रोग्रामिंग लैंग्वेज) में एक है eval
फ़ंक्शन जो एक स्ट्रिंग तर्क लेता है। फ़ंक्शन अभिव्यक्ति मूल्यांकनकर्ता और कथन निष्पादक दोनों है। बाद की भूमिका में, इसका उपयोग त्रुटि से निपटने के लिए भी किया जा सकता है। निम्नलिखित उदाहरण और पाठ से हैं bs
मैन पेज जैसा कि UNIX सिस्टम V रिलीज़ 3.2 प्रोग्रामर मैनुअल में दिखाई देता है।[6]
The string argument is evaluated as a
bs
expression. The function is handy for converting numeric strings to numeric internal form. Theeval
can also be used as a crude form of indirection, as in the following (Note that, inbs
,_
(underscore) is the concatenation operator.):name = "xyz" eval("++" _ name)which increments the variable
xyz
.In addition,
eval
preceded by the interrogation operator,?
, permits the user to controlbs
error conditions. For example:?eval("open(\"X\", \"XXX\", \"r\")")returns the value zero if there is no file named "XXX" (instead of halting the user's program).
The following executes a
goto
to the labelL
(if it exists):label = "L" if !(?eval("goto " _ label)) puterr = "no label"
कमांड-लाइन दुभाषिया
यूनिक्स गोले
मूल श (बॉर्न शेल) सहित सभी यूनिक्स खोल में eval कमांड मौजूद है। यह रिक्त स्थान के साथ सभी तर्कों को जोड़ता है, फिर परिणाम को फिर से पार्स करता है और परिणाम को कमांड के रूप में निष्पादित करता है। – FreeBSD General Commands Manual
विंडोज पॉवरशेल
Windows PowerShell में, Invoke-Expression
Cmdlet जावास्क्रिप्ट, PHP और पायथन जैसी प्रोग्रामिंग भाषाओं में eval फ़ंक्शन के समान उद्देश्य को पूरा करता है।
Cmdlet किसी भी Windows PowerShell अभिव्यक्ति को चलाता है जो स्ट्रिंग के रूप में कमांड पैरामीटर के रूप में प्रदान किया जाता है और निर्दिष्ट अभिव्यक्ति के परिणाम को आउटपुट करता है।
आमतौर पर, Cmdlet का आउटपुट उसी प्रकार का होता है, जैसा एक्सप्रेशन को निष्पादित करने के परिणाम के रूप में होता है। हालाँकि, यदि परिणाम एक खाली सरणी है, तो यह आउटपुट करता है $null
. यदि परिणाम एकल-तत्व सरणी है, तो यह उस एकल तत्व को आउटपुट करता है। जावास्क्रिप्ट के समान, Windows PowerShell अंतिम अर्धविराम को छोड़े जाने की अनुमति देता है।
अभिव्यक्ति मूल्यांकनकर्ता के रूप में उदाहरण: <वाक्यविन्यास प्रकाश लैंग = ps1con> पीएस> $ फू = 2 पीएस> इनवोक-एक्सप्रेशन '$ फू + 2' </वाक्यविन्यास हाइलाइट> एक बयान निष्पादक के रूप में उदाहरण: <वाक्यविन्यास प्रकाश लैंग = ps1con> पीएस> $ फू = 2 पीएस> इनवोक-एक्सप्रेशन '$ फू + = 2; $फू' </वाक्यविन्यास हाइलाइट>
माइक्रोकोड
1966 में आईबीएम संवादी प्रोग्रामिंग प्रणाली (सीपीएस) ने एक माइक्रोकोड फ़ंक्शन पेश किया EVAL
एक संशोधित पोलिश संकेतन में लिखी गई अभिव्यक्तियों का व्याख्यात्मक मूल्यांकन करने के लिए | IBM सिस्टम/360 मॉडल 50 पर पोलिश-स्ट्रिंग संकेतन।[7] असाइनमेंट (कंप्यूटर विज्ञान) स्टेटमेंट की व्याख्या करने वाले प्रोग्राम की तुलना में इस फ़ंक्शन को माइक्रोकोडिंग पांच गुना तेजी से किया गया था।[8]
सिद्धांत
सैद्धांतिक कंप्यूटर विज्ञान में, आमतौर पर eval और apply के बीच सावधानीपूर्वक भेद किया जाता है। एवल को एक उद्धृत स्ट्रिंग को एक कॉल करने योग्य फ़ंक्शन और उसके तर्कों में परिवर्तित करने का चरण समझा जाता है, जबकि लागू तर्कों के दिए गए सेट के साथ फ़ंक्शन की वास्तविक कॉल है। भेद विशेष रूप से कार्यात्मक भाषाओं में ध्यान देने योग्य है, और लैम्ब्डा कैलकुस पर आधारित भाषाएं, जैसे कि एलआईएसपी और योजना (प्रोग्रामिंग भाषा)। इस प्रकार, उदाहरण के लिए, योजना में, के बीच का अंतर है
(eval '(f x) )
जहां फॉर्म (एफ एक्स) का मूल्यांकन किया जाना है, और
(लागू करें f (सूची x))
जहां फ़ंक्शन f को तर्क x के साथ कॉल किया जाना है।
मूल्यांकन और लागू, मूल्यांकन-लागू चक्र के दो अन्योन्याश्रित घटक हैं, जो कंप्यूटर प्रोग्राम की संरचना और व्याख्या में वर्णित लिस्प के मूल्यांकन का सार है।[9] श्रेणी सिद्धांत में, बंद मोनॉइडल श्रेणी को परिभाषित करने के लिए eval morphism का उपयोग किया जाता है। इस प्रकार, उदाहरण के लिए, आकारिकी के रूप में लिए गए कार्यों के साथ सेट की श्रेणी, और कार्टेशियन उत्पाद को उत्पाद (श्रेणी सिद्धांत) के रूप में लिया जाता है, एक कार्टेशियन बंद श्रेणी बनाता है। यहां, eval (या, ठीक से बोलना, लागू करना) अपने दाहिने आसन्न के साथ, करी, सरल रूप से टाइप किए गए लैम्ब्डा कैलकुलस का निर्माण करते हैं, जिसे कार्टेशियन बंद श्रेणियों के morphisms के रूप में व्याख्या किया जा सकता है।
संदर्भ
- ↑ "Flash 8 LiveDocs". 2006-10-10. Archived from the original on 2006-10-10.
- ↑ ActionScript 3 Eval Library
- ↑ "The D.eval API". Archived from the original on 2013-03-14.
- ↑ John McCarthy, "History of Lisp - The Implementation of Lisp"
- ↑ "PHP: eval - Manual". PHP.net. Retrieved 2015-09-10.
- ↑ "Volume 1 Commands and Utilities". UNIX Programmer's Manual (PDF). AT&T. 1986. p. 41.
- ↑ Allen-Babcock. "Draft EVAL Microprogram" (PDF). Bitsavers.org. Retrieved Jan 17, 2016.
- ↑ Rochester, Nathaniel. "Conversational Programming System Progress Report" (PDF). Bitsavers.org. Retrieved Jan 17, 2016.
- ↑ The Metacircular Evaluator (SICP Section 4.1)