2009-03-21 17 views
7

मैंने एक कंपाइलर बनाया है जो एक मध्यवर्ती कोड उत्पन्न करता है। मेरे पास मेरे प्रोजेक्ट के लिए बैकएंड लिखने का समय नहीं है।एक बैकएंड कंपाइलर की आवश्यकता है

क्या कोई सॉफ्टवेयर है जिसका उपयोग मैं मध्यवर्ती कोड का मूल्यांकन करने के लिए कर सकता हूं? मैं इस सॉफ्टवेयर को कहां डाउनलोड कर सकता हूं?

t1 = 0.67596e-7 
    sum = t1 

    t1 = 2 
    t2 = 3 
    t3 = t2 + t1 
    i = t3 

L0: 
    t1 = sum 
    t2 = 20 
t3 = compare(t1 <= t2) 
    t4 = sum 
    t5 = 12 
t6 = compare(t4 ~= t5) 
t7 = t3 | t6 
    t8 = sum 
    t9 = 20 
t10 = compare(t8 > t9) 
t11 = t7 & t10 
if t11 true then goto L1 else goto L2 
L1: 
    t1 = 2 
    t2 = sum 
    t3 = t2 + t1 
    sum = t3 

    t1 = 1 
    t2 = i 
    t3 = t2 + t1 
    i = t3 
    goto L0 
L2: 

पढ़ने के लिए धन्यवाद:

उत्पादन कुछ इस तरह लग रहा है।

+0

सटीक डुप्लिकेट नहीं है, लेकिन http://stackoverflow.com/questions/446883/best-compiler-destination/ के बहुत करीब है –

उत्तर

6

आपका उत्सर्जित कोड सी के बहुत करीब दिखता है - आपके कंपाइलर को सी को उत्सर्जित नहीं किया गया है और बैकएंड के रूप में एक सी कंपाइलर का उपयोग करें - यही कारण है कि मूल सी ++ फ्रंटफ्रंट कंपाइलर काम करता है।

11

llvm compiler infrastructure project पर एक नज़र डालें। इसका उपयोग वास्तविक दुनिया की परियोजनाओं में किया जाता है। एलएलवीएम एक निम्न स्तर की वर्चुअल मशीन है, जो कोड बनाने के लिए आसान है और देशी कोड में अनुवाद करना आसान है।

2

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

आईएल कोड उत्पन्न करने और .NET रनटाइम का उपयोग करने के लिए एक और थोड़ा निम्न स्तर विकल्प होगा। यदि कंपाइलर .NET में लिखा गया है तो आप एक .NET असेंबली उत्पन्न करने के लिए प्रतिबिंब। नाम नामस्थान का उपयोग कर सकते हैं जिसे किसी भी .NET वातावरण में चलाया जा सकता है।

2

आपके पास एक कंपाइलर स्टैक चुनने और उस स्टैक द्वारा समर्थित इंटरमीडिएट कोड का उपयोग करने के लिए बेहतर भाग्य हो सकता है। उदाहरण के लिए, जीसीसी RTL का उपयोग करता है, जीसीसी द्वारा समर्थित सभी भाषाओं के लिए स्थानांतरण भाषा को एक आम संप्रदाय के रूप में पंजीकृत करें। मुझे संदेह है कि नेट में ऐसा कुछ है जो आयरनपीथन जैसी चीजों के लिए उपयोग किया जाता है।

यदि आप कोड का मूल्यांकन करने के लिए वर्चुअल मशीन की आपूर्ति करने वाले किसी चीज़ का उपयोग करना चाहते हैं, तो SPIM MIPS vm मोटोरोला 68000 आर्किटेक्चर का समर्थन करता है और साथ काम करना वास्तव में आसान है।

1

NekoVM आपके जैसा उच्च स्तरीय आईएल स्वीकार करने के लिए डिज़ाइन किया गया है और फिर इसे चलाएं। सी का उपयोग करने के लिए नील बटरवर्थ का सुझाव भी एक अच्छा विकल्प है।

1

यदि आप JVM पर निर्भरता बर्दाश्त कर सकते हैं, तो ASM का उपयोग करके बाइट-कोड उत्पन्न करना बहुत आसान है।

