2010-05-30 12 views
10

पर मैंने हाल ही में अपने सी ++ ऐप (क्यूटी) के लिए एक सरल और छोटा एम्बेडेड HTTP सर्वर लिखा और मैंने Ry's http-parser और से थोड़ा सा खेला। यह लड़का पागल है।पोर्टिंग डीजेगो के टेम्पलेट्स इंजन को सी

तो मैंने खुद से कहा: "अरे! डीजेंगो टेम्पलेट इंजन को सी क्यों बंद नहीं करें?" वह कमाल होगा! मुझे पता है, यह एक आसान काम नहीं होगा (बिलकुल नहीं, मुझे पता है) लेकिन मैं वास्तव में इसे लागू करना पसंद करूंगा। तो मैं यहां प्रेरणा, विचारों, विचारों के लिए आया था ...

मुझे वास्तव में विषय, विचारों, जो पहले से किया गया है, मुझे कौन सी बड़ी समस्याएं आती हैं (और उन्हें हल करने के तरीके) पर कुछ पॉइंटर्स रखना पसंद है) - पहिया को फिर से कैसे नहीं बदला जाए ... वैसे भी, आपको विचार मिला :)

धन्यवाद दस लाख बार!

पीएस सरल कोड स्निपेट, और टूल्स और libs के लिंक बहुत आपका स्वागत है!

पी.पी.एस. मुझे पहले से ही grantlee पता है, मैंने अपने स्रोतों पर एक नज़र डाली। खैर ... वह सी ++ है और यह क्यूटी के लिए विशिष्ट है।

+0

मुझे यह http://github.com/panyam/mango शायद मिला, इससे मदद मिलेगी? मुझे अभी भी पता नहीं है कि यह सब क्या है लेकिन मैं स्रोतों को पढ़ रहा हूं – sandra

+1

यह django टेम्पलेट्स को erlang करने के बारे में है, लेकिन कम से कम यह इस विशेष परियोजना को पोर्ट करने के बारे में है: [Erlang के लिए एक टेम्पलेट कंपाइलर लिखें] (http: // www .evanmiller.org/write-a-template-compiler-for-erlang.html) – miku

+0

धन्यवाद, @The MYYN! मुझे लगता है कि मुझे यह विचार मिला है, लेख वास्तव में बहुत अच्छा है! – sandra

उत्तर

6

हम्म, मुझे नहीं लगता कि डीजेंगो टेम्पलेट्स कोड में कुछ भी सी में लागू करना मुश्किल होगा। टेम्पलेट सिंटैक्स थोड़ा पाइथनिक दिखता है, लेकिन यह वास्तव में अजगर नहीं है; उन्होंने इसके लिए अपने स्वयं के पार्सर को लागू किया। तो देखने के लिए पहली जगह django template implementation in python होगी। यह वास्तव में बहुत अधिक कोड नहीं है, और यह समझने में काफी आसान है।

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

सबसे पहले आप शायद एक वाक्यविन्यास पेड़ उत्पन्न करना चाहते हैं। Django टेम्पलेट्स का सिंटैक्स बहुत नियमित है ... प्रत्येक {% whatever %} ब्लॉक में {% endwhatever %} ब्लॉक है, इसलिए आपका पार्सर वास्तव में यह जानने के बिना पेड़ उत्पन्न कर सकता है कि सभी whatever कीवर्ड क्या हो सकते हैं।

फिर, आप प्रत्येक ब्लॉक के लिए "कोड जेन" चरण कर, पेड़ से घूमते हैं। उदाहरण के लिए, यदि आप पैरामीटर के मान की जांच करके कोडिंग {% if %} और इसकी सामग्री या कुछ भी प्रिंट कर रहे हैं, तो यह निर्भर करता है कि क्या खंड सही है या गलत है। और साथ ही लूप, फ़िल्टर, ब्लॉक इत्यादि के साथ

आपको याद है, यह सब बहुत काम है ... क्या आपने अपने सी प्रोग्राम में सिर्फ एक अजगर दुभाषिया एम्बेड किया है? (गंभीरता से! ऐसा करना मुश्किल नहीं है, क्योंकि पाइथन दुभाषिया खुला स्रोत है।)

+0

धन्यवाद, अपहरणकर्ता! वास्तव में मैं अभी क्या कर रहा हूं। पहले टोकननाइज़र लिखना और फिर प्रत्येक टोकन के लिए एक पार्सर। और पूरी चीज इकट्ठा करो। यह आसान नहीं होगा और मुझे विभिन्न प्रकार के चर के संदर्भों को घोषित करने और उपयोग करने का एक अच्छा तरीका खोजना होगा। लेकिन वैसे भी यह मजेदार है :) – sandra

0

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

1

यदि आप या किसी और को Django टेम्पलेट इंजन के सी ++ कार्यान्वयन में रुचि है, तो मैं इस पर काम कर रहा हूं: http://git.fawek.net/Cjango/। हालांकि यह अभी तक तैयार नहीं है।

+0

यह कस्टम टेम्पलेट टैग और फ़िल्टर कैसे संभालता है? –

+0

टैगनोड फैक्टरी और फ़िल्टर फैक्टरी दो इंटरफेस हैं जो ग्राहक पक्ष कस्टम कार्यक्षमता को इंजेक्ट करने के लिए उपयोग करेंगे। पूर्व फ़ैक्टरी फ़ंक्शन (प्रत्येक टैग नाम के लिए) लेता है जो टेम्पलेट पेड़ में हर बार टैगनोड सबक्लास की ऑब्जेक्ट आवंटित करता है। उत्तरार्द्ध के साथ आप किसी दिए गए फ़िल्टर नाम पर फ़िल्टर ऑब्जेक्ट असाइन करते हैं। –

1

संदर्भ के लिए, onion में एक Django-link टेम्पलेट सिस्टम है।

यह टेम्पलेट को सी में संकलित करता है, और यहां तक ​​कि उन पर gdb डीबगिंग करने की अनुमति देता है।

उत्पन्न कोड काफी प्याज उन्मुख है, लेकिन कुछ काम के साथ यह अधिक सामान्य हो सकता है।

4

यदि यह उपयोगी है, तो Synth ढांचे में सी ++ में डीजेगो के टेम्पलेट सिस्टम का एक पूर्ण स्टैंड-अलोन पुन: कार्यान्वयन है। इसमें सभी built-in tags and filters के साथ-साथ कस्टम वाले के लिए समर्थन भी शामिल है; लाइब्रेरी के अलावा, पाइथन बाइंडिंग भी हैं, मूल कमांड लाइन उपकरण के अलावा, जो जेएसओएन, आईएनआई या एक्सएमएल जैसे मनमाने ढंग से स्रोतों से डेटा में पढ़ सकते हैं।

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