parsing क्या Yacc अभी भी उद्योग में इस्तेमाल किया है?




(7)

मैं जिस सॉफ़्टवेयर बेस का विकास कर रहा हूं, उसमें yacc की एक सघन राशि का उपयोग किया जाता है, जिसके साथ मुझे निपटने की आवश्यकता नहीं है I कभी-कभी मुझे लगता है कि कुछ समस्याओं को समझने में मुझे मदद मिलेगी, लेकिन अधिकतर समय मैं यैक्स की पूरी अज्ञानता के साथ भाग ले सकता हूं।

मेरा सवाल है वहाँ वहाँ पर्याप्त नई परियोजनाओं है कि अभी भी yacc का उपयोग करने के लिए समय मुझे यह जानने की आवश्यकता होगी वारंट का उपयोग करें?

संपादित करें: प्रतिक्रिया को देखते हुए ज्यादातर YAC सीखने के पक्ष में है, क्या ऐसी कोई ऐसी भाषा है जो आप yacc से अधिक सुझाएंगे?


मेरे पास अन्य पार्सिंग सिस्टम के साथ तुलना करने का मौका नहीं था, लेकिन मैं निश्चित रूप से अपने स्वयं के अनुभव के आधार पर और इसके बड़े और सक्रिय उपयोगकर्ता आधार के आधार पर एएनटीएलआर की सिफारिश कर सकता हूं।

एएनटीएलआर के लिए एक और प्लस प्वाइंट एएनटीएलआरवर्क्स है: एएनटीएलआर जीयूआई डेवलपमेंट एन्वायरमेंट, जो आपके व्याकरण के विकास और डिबगिंग के दौरान एक बड़ी मदद है। मुझे अभी तक एक और पार्सिंग सिस्टम देखने की ज़रूरत है जो इस तरह के एक IDE द्वारा समर्थित है।


मैं विशेष रूप से yacc / bison के बारे में नहीं जानता, लेकिन मैंने एंटील, कप, जेक्स और जावैक का इस्तेमाल किया है। मैंने सोचा था कि वे केवल असाधारण महत्व का होगा, लेकिन जैसा कि यह पता चला है कि हमें एक डोमेन-विशिष्ट भाषा की आवश्यकता होती है, और इससे हमें कुछ "सरल" (रीगेक्स आधारित) पार्सर्स की तुलना में बहुत अच्छा समाधान मिला। रखरखाव कई वातावरण में एक मुद्दा हो सकता है, हालांकि - क्योंकि अधिकांश कोडक इन दिनों को पार्सिंग टूल के साथ कोई अनुभव नहीं होगा।


मैं उन परियोजनाओं पर काम करता हूं जो YAC का उपयोग करते हैं। नया कोड नहीं - लेकिन वे नए थे, वे अभी भी Yacc या करीबी रिश्तेदार (बाइसन, बैक, ...) का इस्तेमाल करते हैं।

हां, मैं इसे सीखा में काम करने के लायक सीखता हूं।

एएनटीएलआर, या अन्य आधुनिक पार्सर जनरेटर सीखने पर विचार करें। लेकिन Yacc का ज्ञान आपको अच्छी स्थिति में खड़ा करेगा - यह आपको किसी अन्य समान उपकरण सीखने में मदद करेगा, क्योंकि बहुत सारे मूल सिद्धांत समान हैं।


पेग्स नई हॉटनेस हैं, लेकिन अभी भी एक टन परियोजनाएं हैं जो yacc के मुकाबले अधिक आधुनिक या उपकरण का उपयोग करती हैं। मैं एक नई परियोजना पर भ्रांति करूँगा जो कि यैज का इस्तेमाल करने का विकल्प चुना है, लेकिन किसी आधुनिक टूल के लिए मौजूदा प्रोजेक्ट्स के लिए कोई मतलब नहीं हो सकता है। यह एक उपयोगी कौशल yacc के साथ मोटी परिचित होने के कारण है

