इवल
कुछ प्रोग्रामिंग भाषाओं में,eval
, अंग्रेजी विक्षनरी के लिए संक्षिप्त: मूल्यांकन, एक सबरूटीन है जो एक स्ट्रिंग का मूल्यांकन करता है जैसे कि यह भाषा में एक अभिव्यक्ति (प्रोग्रामिंग) थी, और एक वापसी मूल्य देता है; दूसरों में, यह कोड की कई पंक्तियों को निष्पादित करता है जैसे कि उन्हें लाइन सहित शामिल करने के बजाय शामिल किया गया हो eval
. को इनपुट eval
आवश्यक रूप से एक स्ट्रिंग नहीं है; यह कोड का संरचित प्रतिनिधित्व हो सकता है, जैसे कि सार वाक्य रचना का पेड़ (जैसे लिस्प (प्रोग्रामिंग भाषा) फॉर्म), या विशेष प्रकार जैसे कि code
(पायथन के रूप में)। बयान (कंप्यूटर विज्ञान) के लिए एनालॉग Exec (सिस्टम कॉल) है, जो एक स्ट्रिंग (या अन्य प्रारूप में कोड) को निष्पादित करता है जैसे कि यह एक स्टेटमेंट था; कुछ भाषाओं में, जैसे कि पायथन, दोनों मौजूद हैं, जबकि अन्य भाषाओं में दोनों में से केवल एक eval
या exec
है।
इवल और आवेदन करना मेटा-सर्कुलर मूल्यांकनकर्ताओं के उदाहरण हैं, एक भाषा के दुभाषिए जिन्हें भाषा के भीतर ही लागू किया जा सकता है।[citation needed]
सुरक्षा जोखिम
का उपयोग करते हुए eval
एक अविश्वसनीय स्रोत से डेटा के साथ सुरक्षा कमजोरियों का परिचय हो सकता है। उदाहरण के लिए, यह मानते हुए कि get_data()
फ़ंक्शन इंटरनेट से डेटा प्राप्त करता है, यह पायथन (प्रोग्रामिंग भाषा) कोड असुरक्षित है:
<वाक्यविन्यास लैंग = अजगर>
सत्र ['प्रमाणीकृत'] = झूठा
डेटा = get_data ()
फू = eval (डेटा)
</वाक्यविन्यास हाइलाइट>
स्ट्रिंग के साथ हमलावर कोड इंजेक्शन "session.update(authenticated=True)"
डेटा के रूप में, जो अद्यतन करेगा session
शब्दकोश सही होने के लिए एक प्रमाणीकृत कुंजी सेट करने के लिए। इसका उपाय करने के लिए, सभी डेटा जिसका उपयोग किया जाएगा eval
बचा जाना चाहिए, या इसे संभावित रूप से हानिकारक कार्यों तक पहुंच के बिना चलाया जाना चाहिए।
कार्यान्वयन
व्याख्या की गई भाषाओं में, eval
लगभग हमेशा सामान्य कोड के समान दुभाषिया के साथ कार्यान्वित किया जाता है। संकलित भाषाओं में, प्रोग्राम को संकलित करने के लिए उपयोग किए जाने वाले एक ही कंपाइलर का उपयोग करके प्रोग्राम में एम्बेड किया जा सकता है eval
समारोह; अलग दुभाषियों का कभी-कभी उपयोग किया जाता है, हालांकि इसके परिणामस्वरूप कोड दोहराव होता है।
प्रोग्रामिंग लैंग्वेज
ईसीएमएस्क्रिप्ट
जावास्क्रिप्ट
जावास्क्रिप्ट में, eval
एक अभिव्यक्ति मूल्यांकनकर्ता और एक बयान निष्पादक के बीच एक संकर है। यह मूल्यांकन की गई अंतिम अभिव्यक्ति का परिणाम देता है।
अभिव्यक्ति मूल्यांकनकर्ता के रूप में उदाहरण: <वाक्यविन्यास लैंग = जावास्क्रिप्ट> फू = 2; चेतावनी (eval ('फू + 2')); </वाक्यविन्यास हाइलाइट>
एक बयान निष्पादक के रूप में उदाहरण: <वाक्यविन्यास लैंग = जावास्क्रिप्ट> फू = 2; eval ('फू = फू + 2; अलर्ट (फू);'); </वाक्यविन्यास हाइलाइट>
जावास्क्रिप्ट का एक प्रयोग eval
JSON टेक्स्ट को पार्स करना है, शायद अजाक्स (प्रोग्रामिंग) फ्रेमवर्क के हिस्से के रूप में। हालाँकि, आधुनिक ब्राउज़र प्रदान करते हैं JSON.parse
इस कार्य के लिए अधिक सुरक्षित विकल्प के रूप में।
ActionScript
एक्शनस्क्रिप्ट (फ्लैश की प्रोग्रामिंग भाषा) में, eval
मनमानी अभिव्यक्तियों का मूल्यांकन करने के लिए उपयोग नहीं किया जा सकता है। फ्लैश 8 प्रलेखन के अनुसार, इसका उपयोग उन भावों तक सीमित है जो पुनर्प्राप्त करने के लिए एक चर, संपत्ति, वस्तु या मूवी क्लिप के नाम का प्रतिनिधित्व करते हैं। यह पैरामीटर या तो स्ट्रिंग या ऑब्जेक्ट इंस्टेंस का सीधा संदर्भ हो सकता है।[1]
एक्शनस्क्रिप्ट 3 eval का समर्थन नहीं करता है।
एक्शनस्क्रिप्ट 3 इवल लाइब्रेरी[2] और डी.एवल एपीआई[3] समकक्ष बनाने के लिए विकास परियोजनाएं थीं eval
ActionScript 3 में। दोनों समाप्त हो गए हैं, क्योंकि Adobe Flash Player अपने End-of-life_product|end-of-life पर पहुंच गया है।
लिस्प
लिस्प प्रोग्रामिंग भाषा एक का उपयोग करने के लिए मूल भाषा थी eval
1958 में समारोह। वास्तव में, की परिभाषा eval
कार्य ने भाषा दुभाषिया के पहले कार्यान्वयन का नेतृत्व किया।[4]
से पहले eval
फ़ंक्शन को परिभाषित किया गया था, लिस्प फ़ंक्शंस मैन्युअल रूप से सभा की भाषा स्टेटमेंट्स के लिए संकलित किए गए थे। हालांकि, एक बार eval
फ़ंक्शन को मैन्युअल रूप से संकलित किया गया था, तब इसे एक साधारण रीड-इवल-प्रिंट लूप के हिस्से के रूप में उपयोग किया गया था, जिसने पहले लिस्प दुभाषिया का आधार बनाया था।
लिस्प के बाद के संस्करण eval
फ़ंक्शन को कंपाइलर्स के रूप में भी कार्यान्वित किया गया है। eval
लिस्प में e> फ़ंक्शन एक फॉर्म के मूल्यांकन और तर्क के रूप में निष्पादित होने की अपेक्षा करता है। दिए गए फॉर्म का रिटर्न वैल्यू कॉल का रिटर्न वैल्यू होगा eval
.
यह एक उदाहरण लिस्प कोड है:
<वाक्यविन्यास प्रकाश लैंग = लिस्प>
- एक फॉर्म जो + फ़ंक्शन को 1,2 और 3 के साथ तर्क के रूप में कॉल करता है।
- यह 6 लौटाता है।
(+ 1 2 3)
- लिस्प में किसी भी रूप का मूल्यांकन किया जाना है, इसलिए
- + को कॉल किया गया था।
- हम लिस्प को मूल्यांकन करने से रोक सकते हैं
- उदाहरण के लिए ' के साथ उपसर्ग करके एक फॉर्म का
(सेट फॉर्म1 '(+ 1 2 3))
- अब फॉर्म 1 में एक फॉर्म होता है जिसका उपयोग eval द्वारा किया जा सकता है
- उदाहरण
(ईवल फॉर्म 1)
- eval मूल्यांकन (+ 1 2 3) और 6 लौटा।
</वाक्यविन्यास हाइलाइट>
लिस्प बहुत लचीला होने के लिए जाना जाता है और ऐसा ही है eval
समारोह। उदाहरण के लिए, एक स्ट्रिंग की सामग्री का मूल्यांकन करने के लिए, स्ट्रिंग को पहले लिस्प फॉर्म में बदलना होगा read-from-string
फ़ंक्शन और फिर परिणामी फॉर्म को पास करना होगा eval
:
(eval (रीड-फ्रॉम-स्ट्रिंग (format t \ Hello World!!!~%\ ) ))
भ्रम का एक प्रमुख बिंदु प्रश्न है, किस संदर्भ में फॉर्म में प्रतीकों का मूल्यांकन किया जाएगा। उपरोक्त उदाहरण में, form1
प्रतीक शामिल है +
. उदाहरण के उद्देश्य के अनुसार कार्य करने के लिए इस प्रतीक के मूल्यांकन को जोड़ने के लिए फ़ंक्शन प्राप्त करना चाहिए। इस प्रकार लिस्प की कुछ बोलियाँ एक अतिरिक्त पैरामीटर की अनुमति देती हैं eval
मूल्यांकन के संदर्भ को निर्दिष्ट करने के लिए (Python's eval
कार्य - नीचे देखें)। लिस्प की योजना (प्रोग्रामिंग भाषा) बोली में एक उदाहरण (आर5रुपये और बाद में):
<वाक्यविन्यास लैंग = योजना>
- उपरोक्त उदाहरण की तरह कुछ सरल रूप को परिभाषित करें।
(फॉर्म2 परिभाषित करें '(+ 5 2)) मूल्य: फॉर्म 2
- प्रारंभिक संदर्भ में प्रपत्र का मूल्यांकन करें।
- मूल्यांकन के लिए एक संदर्भ को स्कीम स्लैंग में पर्यावरण कहा जाता है।
(eval form2 उपयोगकर्ता-प्रारंभिक-पर्यावरण) मूल्य: 7
- प्रारंभिक वातावरण को भ्रमित करें, जिससे + होगा
- घटाव समारोह के लिए एक नाम।
(पर्यावरण-परिभाषित उपयोगकर्ता-प्रारंभिक-पर्यावरण '+ -) मूल्य: +
- फॉर्म का फिर से मूल्यांकन करें।
- ध्यान दें कि लौटाया गया मान बदल गया है।
(eval form2 उपयोगकर्ता-प्रारंभिक-पर्यावरण) मूल्य: 3 </वाक्यविन्यास हाइलाइट>
पर्ल
पर्ल में, eval
कार्य एक अभिव्यक्ति मूल्यांकनकर्ता और एक बयान निष्पादक के बीच एक संकर है। यह मूल्यांकन की गई अंतिम अभिव्यक्ति का परिणाम देता है (सभी कथन पर्ल प्रोग्रामिंग में अभिव्यक्ति हैं), और अंतिम अर्धविराम को छोड़े जाने की अनुमति देता है।
अभिव्यक्ति मूल्यांकनकर्ता के रूप में उदाहरण: <वाक्यविन्यास प्रकाश लैंग = पर्ल> $ फू = 2; प्रिंट इवल ('$ फू + 2'), \ n; </वाक्यविन्यास हाइलाइट>
एक बयान निष्पादक के रूप में उदाहरण: <वाक्यविन्यास प्रकाश लैंग = पर्ल> $ फू = 2; eval ('$ फू + = 2; प्रिंट $ फू \ n;'); </वाक्यविन्यास हाइलाइट>
पर्ल के पास भी है eval
ब्लॉक, जो इसके अपवाद हैंडलिंग तंत्र के रूप में कार्य करता है (देखें अपवाद हैंडलिंग सिंटैक्स # पर्ल)। यह उपरोक्त उपयोग से भिन्न है eval
अंदर उस कोड में तार के साथ eval
ब्लॉक की व्याख्या रन-टाइम के बजाय संकलन-समय पर की जाती है, इसलिए इसका अर्थ नहीं है eval
इस लेख में प्रयुक्त।
पीएचपी
प्रिंट पीएचपी, eval
एक स्ट्रिंग में कोड को लगभग ठीक उसी तरह निष्पादित करता है जैसे कि इसे कॉल करने के बजाय फ़ाइल में रखा गया हो eval()
. एकमात्र अपवाद यह है कि कॉल से आने वाली त्रुटियों की सूचना दी जाती है eval()
, और रिटर्न स्टेटमेंट फ़ंक्शन का परिणाम बन जाते हैं।
कुछ भाषाओं के विपरीत, तर्क eval
एक या अधिक पूर्ण कथनों की एक स्ट्रिंग होनी चाहिए, केवल भाव नहीं; हालाँकि, कोई अभिव्यक्ति का रूप प्राप्त कर सकता है eval
अभिव्यक्ति को रिटर्न स्टेटमेंट में डालकर, जो कारण बनता है eval
उस अभिव्यक्ति का परिणाम वापस करने के लिए।
कुछ भाषाओं के विपरीत, PHP's eval
एक कार्य के बजाय एक भाषा निर्माण है,[5] और इसलिए कुछ संदर्भों में उपयोग नहीं किया जा सकता है जहां कार्य हो सकते हैं, जैसे उच्च-क्रम के कार्य।
प्रतिध्वनि का उपयोग करने का उदाहरण: <वाक्यविन्यास लैंग = php> <?php $foo = हैलो, दुनिया!\n ; eval ('इको $ फू;'); ?> </वाक्यविन्यास हाइलाइट>
मान लौटाने का उदाहरण: <वाक्यविन्यास लैंग = php> <?php $foo = अलविदा, दुनिया!\n ; // PHP5 में काम नहीं करता गूंज eval ('वापसी $ फू;'); ?> </वाक्यविन्यास हाइलाइट>
लुआ
लुआ (प्रोग्रामिंग भाषा) 5.1 में, loadstring
लुआ कोड को एक अज्ञात फ़ंक्शन में संकलित करता है।
अभिव्यक्ति मूल्यांकनकर्ता के रूप में उदाहरण: <वाक्यविन्यास लैंग = लुआ> लोडस्ट्रिंग (प्रिंट ('हैलो वर्ल्ड!')) () </वाक्यविन्यास हाइलाइट>
दो चरणों में मूल्यांकन करने का उदाहरण: <वाक्यविन्यास लैंग = लुआ> ए = 1 f = लोडस्ट्रिंग (एक + 1 लौटाएं) - अभिव्यक्ति को एक अज्ञात फ़ंक्शन में संकलित करें प्रिंट (एफ ()) - निष्पादित करें (और परिणाम '2' प्रिंट करें) </वाक्यविन्यास हाइलाइट>
लुआ 5.2 बहिष्कृत करता है loadstring
मौजूदा के पक्ष में load
समारोह, जो तार स्वीकार करने के लिए संवर्धित किया गया है। इसके अलावा, यह फ़ंक्शन के वातावरण को सीधे प्रदान करने की अनुमति देता है, क्योंकि वातावरण अब बंद हो गया है (कंप्यूटर विज्ञान)।
<वाक्यविन्यास लैंग = लुआ>
प्रिंट (लोड (प्रिंट ('हैलो' .. ए), टी, {ए = वर्ल्ड!, प्रिंट = प्रिंट}) ())
</वाक्यविन्यास हाइलाइट>
परिशिष्ट भाग
पोस्टस्क्रिप्ट exec
ऑपरेटर एक ऑपरेंड लेता है - यदि यह एक साधारण शाब्दिक है तो यह इसे स्टैक पर वापस धकेलता है। यदि कोई पोस्टस्क्रिप्ट अभिव्यक्ति वाली स्ट्रिंग लेता है, तो कोई स्ट्रिंग को निष्पादन योग्य में परिवर्तित कर सकता है जिसे दुभाषिया द्वारा निष्पादित किया जा सकता है, उदाहरण के लिए:
<वाक्यविन्यास लैंग = पोस्टस्क्रिप्ट>
((हैलो वर्ल्ड) =) सीवीएक्स निष्पादन
</वाक्यविन्यास हाइलाइट> पोस्टस्क्रिप्ट अभिव्यक्ति को परिवर्तित करता है
<वाक्यविन्यास लैंग = पोस्टस्क्रिप्ट>
(हैलो वर्ल्ड) =
</वाक्यविन्यास हाइलाइट> जो स्टैक से हैलो वर्ल्ड स्ट्रिंग को पॉप करता है और इसे निष्पादन योग्य प्रकार के लिए स्क्रीन पर प्रदर्शित करता है, फिर निष्पादित किया जाता है।
पोस्टस्क्रिप्ट run
ऑपरेटर कार्यक्षमता में समान है, लेकिन इसके बजाय दुभाषिया फ़ाइल में ही पोस्टस्क्रिप्ट एक्सप्रेशन की व्याख्या करता है।
<वाक्यविन्यास लैंग = पोस्टस्क्रिप्ट> (file.ps) चलाएँ </वाक्यविन्यास हाइलाइट>
पायथन
पायथन (भाषा) में, eval
अपने सरलतम रूप में कार्य एकल अभिव्यक्ति का मूल्यांकन करता है।
eval
उदाहरण (इंटरैक्टिव खोल):
<वाक्यविन्यास लैंग = पिकॉन>
>>> एक्स = 1
>>> eval('x + 1')
2
>>> eval ('एक्स')
1
</वाक्यविन्यास हाइलाइट> eval
e> फ़ंक्शन दो वैकल्पिक तर्क लेता है, global
और locals
, जो प्रोग्रामर को अभिव्यक्ति के मूल्यांकन के लिए एक प्रतिबंधित वातावरण स्थापित करने की अनुमति देता है। exec
ई> बयान (या exec
फ़ंक्शन पायथन 3.x में) बयानों को निष्पादित करता है:
exec
उदाहरण (इंटरैक्टिव खोल):
<वाक्यविन्यास लैंग = पिकॉन>
>>> एक्स = 1
>>> वाई = 1
>>> निष्पादन एक्स + = 1; वाई - = 1
>>> एक्स
2
>>> वाई
0
</वाक्यविन्यास हाइलाइट>
कथनों/अभिव्यक्तियों के मूल्यांकन के लिए सबसे सामान्य रूप कोड ऑब्जेक्ट्स का उपयोग कर रहा है। इन्हें आह्वान करके बनाया जा सकता है compile()
फ़ंक्शन और यह बताकर कि इसे किस प्रकार के इनपुट को संकलित करना है: aexec
बयान, एeval
बयान या एsingle
कथन:
compile
उदाहरण (इंटरैक्टिव खोल):
<वाक्यविन्यास लैंग = पिकॉन>
>>> एक्स = 1
>>> वाई = 2
>>> eval (संकलन (प्रिंट 'x + y =', x + y, compile-sample.py, एकल))
एक्स + वाई = 3
</वाक्यविन्यास हाइलाइट>
डी
डी प्रोग्रामिंग एक सांख्यिकीय रूप से संकलित भाषा है और इसलिए इसमें शामिल नहीं हैeval
पारंपरिक अर्थों में कथन, लेकिन इसमें संबंधित शामिल हैmixin
कथन। अंतर यह है कि कहाँeval
एक स्ट्रिंग को रनटाइम पर कोड के रूप में व्याख्या करता है, amixin
स्ट्रिंग को सामान्य कोड की तरह स्थिर रूप से संकलित किया जाता है और इसे संकलन समय पर जाना जाना चाहिए। उदाहरण के लिए:
<वाक्यविन्यास प्रकाश लैंग = डी> आयात std.stdio;
शून्य मुख्य () {
इंट संख्या = 0; मिक्सिन (संख्या ++;); राइटलन (संख्या); // प्रिंट 1।
} </वाक्यविन्यास हाइलाइट>
उपरोक्त उदाहरण बिल्कुल उसी असेंबली भाषा निर्देशों को संकलित करेगा जैसे किnum++;
मिश्रित होने के बजाय सीधे लिखा गया था। मिक्सिन के तर्क को एक स्ट्रिंग शाब्दिक होने की आवश्यकता नहीं है, लेकिन मनमाना अभिव्यक्ति जिसके परिणामस्वरूप एक स्ट्रिंग मान होता है, जिसमें फ़ंक्शन कॉल शामिल होते हैं, जिनका संकलन समय पर मूल्यांकन किया जा सकता है।
ठंडा गलन
कोल्डफ्यूजन का evaluate
फ़ंक्शन आपको रनटाइम पर स्ट्रिंग अभिव्यक्ति का मूल्यांकन करने देता है।
<वाक्यविन्यास लैंग = सीएफएम>
<cfset x = int(1+1) >
<cfset y = मूल्यांकन (x)>
</वाक्यविन्यास हाइलाइट>
यह विशेष रूप से तब उपयोगी होता है जब आपको उस चर को प्रोग्रामेटिक रूप से चुनने की आवश्यकता होती है जिसे आप पढ़ना चाहते हैं।
रूबी
रूबी (प्रोग्रामिंग भाषा) दुभाषिया एक प्रदान करता है eval
पायथन या पर्ल के समान कार्य करता है, और एक कार्यक्षेत्र (प्रोग्रामिंग), या नाम बंधन को भी निर्दिष्ट करने की अनुमति देता है।
किसी फ़ंक्शन के बंधन को निर्दिष्ट करने के अलावा, eval
एक विशिष्ट वर्ग परिभाषा बंधन या ऑब्जेक्ट इंस्टेंस बाइंडिंग के भीतर एक अभिव्यक्ति का मूल्यांकन करने के लिए भी इस्तेमाल किया जा सकता है, जिससे कक्षाओं को स्ट्रिंग्स में निर्दिष्ट नई विधियों के साथ विस्तारित किया जा सकता है।
<वाक्यविन्यास लैंग = रूबी> ए = 1 eval('a + 1') # (2 का मूल्यांकन करता है)
- एक संदर्भ के भीतर मूल्यांकन
def get_binding (ए)
बंधन
अंत eval('a+1',get_binding(3)) # (4 का मूल्यांकन करता है, क्योंकि get_binding के संदर्भ में 'a' 3 है) </वाक्यविन्यास हाइलाइट>
<वाक्यविन्यास लैंग = रूबी> क्लास टेस्ट; अंत Test.class_eval( def hello; return 'hello';end ) # इस क्लास में 'हैलो' मेथड जोड़ें Test.new.hello # हैलो का मूल्यांकन करता है </वाक्यविन्यास हाइलाइट>
फोर्थ
फोर्थ (प्रोग्रामिंग भाषा) के अधिकांश मानक कार्यान्वयन के दो संस्करण हैं eval
: EVALUATE
और INTERPRET
.
Win32FORTH कोड उदाहरण: <वाक्यविन्यास लैंग = आगे>
एस 2 2 +। मूल्यांकन \ आउटपुट 4
</वाक्यविन्यास हाइलाइट>
फ्रेड
फ्रेमवर्क (सॉफ्टवेयर सूट) एफआरईडी (प्रोग्रामिंग लैंग्वेज) एक इंटरेक्टिव भाषा है जिसमें इवल द्वारा सभी कोड का स्वचालित रूप से मूल्यांकन किया जाता है। नीचे दिए गए उदाहरणों में स्ट्रिंग पैरामीटर ठीक वैसे ही चलेंगे जैसे किसी सूत्र में टाइप किए गए और निष्पादित किए गए हों या जब चयनित और निष्पादित किए गए हों।
एम्परसेंड & तार संयोजन संचालिका है। Eval पुनरावर्ती रूप से इसके पैरामीटर को जोड़ता है, हल करता है और मूल्यांकन करता है।
FRED (प्रोग्रामिंग लैंग्वेज) का एक आंतरिक कार्य भी है जिसका नाम है @value
जो पैरामीटर स्ट्रिंग का मूल्यांकन करता है। @value
का वैकल्पिक दूसरा सांख्यिक पैरामीटर विशेष प्रकार जैसे दिनांक, समय के लिए इनपुट प्रकार और स्वरूपों को इंगित करता है। आदि और दिए गए मान प्रारूप को निर्धारित करता है।
सुरक्षा कारणों से @value संदर्भ का दायरा वैश्विक सापेक्ष है इसलिए @local के साथ बनाए गए स्थानीय चर @value के लिए अदृश्य हैं। उन्हें केवल उसी सूत्र क्षेत्र में कोड द्वारा देखा जा सकता है। (नीचे उदाहरण देखें), उसी टोकन द्वारा @value स्कोप में बनाए गए स्थानीय संस्करण केवल @value द्वारा देखे जा सकते हैं और उसी सूत्र या किसी अन्य कोड में कोड के लिए अदृश्य हैं। (नीचे टिप्पणी (1*) देखें)
FRED कोड उदाहरण:
<वाक्यविन्यास लैंग = पाठ> @मान (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 लोड करता है </वाक्यविन्यास हाइलाइट>
बेसिक
असली बुनियादी
वास्तविक बुनियादी प्रोग्रामिंग भाषा में, RBScript नामक एक क्लास होती है जो रनटाइम पर REALबेसिक कोड को निष्पादित कर सकती है। RBScript बहुत सैंडबॉक्स है—केवल सबसे मुख्य भाषा विशेषताएँ हैं, और आपको इसे उन चीज़ों तक पहुँच की अनुमति देनी होगी जो आप इसे रखना चाहते हैं। आप वैकल्पिक रूप से संदर्भ संपत्ति के लिए एक वस्तु आवंटित कर सकते हैं। यह आरबीस्क्रिप्ट में कोड को फ़ंक्शन कॉल करने और संदर्भ वस्तु के गुणों का उपयोग करने की अनुमति देता है। हालाँकि, यह अभी भी केवल सबसे बुनियादी प्रकारों को समझने तक ही सीमित है, इसलिए यदि आपके पास कोई ऐसा फ़ंक्शन है जो एक शब्दकोश या MySpiffyObject देता है, तो RBScript इसका उपयोग करने में असमर्थ होगा। आप प्रिंट और इनपुट इवेंट्स के माध्यम से अपने आरबीस्क्रिप्ट के साथ भी संवाद कर सकते हैं।
वीबीस्क्रिप्ट
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)