2010-01-29 15 views
7

मैं अब्दुलजाज़ घुलौम द्वारा Compilers: Backend to Frontend (and Back to Front Again) के माध्यम से अपना रास्ता काम करने की कोशिश कर रहा हूं। ऐसा लगता है कि पूर्ण पाठ्यक्रम/संगोष्ठी में कौन सा उम्मीद करेगा, इसलिए मैं खुद टुकड़ों को भरने की कोशिश कर रहा हूं।घुलौम किस योजना का उपयोग करता है?

उदाहरण के लिए, मैं DrScheme की R5RS स्वाद में अपने परीक्षण ढांचे का उपयोग करने की कोशिश की है, लेकिन यह मैक्रो सामान की तरह प्रतीत नहीं होता:

src/ghuloum/tests/tests-driver.scm:6:4: read: illegal use of open square bracket 

मैं पर अपने परिचय कागज पढ़ा है पाठ्यक्रम, An Incremental Approach to Compiler Construction, जो उपयोग की जाने वाली तकनीकों का एक शानदार अवलोकन देता है, और सुविधाओं के साथ कुछ योजनाओं का उल्लेख करता है जो शायद 'अतिरिक्त क्रेडिट' के लिए लागू करना चाहते हैं, लेकिन वह पाठ्यक्रम में उपयोग की जाने वाली योजना का उल्लेख नहीं करता है।

अद्यतन

मैं अभी भी मूल प्रश्न में खुदाई कर रहा हूँ (जांच कर नीचे एली ने सुझाव दिया इस तरह के पेटिट योजना के रूप में विकल्प), लेकिन Gholoum के काम से संबंधित एक दिलचस्प लिंक मिल गया है, तो मैं इसे यहाँ शामिल कर रहा हूँ।

[Ikarus योजना] (http://en.wikipedia.org/wiki/Ikarus_(Scheme_implementation)) Ghuloum के विचारों की वास्तविक कार्यान्वयन है, और अपनी पीएचडी के काम के लिए किया गया हिस्सा प्रतीत होता है। यह R6RS के पहले कार्यान्वयन में से एक माना जाता है। मैं स्थापित करने के लिए कोशिश कर रहा हूँ अब Ikarus, लेकिन कॉन्फ़िगर स्क्रिप्ट पहचान करने के लिए अपने सिस्टम के libgmp.so की स्थापित करते हैं, तो मेरी समस्या अभी भी अनसुलझे हैं नहीं चाहता है।

उदाहरण

निम्न उदाहरण PLT 2.4 में काम करने के लिए लगता है .2 सुंदर बिग

01 का उपयोग कर डीआरईडी में चल रहा है
(require lang/plt-pretty-big) 

(load "/Users/donaldwakefield/ghuloum/tests/tests-driver.scm") 
(load "/Users/donaldwakefield/ghuloum/tests/tests-1.1-req.scm") 
(define (emit-program x) 
    (unless (integer? x) (error "---")) 
    (emit " .text") 
    (emit " .globl scheme_entry") 
    (emit " .type scheme_entry, @function") 
    (emit "scheme_entry:") 
    (emit " movl $~s, %eax" x) 
    (emit " ret") 
) 

एक विफलता के कारण को बदलने के लिए #lang योजना परिणाम त्रुटि संदेश

foo.scm:7:3: expand: unbound identifier in module in: emit 

जो प्रतीत होता है के साथ निर्देश की आवश्यकता का प्रयास परीक्षण-driver.scm लोड करने के लिए। #lang r6rs का उपयोग करने का प्रयास आरईपीएल को अक्षम करता है, जिसे मैं वास्तव में उपयोग करना चाहता हूं, इसलिए मैं सुंदर बिग के साथ जारी रखने की कोशिश करने जा रहा हूं।

मेरी रोगी सहायता के लिए एली बरज़ील के लिए धन्यवाद।

+0

इसके अलावा, चेज़ योजना की नई रिलीज चीजें तोड़ सकती हैं, इसलिए यदि आप चेज़ योजना का उपयोग करते हैं, तो मैक्रोज़ और मॉड्यूल से जुड़ी पुरानी चीजें काम नहीं कर सकती हैं। – erjiang

उत्तर

3

वह जिस भाषा का उपयोग करती है वह चेज़ योजना की सबसे अधिक संभावना है। भले ही, पीएलटी में आर 5 आरएस भाषा आर 5 आरएस का एक बहुत सख्त संस्करण है, जिसमें स्क्वायर ब्रैकेट त्रुटियों को फेंकने जैसे एक्सटेंशन हैं - और आप डिफ़ॉल्ट #lang scheme भाषा का उपयोग करके अधिक लाभ प्राप्त कर सकते हैं। (या, यदि यह विफल हो जाता है, तो कोशिश करें और देखें कि क्या आप पेटिट के साथ काम कर सकते हैं - चेज़ का मुफ्त संस्करण।)

+0

[] सख्त R5RS में वास्तव में अवैध हैं? मैंने सोचा कि वे सिर्फ समान रूप से व्यवहार करने के रूप में निर्दिष्ट थे()। (बाद में) यूप, सेक्शन 7.2 का कोई उल्लेख नहीं है [], बस()।तो मुझे लगता है कि वे अवैध हैं। –

+0

हां, वे हमेशा "भविष्य के विस्तार" के लिए आरक्षित थे, और आर 6 आरएस में "()" के समान बने। किसी भी मामले में, कई योजनाओं में ऐसा विस्तार होता है, लेकिन पीएलटी आर 5 आरएस भाषा के लिए लोकप्रिय अनुरोध इसे बहुत सख्त बनाना था। –

+0

एली, सिफारिश के लिए धन्यवाद। मैं पेटीट योजना की तलाश कर रहा हूं, हालांकि मेरे लिनक्स बॉक्स के साथ लाइब्रेरी समस्याएं हैं। शायद मेरे घर पर मेरे मैक के साथ बेहतर भाग्य होगा। क्या किसी ने सफलतापूर्वक इकरस स्थापित किया है? मुझे लगता है, श्री घुलौम के साथ, यह सहन करता है []। –

1

आप उबंटू x86 पर इसे here चलाने के लिए सेटअप निर्देश देख सकते हैं।

पेटीट योजना के लिए स्थापना डाउनलोड here है।

संबंधित मुद्दे