سؤال

في بلدي يوم عمل ، و الآخرين على فريقي كتابة الكثير من الأجهزة النماذج في Verilog-AMS ، لغة معتمدة في المقام الأول من قبل البائعين التجاريين وبعض مفتوحة المصدر محاكاة المشاريع.الشيء الوحيد الذي من شأنه أن يجعل دعم بعضها البعض رمز أكثر من المفيد أن يكون اللنت التي من شأنها أن تحقق لدينا رمز المشاكل المشتركة والمساعدة في تطبيق مدونة مشتركة نمط التنسيق.أنا بالطبع تريد أن تكون قادرة على إضافة القواعد الخاصة بي ، بعد أن تثبت فائدتها في نفسي الترويج لها إلى بقية الفريق..أنا لا تمانع في ممارسة العمل الذي يتعين القيام به ، ولكن بالطبع تحتاج أيضا إلى الاستفادة من المشاريع القائمة.

لا وجود سمح تركيب اللغة في yacc أو البيسون شكل تعطيني الساق ؟ أم يجب أن تمتص كل لغة البيان في بيرل السلسلة ، واستخدام نمط مطابقة للعثور على الأشياء التي كنت لا تحب ؟

(معظم تركيب و تجميع الأخطاء بسهولة القبض عليهم من قبل الأدوات التجارية..ولكن لدينا بعض من جانبنا لواحق.)

هل كانت مفيدة؟

المحلول

ليكس/فليكس و yacc/البيسون توفر سهولة الاستخدام مفهومة جيدا lexer و محلل-مولدات, وأنا أنصح القيام بشيء من هذا القبيل بدلا من القيام بذلك من الناحية الإجرائية في مثلبيرل.التعبيرات العادية هي الاشياء قوية تمزق أوتار نسبيا-ولكن ليس تماما-بنية ثابتة.مع أي لغة البرمجة, حجم آلة الدولة يحصل أن يكون ببساطة لا يمكن السيطرة عليها مع أي شيء أقل من الحقيقي Lexer/محلل (tm).تخيل التعامل مع كل ما يمكن interleavings من الكلمات الرئيسية ، معرفات والمشغلين دخيلة قوسين ، دخيلة الفاصلة المنقوطة و التعليقات المسموح بها في شيء مثل Verilog AMS مع التعبيرات العادية و قانون الإجراءات وحدها.

ليس هناك إنكار أن هناك منحنى التعلم كبيرة هناك ، ولكن كتابة اللغة التي يمكنك استخدامها فليكس البيسون تفعل شيئا مفيدا في الجملة شجرة يخرج من البيسون ، سيتم استخدام أفضل كثيرا من وقتك من كتابة طن من خاص-حالة الأوتار-تجهيز شفرة أكثر من الطبيعي التعامل معها باستخدام بناء جملة شجرة في المقام الأول.أيضا ، ما تعلم الكتابة بهذه الطريقة سوف حقا في توسيع المهارات في طرق كتابة مجموعة من hacky كود بيرل فقط لن, حتى إذا كان لديك يعني أنا أوصي به ;-)

أيضا, إذا كنت كسول ، تحقق الكسوف الإضافات التي تسليط الضوء على بناء الجملة الأساسية إعادة بيع ديون على Verilog و VHDL.إنهم لا يصدق بدائية الدولة ، آخر مرة تحققت ولكن قد يكون بعض من مدونة تبحث عنه ، أو على الأقل الأساس قطعة من التعليمات البرمجية أن ننظر إلى أفضل إبلاغ النهج الخاص بك في المتداول الخاصة بك.

نصائح أخرى

لقد كتبت عدة verilog موزعي و أود أن أقترح PCCTS/ANTLR لو المفضلة لديك لغة البرمجة C/C++/Java.هناك PCCTS/ANTLR Verilog النحوي يمكنك أن تبدأ مع.المفضلة محلل مولد سيبوه والتي تقوم على Common Lisp.

بالطبع مهمة كبيرة هي تحديد جميع linting القواعد.فمن المنطقي أن تجعل نوعا من لغة إلى تحديد linting القواعد كذلك.

لا نقلل من كمية العمل الذي يذهب إلى اللنت.تحليل هو الجزء السهل لأن لديك الأدوات (البيسون ، فليكس ، ANTLR/PCCTS) لأتمتة بكثير من ذلك.

ولكن مرة واحدة لديك تحليل, ثم ماذا ؟ يجب بناء الدلالي شجرة للتصميم.اعتمادا على مدى تعقيد المدخلات الخاصة بك ، يجب وضع Verilog-AMS التصميم (أيحل المعلمات الفتح يولد ، إلخ.إذا كنت تستخدم هذه الميزات).وعندها فقط يمكنك محاولة تنفيذ القواعد.

أود أن تنظر بجدية في الحلول الأخرى الممكنة قبل كتابة اللنت ، ما لم يكن عدد المستخدمين المحتملين توفير الوقت مما يبرر وقت التطوير.

في محاولة للعثور على جوابي ، لقد وجدت هذا على ANTLR - قد يكون استخدام

إذا كنت تستخدم جافا في جميع (وبالتالي فكرة) ، IDE ملحقات مخصصة اللغات قد يكون الاستخدام

yacc/bison بالتأكيد يعطيك الساق ، منذ جيدة linting يتطلب تحليل البرنامج.Regex (صحيح regex على الأقل) قد تغطي تافهة الحالات, ولكن من السهل أن كتابة التعليمات البرمجية التي regexes لا تتطابق ولكن لا تزال سيئة النمط.

ANTLR يتطلع إلى أن يكون مسار بديل أكثر شيوعا (موافق أنا سمعت عنها من قبل) YACC/البيسون النهج الذي اتضح أيضا عادة ما تستخدم ليكس/فليكس كواجهة أمامية.

قراءة سريعة فليكس صفحة نوع من يجعلني أعتقد أنه يمكن أن يكون إطارا أن regex نوع من الفكرة..

حسنا..سأترك هذا الحساء لفترة أطول قليلا ، ثم انظر بسرعة كيف يمكن بناء نموذج محلل في واحدة أو أخرى.

و أطول قليلا

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top