यदि आप नहीं कर सकते हैं, तो gnu lightning ऑन-द-फ्लाई कोड जनरेशन (एलएलवीएम से छोटे और सरल, लेकिन ऑप्टिमाइज़ेशन के बिना) के लिए उपयोग किया जा सकता है।

0

चूंकि आपका कोड C -ish है, तो आप C-- आज़मा सकते हैं। यह C संकलक बैकएंड के लिए भाषा की तरह है। आईआईआरसी, इसका उपयोग प्रमुख हास्केल कंपाइलरों में से एक द्वारा किया जाता है।

13

कोड पीढ़ी अपने व्यवसाय :-) कुछ ही विकल्प पर

टिप्पणियाँ है:

  • CLR:

    • प्रो: औद्योगिक समर्थन
    • कोन: आप खरीद करने के लिए है अपने प्रकार की प्रणाली में काफी पूरी तरह से; क्या आप प्रकार के साथ क्या करना चाहते हैं पर निर्भर करता है, यह कोई फर्क नहीं सकता है
    • कोन: करिश्माई साथ उत्साही उपयोगकर्ता समुदाय:

      • प्रो: केवल विंडोज मंच वास्तव में प्राइम टाइम गुणवत्ता
    • LLVM है नेता

    • प्रो: कई दिलचस्प प्रदर्शन में सुधार
    • कोन: कुछ जटिल इंटरफेस
    • कोन: छेद के इतिहास इंजीनियरिंग में एस; के रूप में LLVM परिपक्व उम्मीद इंजीनियरिंग में छेद इंटरफ़ेस
  • C--

    • प्रो की जटिलता को जोड़कर खामियों को दूर किया जाना चाहिए: लक्ष्य एक वास्तविक लिखित भाषा, न कि एक एपीआई है; आप आसानी से निरीक्षण कर सकते हैं, डिबग, और संपादित करें C-- कोड
    • प्रो: डिजाइन यथोचित परिपक्व और यथोचित साफ है
    • प्रो: समर्थन करता है, सही कचरा संग्रहण
    • प्रो: सबसे उपयोगकर्ताओं की रिपोर्ट यह
    • उपयोग करने के लिए बहुत आसान है
    • कोन: बहुत छोटे विकास दल
    • कोन: एक कचरा कलेक्टर के साथ व्यापार नहीं करता है
    • कोन: परियोजना के भविष्य के जल्दी 2009 के रूप में, केवल तीन हार्डवेयर प्लेटफॉर्म (x86, पीपीसी, एआरएम)
    • कोन का समर्थन करता है अनिश्चित
    • है
  • लक्ष्य भाषा के रूप में सी

    • प्रो: सभ्य प्रदर्शन
    • कोन पाने के लिए लगभग असंभव: लग रहा है आसान
    • कोन लंबे समय में तुम पागल ड्राइव करेंगे; इस तकनीक का उपयोग करके हास्केल, एमएल, मॉडुला -3, योजना और अधिक संकलित करने की कोशिश करने वाले लोगों की लंबी लाइन से पूछें। किसी बिंदु पर इन लोगों में से प्रत्येक ने अपना मूल कोड जनरेटर छोड़ दिया और बनाया।

सारांश: सी के अलावा कुछ एक उचित विकल्प है। लचीलापन, गुणवत्ता और अपेक्षित दीर्घायु के सर्वोत्तम संयोजन के लिए, शायद मैं एलएलवीएम की सिफारिश करता हूं। लेकिन आपका उदाहरण कोड सी-- के बहुत करीब है, इसलिए यह एक फायदा हो सकता है।

पूर्ण प्रकटीकरण: मैं सी-- परियोजना से संबद्ध हूं।

3

मैं पास्कल कोड को थूकने और Free pascal का उपयोग करने की सलाह दूंगा।

यह मूल रूप से संकलित है, संकलन तेजी से चमक रहा है और आप प्लेटफार्मों का एक बड़ा लक्ष्य लक्षित कर सकते हैं।

0

अत्यधिक एलवीएम, प्लेटफ़ॉर्म-क्रॉस इंफ्रास्ट्रक्चर, समर्थन मशीन-कोड जनरेशन और ऑप्टिमाइज़ेशन के कई पास की अनुशंसा करते हैं। Llvm.org पर ट्यूटोरियल बहुत आसान है।

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