एक एएसटी जो स्रोत भाषा के सभी अर्थपूर्ण विवरणों को मॉडल करता है, आपको बस इतना ही चाहिए। परिभाषा के अनुसार, यदि यह सैमसंगिक्स को सही तरीके से मॉडल करता है, और आपके लैंगेज में एक टर्नरी ऑपरेटर शामिल होता है, तो यह उस विशिष्ट क्रम का मॉडल करेगा जिसमें ऑपरेटरों को लागू किया जाता है (उदाहरण के लिए, पूर्ववर्ती मॉड्यूलो के परिणाम जैसे कि कोष्ठक ओवरराइड) सही ढंग से भी।
तो आपकी समस्या एएसटी में नहीं है। यह समान (टर्नरी) ऑपरेटरों का उपयोग करके दूसरी भाषा में पैदा हो रहा है जिसका प्राथमिकता अलग है।
कोड जनरेशन में यह एक पुरानी समस्या है: लक्ष्य के ऑपरेटर स्रोत के ऑपरेटरों से काफी मेल नहीं खाते हैं, और इसलिए आउटपुट एक-एक नहीं हो सकता है। आपके मामले में, आप मूल शब्दावली क्या हासिल करने के लिए आदेश को नियंत्रित करने के लिए उनके चारों ओर कोष्ठक के साथ PHP टर्नरी ऑपरेटरों को उत्पन्न करके समस्या को हल करने में सक्षम होना चाहिए, इसलिए यह एक बड़ी समस्या नहीं है।
सामान्य रूप से, वांछित परिणाम प्राप्त करने वाले कोड के अनुक्रम उत्पन्न करना बहुत जटिल हो सकता है, और ऐसा करने के कई तरीके हैं। यही कारण है कि संकलक पुस्तकें पतली की बजाय मोटी होती हैं। ऐसा लगता है कि आप "एएसटी प्राप्त करें, एएसटी चलें, थूक कोड" पर पूरी तरह से बस गए हैं; यह लगभग एक ऑन-द-फ्लाई कोड जनरेटर है। और यदि आप परवाह नहीं है कि जेनरेट किया गया कोड विशेष रूप से अच्छा है, और लक्ष्य भाषा स्रोत भाषा के बहुत करीब है, तो यह पर्याप्त रूप से काम करता है।
यदि कोड जनरेशन समस्या अधिक जटिल होती है, तो आम तौर पर क्या होता है एएसटी का गणना गणना के डेटा प्रवाह मॉडल की मात्रा को उत्पन्न करने के लिए किया जाता है, जिसमें परिणाम उत्पन्न करने वाले ऑपरेटरों से युक्त होता है, और पिछले ऑपरेटरों से परिणाम का उपभोग होता है "ऑपरेटरों" में जो परिवर्तनीय मान और स्थिरांक प्राप्त करते हैं।फिर कोड उत्पन्न करने के लिए डेटा प्रवाह का प्रतिनिधित्व किया जाता है; इसका लाभ यह है कि आप डेटा प्रवाह प्रतिनिधित्व में एक ऑपरेटर चुन सकते हैं, लक्ष्य भाषा में मिलान कोड अनुक्रम ढूंढ सकते हैं, उत्पन्न कर सकते हैं, और फिर ऑपरेंड को कैसे एकत्र किया जाता है इसके बारे में चिंता करें। बेहतर योजनाएं उत्पाद प्रवाह सबग्राफ (समकक्ष यौगिक लक्ष्य भाषा संरचनाओं का प्रतिनिधित्व करती हैं) उत्पादित डेटा प्रवाह ग्राफ से मेल खाते हैं; यह काफी बेहतर कोड उत्पन्न कर सकता है। अक्सर, कोई भी बेहतर कोड उत्पन्न करने के लिए कच्चे कोड पीढ़ी के बाद लक्ष्य-भाषा विशिष्ट अनुकूलन लागू कर सकता है। दोनों मामलों में, आपको ऑपरेटर परिणामों के प्रबंधन के बारे में चिंता करने की ज़रूरत है; क्या उन्हें सीधे अगले लक्ष्य भाषा ऑपरेटर को खिलाया जा सकता है, या उन्हें किसी प्रकार के अस्थायी भंडारण में जाना चाहिए (मशीन कोड के लिए, यह एक और रजिस्टर या स्मृति स्थान हो सकता है)। यह सब करना आसान नहीं है; फिर, यही कारण है कि संकलक पुस्तकें पतली नहीं हैं।
इस विचार पर एक भिन्नता स्रोत-से-स्रोत प्रोग्राम रूपांतरण है। यह मानचित्र लक्ष्य कोड में "सीधे" स्रोत कोड में अंतर्निहित होते हैं, हालांकि आमतौर पर एएसटी पर परिचालन करके दृश्यों के पीछे किया जाता है क्योंकि अनपेक्षित प्रोग्रामिंग भाषा टेक्स्ट मिलान करना मुश्किल होता है। हमारे DMS Software Reengineering Toolkit इस तरह के सिस्टम का एक उदाहरण है। इस तरह के एक उपकरण के साथ, आप स्रोत भाषा में पैटर्न लिखते हैं (जो एक पार्स पेड़ के खिलाफ पूरी तरह से मेल खाते हैं), और लक्ष्य लैंगेज में प्रासंगिक पैटर्न (स्पष्ट रूप से लक्ष्य भाषा एएसटी का उत्पादन)। आप जटिल स्रोत या लक्ष्य संरचनाएं लिख सकते हैं जो उपरोक्त डेटा प्रवाह ग्राफ के प्रभाव का अधिक प्रभाव दे रहे हैं। पोस्ट-पीढ़ी के अनुकूलन में नियमों को फिर से लिखना शामिल है जो लक्षित कोड को लक्ष्य कोड में बदल देते हैं।
नीचे पंक्ति: एएसटी होने तक वास्तव में पर्याप्त नहीं है जब तक कि आपका अनुवाद वास्तव में छोटा न हो। आप इस SO उत्तर में जो चाहिए उसे इसके बारे में अधिक पढ़ सकते हैं: https://stackoverflow.com/a/3460977/120163
चेतावनी: जोरदार राय निम्नानुसार है।
पुन "ट्रांसकोडर": मैं "संकलन", "अनुवाद" या "स्रोत-से-स्रोत" कंपाइलर शब्द को अधिक पसंद करता हूं। मैं लगभग 40 वर्षों के लिए प्रोग्राम विश्लेषण और हेरफेर उपकरण बना रहा हूं। जब तक मुझे इस SO प्रश्न का सामना नहीं हुआ तब तक मैंने "ट्रांसकोडर" शब्द कभी नहीं सुना होगा: Experience migrating legacy Cobol/PL1 to Java और आईएमएचओ का वर्णन करने वाली प्रतिक्रिया एनएसीए नामक वास्तव में भयानक कोड अनुवाद योजना है। मैंने सुना है कि यह शब्द कर्षण प्राप्त कर रहा है; मुझे नहीं पता कि हमें एक और शब्द का आविष्कार क्यों करना पड़ा जब हमारे पास पर्याप्त रूप से पर्याप्त लोग हों। आम तौर पर यह एक उच्च पुजारी का आविष्कार करने वाले किसी का संकेत है; "आइए एक चमकदार नए शब्द का आविष्कार करें ताकि लोग वास्तव में समझ सकें कि हम क्या कर रहे हैं"। मुझे इस शब्द को इस तरह के वास्तव में भयानक अनुवादों में छोड़कर खुशी हुई।
मुझे नहीं पता कि आपको भाषा-से-भाषा अनुवाद के लिए ठोस वाक्यविन्यास पेड़ की आवश्यकता क्यों होगी। कंक्रीट सिंटैक्स सटीक रूप से भिन्न होने की संभावना है। आप एक और भाषा में समान * अर्थशास्त्र * के साथ एक प्रोग्राम बनाना चाहते हैं, जिसके लिए आपको मूल कार्यक्रम के केवल * अर्थशास्त्र * की आवश्यकता है, और एएसटी आपको केवल कम अव्यवस्था के साथ देता है। – delnan
आह, मैं देखता हूं कि आपका क्या मतलब है। तो जब एक ठोस पेड़ का उपयोग किया जाएगा और एक अमूर्त पेड़ से अधिक उपयुक्त माना जाएगा, और एक ठोस पेड़ की प्राथमिकता के बारे में देखभाल करता है? – Luke