मैक्रोज़ के साथ काम करते समय, मैं बिंदु तक पहुंच गया हूं (मैं इसे टालने के लिए कड़ी मेहनत कर रहा हूं) जहां मुझे एएसटी में उन नोड्स को अपडेट करने की आवश्यकता है, जो कुछ शर्त रखते हैं। मूल्य के साथएक अपरिवर्तनीय एएसटी अपडेट करने का सबसे आसान तरीका क्या है?
Literal(Constant(1))
: उदाहरण के लिए, मान लीजिए कि मैं प्रत्येक नोड अद्यतन करना चाहते हैं
Literal(Constant(2))
उन एएसटी नोड्स अभिव्यक्ति ट्री में कहीं हो सकता है, तो मैं एक तदर्थ उपयोग नहीं कर सकते पैटर्न matcher। जाहिर है, आखिरी चीज जो मैं करना चाहता हूं वह एक पूर्ण पैटर्न मैचर को कोड करना है जो सभी कंपाइलर प्राइमेटिव को कवर करने में सक्षम है। मैं API में खोज रहा हूं लेकिन मेरे पास यह प्रभाव है कि और ट्रैवर्सबल परिवार मेरी आवश्यकताओं को पूरा करने के लिए पर्याप्त नहीं हैं, क्योंकि वे पेड़ को एक रैखिक चीज़ के रूप में देखते हैं, और मैं पूरी तरह अद्यतन करना चाहता हूं नतीजतन पेड़। तो, क्या एक स्मार्ट तरीके से एक अपरिवर्तनीय अभिव्यक्ति वृक्ष को अद्यतन करना संभव है? मानक एपीआई में ऐसे 'अपडेट' ऑपरेशन क्यों मौजूद नहीं है?
प्लगइन्स के लिए एक TreeTransformer है। मुझे लगता है कि मैक्रोज़ के लिए एक समान होना चाहिए, शायद वही भी। – pedrofurla
शायद आप [zippers] (http://anti-xml.org/zippers.html) –
@ निकितावोल्कोव को देखना चाहेंगे, मैं कहूंगा कि अगर वह मैक्रोज़ के संदर्भ में नहीं पूछ रहा था। – pedrofurla