Возможно ли иметь два или более анализаторов Lex / Yacc в одном приложении

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

Вопрос

У меня есть приложение, в котором у меня уже есть анализатор для одного вида грамматики, и мне нужно добавить вторую другую грамматику для другой цели.

Возможно ли иметь больше одного?

И если да, то как вы получаете другую точку входа?

Спасибо

дэвид Аллан Финч

Это было полезно?

Решение

Я думаю, вы можете сделать это, используя --name-prefix возможность Зубрить, и --prefix возможность сгибать.

В обоих случаях они позволяют вам заменить значение по умолчанию "yy"префикс, используемый в функциях, сгенерированных с помощью префикса по вашему собственному выбору.

Другие советы

Да, это возможно.

yacc должен иметь флаг -p, где вы можете указать другой префикс вместо значения по умолчанию "yy".

Файл, сгенерированный lex conatins, содержит только один символ, используемый снаружи:илекс.Вы можете скомпилировать, например, с помощью -Dyylex=mySecondLex .

Это не прямой ответ, но вы можете рассмотреть возможность использования более общего подхода, такого как Золотой парсер что позволяет вам использовать универсальный движок для обработки таблиц LALR и DFA, сгенерированных на основе ваших грамматик.

Таким образом, вы можете использовать любое количество разных грамматик в одном приложении, и изменение грамматики не создает новый исходный код, а скорее просто новые файлы таблиц (которые могут быть включены в качестве встроенного ресурса или аналогичного).

Стандартный lex и yacc не имеют возможности сделать это.Flex и Bison делают это, как и некоторые другие реализации.Поскольку вы сказали (в комментарии), что не используете flex и bison, какие версии lex и yacc являются ты употребляешь?

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top