هل من الممكن أن يكون لديك محللين أو أكثر من LEX / YACC في نفس التطبيق
-
06-09-2019 - |
سؤال
لدي تطبيق حيث لدي بالفعل محلل لسبب واحد من القواعد وأحتاج إلى إضافة قواعد قوية مختلفة لغرض آخر.
هل من الممكن أن يكون لديك أكثر من واحد؟
وإذا كان الأمر كذلك كيف تحصل على نقطة دخول أخرى؟
شكرا
ديفيد ألان فينش
المحلول
أعتقد أنه يمكنك ذلك باستخدام --name-prefix
خيار لبيسون، و --prefix
خيار المرن.
في كلتا الحالتين، يتيح لك استبدال الافتراضي "yy
"البادئة المستخدمة في الوظائف الناتجة عن بادئة من اختيارك.
نصائح أخرى
انه من الممكن.
يجب أن يكون YACC علامة -p، حيث يمكنك تحديد بادئة مختلفة بدلا من الافتراضي "YY".
الملف الذي تم إنشاؤه بواسطة Lex Conatins رمز واحد فقط يستخدم خارج: Yylex. يمكنك ترجمة مع -dylex = mysecondlex، على سبيل المثال.
ليس إجابة مباشرة، ولكن قد ترغب في النظر في استخدام نهج أكثر عمومية مثل goldparser. والتي تتيح لك استخدام محرك عام لمعالجة LALR و DFA مقدمها الناتج من قواعد النحو.
بهذه الطريقة، يمكنك استخدام أي عدد من الناطقين المختلفة في نفس التطبيق، وتغيير Grammar لا يقوم بإنشاء شفرة مصدر جديدة ولكن فقط ملفات جدول جديدة فقط (والتي يمكن تضمينها كمورد مضمن أو مشابه).
LEX القياسية و yacc ليس لها طريقة للقيام بذلك. فليكس وبيسون تفعل، كما تفعل بعض التطبيقات الأخرى. منذ أن قلت (في تعليق) أنك لا تستخدم Flex و Bison، أي إصدارات LEX و YACC نكون كنت تستخدم؟