2010-04-15 22 views
8

मेरी प्रोग्रामिंग भाषा के लिए दुभाषिया को कार्यान्वित करते समय मैंने पहली बार एक साधारण कंसोल विंडो के बारे में सोचा जो उपयोगकर्ता को कुछ कोड दर्ज करने की अनुमति देता है जिसे तब एक शैल के रूप में एक स्टैंडअलोन प्रोग्राम के रूप में निष्पादित किया जाता है।रूबी और पायथन अपने इंटरैक्टिव कंसोल कैसे कार्यान्वित करते हैं?

लेकिन गंभीर समस्याएं हैं: यदि कोड में प्रवेश करने वाली प्रत्येक पंक्ति को स्टैंडअलोन प्रोग्राम के रूप में संभाला जाता है, तो उसे टोकननाइज़र और पार्सर से गुज़रना पड़ता है और फिर केवल दुभाषिया द्वारा निष्पादित किया जाता है - तब कार्यों के बारे में क्या?

  • पाइथन/रूबी इंटरैक्टिव कंसोल (आईडीएलई, आईआरबी) कोड "शेयर" कैसे कर सकता है? कोड कैसे संभाला जाता है?

उदाहरण:

>> def x: 
>> print("Blah") 
>> 
>> x() 

कहाँ समारोह संग्रहीत किया जाता है तो यह किसी भी समय फिर कहा जा सकता है?

इंटरैक्टिव कंसोल कैसे सब कुछ बार-बार सब कुछ निष्पादित किए बिना स्पष्ट रूप से एक प्रोग्राम के रूप में दर्ज किया जा सकता है?

उत्तर

5

पायथन के लिए, एक अभिव्यक्ति तब तक पूर्ण नहीं होती है जब तक कि सभी कोष्ठक, ब्रैकेट इत्यादि मेल नहीं खाते। यह पता लगाने के लिए काफी आसान है। एक फ़ंक्शन/क्लास परिभाषा पूर्ण नहीं होती है जब तक कि पूरी तरह से रिक्त रेखा दर्ज नहीं की जाती है। संकलक तब दर्ज अभिव्यक्ति या परिभाषा को संकलित करता है, और इसे चलाता है।

सामान्य कार्य, वर्ग, मॉड्यूल इत्यादि की तरह, आरईपीएल का अपना स्थानीय दायरा है। यह ऐसा दायरा है जिसका उपयोग आरईपीएल में दर्ज चर और परिभाषाओं के लिए किया जाता है।

3

आप अजगर इंटरैक्टिव सांत्वना के बारे में अधिक सीख सकते हैं कोड मॉड्यूल के लिए प्रलेखन पढ़कर:

कोड मॉड्यूल-पढ़ने के लिए eval प्रिंट अजगर में छोरों को लागू करने की सुविधा प्रदान करता है। दो वर्ग और सुविधा कार्यों को शामिल किया गया है जिनका उपयोग उन अनुप्रयोगों को बनाने के लिए किया जा सकता है जो एक इंटरैक्टिव दुभाषिया संकेत प्रदान करते हैं। जो है, पदव्याख्यायित्र, इनपुट से टोकन लेने (एक स्ट्रिंग, प्रतीक, ऑपरेटर, आदि) रहता है -

http://docs.python.org/library/code.html

3

इन भाषाओं में से अधिकांश एक पार्सर जो "टोकन धारा" का एक प्रकार है का उपयोग जब तक कि इसकी पूर्ण अभिव्यक्ति न हो, तब तक स्ट्रीम करें, फिर यह उस पार्स किए गए अभिव्यक्ति को लौटाती है जहां इसे बाइटकोड में संकलित किया जा सकता है या अन्यथा निष्पादित किया जा सकता है। एक आरईपीएल पाश उस संरचना को संभालने के लिए अपेक्षाकृत सरल है, क्योंकि पार्सर मूल रूप से अधिक इनपुट मांगता है, और आप उपयोगकर्ता को एक संकेत देते हैं और उपयोगकर्ता अधिक इनपुट दर्ज करते हैं। आपको पाठक से पाठक को थोड़ा सा संचार की आवश्यकता हो सकती है ताकि इसे निरंतरता संकेतों जैसे चीजें प्रस्तुत कर सकें।

पायथन और रूबी दोनों निष्पादन बयान तुरंत, क्रम में (एक समारोह घोषणा एक बयान है)। तो आप एक स्रोत फ़ाइल में बड़े पैमाने पर उसी प्रभाव के लिए दुभाषिया पर कोड कथन-द्वारा-कथन निष्पादित कर सकते हैं।