هل من الممكن أن يكون لديك محللين أو أكثر من LEX / YACC في نفس التطبيق

StackOverflow https://stackoverflow.com/questions/730029

سؤال

لدي تطبيق حيث لدي بالفعل محلل لسبب واحد من القواعد وأحتاج إلى إضافة قواعد قوية مختلفة لغرض آخر.

هل من الممكن أن يكون لديك أكثر من واحد؟

وإذا كان الأمر كذلك كيف تحصل على نقطة دخول أخرى؟

شكرا

ديفيد ألان فينش

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

المحلول

أعتقد أنه يمكنك ذلك باستخدام --name-prefix خيار لبيسون، و --prefix خيار المرن.

في كلتا الحالتين، يتيح لك استبدال الافتراضي "yy"البادئة المستخدمة في الوظائف الناتجة عن بادئة من اختيارك.

نصائح أخرى

انه من الممكن.

يجب أن يكون YACC علامة -p، حيث يمكنك تحديد بادئة مختلفة بدلا من الافتراضي "YY".

الملف الذي تم إنشاؤه بواسطة Lex Conatins رمز واحد فقط يستخدم خارج: Yylex. يمكنك ترجمة مع -dylex = mysecondlex، على سبيل المثال.

ليس إجابة مباشرة، ولكن قد ترغب في النظر في استخدام نهج أكثر عمومية مثل goldparser. والتي تتيح لك استخدام محرك عام لمعالجة LALR و DFA مقدمها الناتج من قواعد النحو.

بهذه الطريقة، يمكنك استخدام أي عدد من الناطقين المختلفة في نفس التطبيق، وتغيير Grammar لا يقوم بإنشاء شفرة مصدر جديدة ولكن فقط ملفات جدول جديدة فقط (والتي يمكن تضمينها كمورد مضمن أو مشابه).

LEX القياسية و yacc ليس لها طريقة للقيام بذلك. فليكس وبيسون تفعل، كما تفعل بعض التطبيقات الأخرى. منذ أن قلت (في تعليق) أنك لا تستخدم Flex و Bison، أي إصدارات LEX و YACC نكون كنت تستخدم؟

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