2009-10-28 12 views
10

मैं अपनी कंपनी के भीतर बीस साल पुरानी स्वामित्व वाली भाषा बढ़ाने में मदद कर रहा हूं। यह एक बड़ी, ट्यूरिंग-पूर्ण भाषा है। इसे किसी अन्य व्याकरण शासन (जैसे एंटर) में अनुवाद करना एक विकल्प नहीं है (मुझे यह तय नहीं करना है)।क्या Yacc व्याकरण डिबगर्स हैं?

अधिकांश भाग के लिए, व्याकरण का विस्तार सुचारू रूप से चला गया है। लेकिन हर एक बार थोड़ी देर में मुझे लगता है कि

  • समाप्त करने के लिए कभी कभी बस (मेरे कमजोर मस्तिष्क के लिए) मतलब नहीं है

मुश्किल है एक को कम-कम या Shift-को कम मिल जाएगा y.output फाइलों और प्रयोगात्मक व्याकरण रिफैक्टरिंग पर बहुत दर्दनाक लगने के बाद, मुझे आमतौर पर वह स्थान मिला जहां मैं जाना चाहता था। कभी-कभी मुझे असंतोषजनक समझौता करना पड़ता था।

तो, क्या वहां कोई उपकरण है जो एक yacc व्याकरण में चूस सकता है, जो ब्राउज़िंग, प्रयोग और परिवर्तनों को डीबग करने की अनुमति देता है?

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

अपडेट: मुझे लगता है कि मुझे स्पष्टीकरण देना चाहिए। हम बर्कले Yacc का उपयोग करते हैं। मैं बाइसन के हाल के संस्करण का उपयोग कर परीक्षण कर रहा हूं। आउटपुट के लिए, मैंने --report = itemet के साथ व्याकरण संकलित किया है।

इस पोस्ट के साथ मेरा लक्ष्य बाहरी उपकरण जो बढ़ाने व्याकरण डिबगिंग सुविधाओं याक के साथ जो जहाज की तलाश शुरू की है। यह डिफ़ॉल्ट सेट के साथ आज दर्दनाक है। बेहतर इंटरैक्टिव टूल्स खोजने में मेरी सहायता करें, जैसे कि आप एंटरल के साथ उपयोग कर सकते हैं।

उत्तर

7

आप हो सकता हैyacc -d से कुछ मदद की, जो उत्पादन डिबगिंग उत्पादन मिलता है - यह मूल रूप से प्रतीक ढेर राज्यों और इस तरह की एक पूरी सूची देता है। आउटपुट घना और विशाल है, इसलिए इसे पढ़ने की कोशिश करना शायद ही कभी बहुत अधिक पूरा करता है (वैसे भी मेरे लिए कभी नहीं)। हालांकि, जब आप एक परिवर्तन करते हैं (उदाहरण के लिए) एक आर/आर संघर्ष देता है, तो आप पुराने व्याकरण और नए पर yacc -d चला सकते हैं, फिर परिणामों पर भिन्नता प्राप्त कर सकते हैं, ताकि अधिक विस्तृत रन-डाउन प्राप्त हो सके परिवर्तन (ओं) ने संघर्ष का कारण बना दिया।

यह संभवतः ध्यान देने योग्य है, हालांकि, एस/आर संघर्ष अक्सर सौम्य होते हैं - जब तक कि आप पूरी तरह से सुनिश्चित नहीं हैं कि यह एक समस्या है, इसे "ठीक करने" की कोशिश करना अक्सर सार्थक नहीं है। आर/आर संघर्ष के साथ भी यह सच नहीं है। हालांकि ये कभी-कभी सौम्य हैं, यह तुलनात्मक रूप से दुर्लभ है।

संपादित करें: ओह - क्षमा करें, यह होना चाहिए -v। आप y.output का उल्लेख करते हैं, इसलिए आप स्पष्ट रूप से पहले ही जानते हैं कि उस हिस्से को कैसे करें। मुद्दा यह है कि आप y.output फ़ाइलों को सीधे देखने की कोशिश नहीं करते हैं, लेकिन स्पष्ट रूप से बाहर आने वाले व्यक्ति के बीच एक अंतर करें और जिसने वास्तविक संघर्ष के बारे में कुछ जानकारी नहीं दी है (10 पर घूरने के बिना "सामान" की अरब रेखाएं जो ठीक है।

+0

मुझे यकीन नहीं है कि आपका क्या मतलब है। हमारे yaccs दोनों के साथ, -d का अर्थ है "टोकन मैक्रोज़ के लिए हेडर फ़ाइल आउटपुट"। मैंने अभी स्विच --report = itemet का उपयोग करने के बारे में अधिक जानकारी जोड़ दी है। क्या यह तुम्हारी तरह का मतलब है? यह सभी राज्य संक्रमण जानकारी से भरा एक फ़ाइल, y.output उत्पन्न करता है। मैं इसका उपयोग कर रहा हूं, लेकिन एक अधिक शक्तिशाली, इंटरैक्टिव टूल की उम्मीद कर रहा था। –

+1

जैरी सही है, एस/आर संघर्ष जरूरी नहीं हैं। लगभग हर असली व्याकरण में उनमें से एक गुच्छा है। – DigitalRoss

2

यह सबसे अच्छा मुझे मिल गया है: http://tldp.org/HOWTO/Lex-YACC-HOWTO-7.html

+0

धन्यवाद, मैं पहले से ही yacc की इन विशेषताओं का उपयोग कर रहा हूं।यह कभी-कभी पर्याप्त महसूस नहीं करता है। ; ^) ~ –

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