यदि आप पूरी तरह से पार्सर जनरेटर के विषय से अपरिचित हैं तो मैं आपको एक के बारे में जानने के लिए प्रोत्साहित करता हूं, किसी भी एक कई अवधारणाएं उनके बीच पोर्टेबल हैं इसके अलावा, यह बेल्ट में एक उपयोगी उपकरण है: एक बार जब आप एक को जानते हैं तो आप समझेंगे कि भारी हाथ लिखे गए पार्सर्स की तुलना में वे कितने बेहतर हो सकते हैं। यदि आप पार्सर्स के विषय में पहले से ही आराम कर रहे हैं, तो मुझे इसके बारे में चिंता नहीं होगी। यदि आप कुछ करने के लिए आपको कुछ समय के लिए y


हम शिपिंग कंपनी के लिए मेरी कंपनी में नया यॅक्स कोड लिख रहे हैं हां, यह सामान अभी भी उपयोग किया जाता है


मुझे इसका इस्तेमाल करते हुए नई परियोजनाओं के बारे में नहीं पता है, लेकिन मैं सात अलग-अलग रखरखाव नौकरियों में शामिल हूं जो कॉन्सेफिगेशन फाइलों को प्रोसेस करने के लिए लेक्स और yacc का उपयोग करती है।

मेरे लिए कोई XML नहीं, नो-सर-एई :-)।

Lex / yacc का उपयोग करने वाले समाधान key=val लाइनों की पुरानी कॉन्फ़िगरेशन फ़ाइलों से एक कदम है क्योंकि वे बेहतर श्रेणीबद्ध संरचनाओं की अनुमति देते हैं:

server = "mercury" {
    ip = "172.3.5.13"
    gateway = "172.3.5.1"
}
server = "venus" {
    ip = "172.3.5.21"
    gateway = "172.3.5.1"
}

और, हाँ, मुझे पता है कि आप XML के साथ ऐसा कर सकते हैं, लेकिन ये प्राथमिक रूप से सी में लिखे जाने वाले लिगेसी अनुप्रयोग हैं और ईमानदार होने के लिए, शायद मैं नए (गैर-जावा) नौकरियों के लिए लेक्स /

ऐसा इसलिए है क्योंकि मैं समय-समय पर सबसे बड़ी नई व्हाइज़-बैंग टेक्नोलॉजी देने के बजाय सॉफ़्टवेयर वितरित करना पसंद करता हूं- मेरे क्लाइंट मेरी शिक्षा का भुगतान नहीं करेंगे, उन्हें पहले और सबसे पहले परिणाम चाहिए और मैं पहले से ही लेक्स / वाईएएसी में विशेषज्ञ हूं और सभी यह जल्दी से करने के लिए टेम्पलेट कोड।


हां, ये उपकरण सीखने के लायक हैं यदि आपको कभी भी एक व्याकरण को पार्स करने वाला कोड बनाने या संशोधित करने की ज़रूरत है

कई वर्षों के लिए एक व्याकरण को पार्स करने के लिए कोड को बनाने के लिए वास्तविक उपकरण याक, या उसके जीएनयू चचेरे भाई, बाइसन थे।

हाल ही में मैंने सुना है कि ब्लॉक पर कुछ नए बच्चे हैं, लेकिन सिद्धांत समान है: आप बैकस-नौर फॉर्म ( बीएनएफ ) और वाईएसीसी / बायसन / जो भी प्रारूप में अधिक या कम हैं, में एक घोषणात्मक व्याकरण लिखें आपके लिए कुछ कोड तैयार करता है जो हाथ से लिखने के लिए बेहद कठिन होता है

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

संपादित करें: अन्य टूल के बारे में अपने अनुवर्ती प्रश्न को देखते हुए, सी / सी ++ प्रोजेक्ट्स के लिए वाईएड / बायसन बिल्कुल बेहतरीन है, क्योंकि वे सी कोड उत्पन्न करते हैं। अन्य भाषाओं के समान उपकरण हैं सभी व्याकरण समान नहीं होते हैं, और कुछ पार्सर जनरेटर केवल एक विशिष्ट जटिलता के व्याकरण व्याकरण कर सकते हैं। तो आपको एक ऐसा उपकरण ढूंढना पड़ सकता है जो आपके व्याकरण को पार्स कर सकता है Http://en.wikipedia.org/wiki/Comparison_of_parser_generators देखें