2008-09-16 22 views
17

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

क्या किसी yacc या bison प्रारूप में अनुमत भाषा वाक्यविन्यास मुझे एक पैर देता है? या क्या मुझे बस प्रत्येक भाषा कथन को एक पर्ल स्ट्रिंग में चूसना चाहिए, और उन चीज़ों को ढूंढने के लिए पैटर्न मिलान का उपयोग करना चाहिए जिन्हें मैं पसंद नहीं करता?

(। अधिकांश सिंटैक्स और संकलन त्रुटियों आसानी से वाणिज्यिक उपकरण द्वारा पकड़े जाते हैं .. लेकिन हम अपने ही एक्सटेंशन के कुछ है)

उत्तर

14

लेक्स/फ्लेक्स और याक/जंगली भैंसों आसानी से उपयोग करते हैं, lexer- अच्छी तरह से समझा तथा पार्सर जनरेटर प्रदान करते हैं और मैं वास्तव में के रूप में करने का विरोध किया कि ऐसा कुछ कर रही सलाह देते हैं उदाहरण में प्रक्रियात्मक रूप से कर रहे हैं पर्ल। नियमित अभिव्यक्ति अपेक्षाकृत-साथ, लेकिन पूरी तरह से तय संरचना के साथ अलग तारों को फिसलने के लिए शक्तिशाली सामान हैं। किसी भी वास्तविक प्रोग्रामिंग भाषा के साथ, आपकी राज्य मशीन का आकार वास्तविक लेक्सर/पार्सर (टीएम) से कम कुछ भी के साथ आसानी से अप्रबंधनीय हो जाता है। कीवर्ड, पहचानकर्ता, ऑपरेटरों, बाहरी कोष्ठक, अपर्याप्त अर्धविराम, और टिप्पणियों की सभी संभावित अंतःक्रियाओं से निपटने की कल्पना करें, जो नियमित अभिव्यक्तियों और प्रक्रियात्मक कोड के साथ अकेले वेरिलोग एएमएस जैसी अनुमति देते हैं।

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

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

0

मेरा उत्तर खोजने की कोशिश में, मैं ANTLR पर इस पाया - काम का हो सकता

+0

दिलचस्प लग रहा है। – jbdavid

0

आप सभी (और इस प्रकार विचार) में जावा का उपयोग करते हैं, आईडीई के extensions for custom languages काम का हो सकता

+0

मेरा "आईडीई" कैडेंस लाइब्रेरी मैनेजर + नेडिट है, जिसमें (बिल्टिन) वेरिलोग सिंटैक्स हाइलाइटिंग है, जो वेरिलोग-ए और वेरिलोग-एएमएस का समर्थन करने के लिए अपने स्वयं के पैटर्न जोड़ती है। मैं जिस तरह के काम कर रहा हूं उसके लिए मुझे जावा में ज्यादा मूल्य नहीं दिख रहा है। – jbdavid

0

yacc/bison निश्चित रूप से, ऊपर एक पैर तुम देता है के बाद से अच्छा linting कार्यक्रम पार्स करने की आवश्यकता होगी। रेगेक्स (कम से कम वास्तविक रेगेक्स) मामूली मामलों को कवर कर सकता है, लेकिन कोड लिखना आसान है कि रेगेक्स मेल नहीं खाते हैं लेकिन अभी भी खराब शैली हैं।

0

ANTLR (ठीक मैं उनके बारे में सुना है पहले) YACC/बाइसन दृष्टिकोण है, जो यह पता चला है भी आमतौर पर एक सामने अंत के रूप में लेक्रस/FLEX का उपयोग अधिक आम के लिए एक विकल्प पथ होने के लिए लग रहा है।

FLEX आदमी पृष्ठ की एक त्वरित पढ़ा मानो मुझे लगता है कि यह विचार की कि regex प्रकार के लिए ढांचा हो सकता है बनाने के ..

ठीक है .. मैं इस स्टू थोड़ी देर दूँगा, तो कैसे देखते हैं जल्दी से मैं एक या दूसरे में एक प्रोटोटाइप पार्सर का निर्माण कर सकता हूं।

और एक छोटा सा अब

2

मैंने कुछ Verilog पार्सर्स लिखे हैं और यदि आप अपनी पसंदीदा प्रोग्रामिंग भाषा सी/सी ++/जावा है तो मैं पीसीसीटीएस/एएनटीएलआर का सुझाव दूंगा। एक PCCTS/ANTLR Verilog grammar है जिसे आप शुरू कर सकते हैं। मेरा पसंदीदा पार्सर जनरेटर Zebu है जो सामान्य लिस्प पर आधारित है।

बेशक बड़ी नौकरी सभी लिटिंग नियमों को निर्दिष्ट करना है। लिनिंग नियमों को निर्दिष्ट करने के लिए किसी प्रकार की भाषा बनाने के लिए यह समझ में आता है।

2

लिटर में जाने वाले काम की मात्रा को कम से कम न समझें। पार्सिंग एक आसान हिस्सा है क्योंकि इसमें से अधिकांश को स्वचालित करने के लिए आपके पास टूल्स (बाइसन, फ्लेक्स, एएनटीएलआर/पीसीसीटीएस) हैं।

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

मैं लिटर लिखने से पहले अन्य संभावित समाधानों पर गंभीरता से विचार करता हूं, जब तक कि उपयोगकर्ताओं की संख्या और संभावित समय बचत इस प्रकार विकास के समय को औचित्य साबित न करे।

+0

आमेन। जेनरलाइज्ड विश्लेषण मशीनरी के लिए http://www.semanticdesigns.com/Products/DMS/DMSToolkit देखें जो केवल पार्सिंग से परे है। कस्टम उपकरण बनाने के लिए डीएमएस का उपयोग किया जाता है। फिर भी, VerilogAMS के लिए एक लिटर का निर्माण अभी भी एक बहुत बड़ा काम होगा। –

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