मेरे पास ActionScript parser का एक संशोधित संस्करण है (एएस में लिखा गया है, पार्स एएस नहीं है) जो कस्टम फ़ंक्शंस का समर्थन करता है, लेकिन तार नहीं। हालांकि स्ट्रिंग समर्थन को जोड़ना शायद आसान होगा। मैं इसे कहीं भी अपलोड करूंगा ताकि आप इसे http://silentmatt.com/parser2.jshttp://silentmatt.com/parser3.js पर प्राप्त कर सकें।
संपादित करें: मैंने तारों के लिए आसानी से बुनियादी समर्थन जोड़ा। यह भागने के दृश्यों का समर्थन नहीं करता है और जेएसएफक्शन काम नहीं करता है, लेकिन इसे काम करने में केवल कुछ मिनट लग गए। कॉन्सटेनेशन ऑपरेटर को "||" में बदलना बहुत आसान होना चाहिए।
यहाँ कैसे आप अपने उदाहरण भाव का मूल्यांकन करेंगे:
js> var parser = new Parser();
js> parser.parse("3 * (2 + 1) - 1").evaluate();
8
js> parser.parse("2 * func(2; 2)").evaluate({ func:Math.pow });
8
js> function substr(s, start, end) { return s.substring(start, end); }
js> parser.parse("func('hello world'; 0; 5) + ' you'").evaluate({ func:substr });
hello you
मुझे याद नहीं कि मैं क्यों तर्क विभाजक के रूप में अर्धविराम इस्तेमाल किया; मुझे लगता है कि इसमें कार्यों और अंतर्निहित "ऑपरेटर" कार्यों के बीच अंतर करने के साथ कुछ करना है।
एक और संपादित करें:
मैं इस एक छोटे से खेल रहा है, और अब वहाँ http://silentmatt.com/parser3.js में बेहतर स्ट्रिंग समर्थन के साथ एक संस्करण है (toJSFunction काम करता है, और आप मानक जावास्क्रिप्ट दृश्यों से बचने का उपयोग कर सकते हैं)। यह +
के बजाय स्ट्रिंग कॉन्सटेनेशन ऑपरेटर के रूप में सभी कार्यों और ||
के लिए तर्क अलग करने के लिए अल्पविरामों का भी उपयोग करता है, जो केवल अतिरिक्त है।
स्रोत
2009-06-27 20:15:29
आप एक जावास्क्रिप्ट पार्सर के लिए देख रहे हैं एक अलग भाषा में चलाने के लिए? जावास्क्रिप्ट पार्सर के सी ++ कार्यान्वयन की तरह? या जावास्क्रिप्ट के लिए जावास्क्रिप्ट में कुछ? –
क्षमा करें अगर मैं इस बारे में स्पष्ट नहीं था। नहीं, मेरा मतलब जावास्क्रिप्ट में लिखा गया एक पार्सर है जो ऊपर वर्णित सरल अभिव्यक्ति का विश्लेषण और मूल्यांकन करता है। –
ज्ञात "कस्टम" कार्यों का सेट है? –