Flex / Lex और Yacc / Bison में क्या अंतर है?


122

Flex और Lex और Yacc & Bison में क्या अंतर है मैंने इंटरनेट पर बेतहाशा खोज की और मुझे कोई ठोस जवाब नहीं मिला।

क्या मैं उबंटू पर शुद्ध लेक्स और याक स्थापित कर सकता हूं, या मैं केवल फ्लेक्स और बाइसन स्थापित कर सकता हूं। मैं उलझन में हूं।

  • क्या लेक्स या याक अभी भी किसी के द्वारा बनाए रखा जा रहा है?
  • क्या वे सभी स्वतंत्र हैं?
  • यदि लेक्स मुक्त नहीं है तो मैंने इसे अपने उबंटू वितरण पर क्यों स्थापित किया है?

    lex --version
    lex 2.5.35
    

3
कोई लेक्स संस्करण 2.5.35 नहीं है - आप फ्लेक्स संस्करण 2.5.35 चला रहे हैं, यह सिर्फ 'लेक्स' के रूप में अपनी पहचान करता है यदि आप इसे 'लेक्स' के रूप में आमंत्रित करते हैं
क्रिस डोड

जवाबों:


81

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

Yacc और Bison बहुत निकटता से संगत हैं, हालांकि Bison के पास कुछ अतिरिक्त चालें हैं जो यह कर सकती हैं।

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

लीक्स और याक को यूनिक्स एसवीआरएक्स लाइसेंसियों द्वारा बनाए रखा जाता है - आईबीएम (एआईएक्स), एचपी (एचपी-यूएक्स) और सन (सोलारिस) जैसी कंपनियों ने अपनी कमान में लेक्स और याक के संशोधित संस्करण बनाए हैं। MKS MKS Lex और MKS Yacc भी प्रदान करता है; हालाँकि, Yacc में कम से कम कुछ गैर-मानक एक्सटेंशन हैं।

फ्लेक्स और बाइसन स्वतंत्र हैं। (एटी एंड टी) लेक्स और वाईएसीसी नहीं हैं।


4
Yacc के बारे में जानकारी गलत है। बर्कले के पास एक याक है, जो सभी खुले स्रोत बीएसडी ऑपरेटिंग सिस्टम पर बीएसडी लाइसेंस के तहत मौजूद और उपलब्ध है। मैंने इस खाते को डाउनवोट कर दिया, लेकिन अगर उत्तर को जल्दी से ठीक कर दिया जाए तो मैं डाउनवोट को हटा दूंगा।
डेनियल सी। सोबरल जूल

2
@ डैनियल: AFAIK, AT & T Yacc को बर्कले से प्राप्त नहीं किया जा सकता है - बर्कले से आपको जो मिलता है वह बर्कले Yacc है। मैं उस उत्तर को स्पष्ट करने के लिए स्पष्ट करूँगा।
जोनाथन लेफ़लर

1
फ्लेक्स में आप निश्चित रूप से इनपुट बफ़र्स को दर्द रहित रूप से स्विच कर सकते हैं (मैंने इसे आवश्यक रूप से संभालने के लिए एक बार किया था #include)। Lex और yacc पर मेरी O'Reilly पुस्तक (यहाँ हाथ नहीं, क्षमा करें) ने कहा कि यह केवल घृणास्पद हैक के माध्यम से lex में संभव था।
वॉनब्रांड

33

बाइसन GNU कार्यान्वयन / Yacc का विस्तार है, फ्लेक्स लेक्स का उत्तराधिकारी है। किसी भी स्थिति में, बायसन / फ्लेक्स का उपयोग करना ठीक (और अनुशंसित) है।


1
इसके अतिरिक्त, बायक, याक के बर्कले कार्यान्वयन, व्यापक रूप से उपलब्ध है (मैं इसे अपने डेबियन रिपॉजिटरी सूची में देखता हूं)।
माइकल एकस्ट्रैंड

1
फ्लेक्स को इसलिए कहा जाता है क्योंकि यह lex की तुलना में बहुत तेज़ है (है?) । इसके कई एक्सटेंशन हैं, और जेनरेट की गई फाइल्स सभी पर समान नहीं हैं (यानी, lex में बदसूरत हैक्स फ्लेक्स और वाइसवर्स के साथ काम नहीं करते हैं)।
वॉनब्रांड २३'१३ को १३:१६

11

अधिकांश (सभी?) लिनक्स सिस्टम पर, "लेक्स" वास्तव में फ्लेक्स का एक प्रतीकात्मक लिंक है। मूल रूप से, यह मुफ़्त संस्करण का केवल एक अलग नाम है।


1
मेरे सिस्टम (आर्क लिनक्स) पर, दो बायनेरिज़ एक ही तरह से व्यवहार नहीं करते हैं। संभवतः एक lex संगतता सुविधा।
डानिलो बार्गेन

10

YACC योजना 9 और ओपन सोलारिस दोनों से ओपन सोर्स लाइसेंस के तहत उपलब्ध है। इसके अलावा, बर्कले YACC भी है, जो मूल YACC के साथ संगत है, लेकिन स्रोत कोड साझा नहीं करता है। बर्कले YACC किसी भी खुले स्रोत BSD ऑपरेटिंग सिस्टम पर पाया जा सकता है।


2

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

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.