Возможно ли иметь два или более анализаторов Lex / Yacc в одном приложении
-
06-09-2019 - |
Вопрос
У меня есть приложение, в котором у меня уже есть анализатор для одного вида грамматики, и мне нужно добавить вторую другую грамматику для другой цели.
Возможно ли иметь больше одного?
И если да, то как вы получаете другую точку входа?
Спасибо
дэвид Аллан Финч
Решение
Я думаю, вы можете сделать это, используя --name-prefix
возможность Зубрить, и --prefix
возможность сгибать.
В обоих случаях они позволяют вам заменить значение по умолчанию "yy
"префикс, используемый в функциях, сгенерированных с помощью префикса по вашему собственному выбору.
Другие советы
Да, это возможно.
yacc должен иметь флаг -p, где вы можете указать другой префикс вместо значения по умолчанию "yy".
Файл, сгенерированный lex conatins, содержит только один символ, используемый снаружи:илекс.Вы можете скомпилировать, например, с помощью -Dyylex=mySecondLex .
Это не прямой ответ, но вы можете рассмотреть возможность использования более общего подхода, такого как Золотой парсер что позволяет вам использовать универсальный движок для обработки таблиц LALR и DFA, сгенерированных на основе ваших грамматик.
Таким образом, вы можете использовать любое количество разных грамматик в одном приложении, и изменение грамматики не создает новый исходный код, а скорее просто новые файлы таблиц (которые могут быть включены в качестве встроенного ресурса или аналогичного).
Стандартный lex и yacc не имеют возможности сделать это.Flex и Bison делают это, как и некоторые другие реализации.Поскольку вы сказали (в комментарии), что не используете flex и bison, какие версии lex и yacc являются ты употребляешь?