سؤال
في الواقع، ربما ليس الكامل في مهب lex / yacc. أقوم بتنفيذ Arder-Arrameter الواجهة الأمامية لإدارة WebApp. أبحث عن شيء سيستغرق تعريف قواعد اللغة وتحويله إلى محلل يستهلك الأساليب مباشرة على كائني. على غرار كيف يمكن ل ASP.NET MVC معرفة طريقة وحدة التحكم التي تستدعي، وكيفية المهر الحجج.
لذلك، إذا كانت مستخدمو المستخدمين "إنشاء FOO" في موجه الأمر الخاص بي، فيجب عليك الاتصال بشفافية طريقة:
private void Create(string id) { /* ... */ }
أوه، وإذا كان يمكن أن تولد نص المساعدة من (على سبيل المثال) السمات على طرق تحكم تلك، فهذا سيكون رائعا أيضا.
المحلول
لست متأكدا من LEX / YACC سيكون من أي مساعدة. ستحتاج فقط إلى مزامنة أساسية ومترجم أسرع للكتابة باليد. إذا كنت لا تزال في طريق تحليل نرى سخرية.
باعتباره Sidenote: هل فكرت PowerShell و Towerslets؟
نصائح أخرى
لقد قمت ببعض المشاريع الصغيرة مع Glex / GPPG، والتي هي إعادة تطبيق LEX / YACC بشكل مباشر للغاية لم أستخدم أي من الأدوات الأخرى أعلاه، لذلك لا أستطيع أن أقارنها حقا، ولكن هذه تعمل بشكل جيد.
يمكن العثور على GPPG هنا و glex. هنا.
ويقيل ذلك، وأنا أوافق، حل LEX / YACC الكامل ربما يكون مبالغا فيه لمشكلتك. أود أن أقترح إنشاء مجموعة من الارتباطات باستخدام IronPython: إنها واجهات بسهولة مع رمز .NET، يبدو أن غير المبرمجين يجدون بناء الجملة الأساسي قابلة للاستخدام إلى حد ما، ويمنحك الكثير من المرونة / الطاقة إذا اخترت استخدامه.
انظر أيضا إلى antlr., ، والتي لديها دعم C #.
لا يزال لا يزال مبكرا CTP، لذلك لا يمكن استخدامه في تطبيقات الإنتاج ولكنك قد تكون مهتما بأوسلو / Mgrammar:http://msdn.microsoft.com/en-us/oslo/
Jison هو الحصول على الكثير من الجر مؤخرا. إنه ميناء bison إلى جافا سكريبت. نظرا لطبيعة بسيطة للغاية، فقد قمت بجانب قالب Jison Parsing / Lexing إلى PHP، والآن ج #. لا يزال جديدا جدا، ولكن إذا حصلت على فرصة، نلقي نظرة عليه هنا: https://github.com/robertleeplummerjr/jison/tree/master/ports/csharp/jison.
إذا كنت لا تخشى برامج ألفا وأريد بديلا ل LEX / YACC لإنشاء لغاتك الخاصة، فقد تنظر إلى أوسلو. وبعد أود أن أوصيك بالجلوس من خلال تسجيلات جلسة الدورات TL27 و TL31 من العام الماضي PDC.. وبعد تعالج TL31 مباشرة إنشاء لغات خاصة بالمجال باستخدام أوسلو.
Coco / R هو مولد مترجم مع تنفيذ .NET. يمكنك تجربة ذلك، لكنني لست متأكدا من أن الحصول على مثل هذه المكتبة للعمل ستكون أسرع من كتابة الممزيع الخاصة بك.
أود أن أقترح csflex. - ج # ميناء المرن - مولد ماسحة يونيكس الأكثر شهرة.
أعتقد أن LEX / YACC موجود في أحد SDKs بالفعل (أي RTM). إما Windows أو .NET Framework SDK.
كما قال أنطون، ربما يكون PowerShell هو الطريق للذهاب. إذا كنت تريد تطبيق LEX / YACC إذن مالكولم كرر لديه مجموعة جيدة.
فقط للسجل، وتنفيذ محلل Lexer و Lalr Garser في C # ل C #:
http://code.google.com/p/naive-language-tools/
يجب أن يكون مشابها في الاستخدام إلى LEX / YACC، ولكن هذه الأدوات (NLT) ليست مولدات! وبالتالي، ننسى السرعة.