Как обрабатывать различия версий бизонов в одном .y-файле? - PullRequest
1 голос
/ 22 января 2020

Я должен поддерживать системы, которые поставляются с бизоном версии 3.0.4 и 3.4.2.

Я использовал переменную parser_class_name в моем .y-файле. Этот больше не поддерживается с 3.4.2.

error: syntax error, unexpected string, expecting identifier

Его замена заключается в использовании api.parser.class, однако это не работает с 3.0.4: (см. changelog : История: введена в Bison 3.3 для заменить parser_class_name. )

Как я могу исправить эту проблему в .y-файле? Если есть что-то вроде %if version < 3.3 в синтаксисе бизонов?

Ответы [ 2 ]

1 голос
/ 22 января 2020

Нет решения, которое можно реализовать в файле грамматики. Извините.

Bison не предоставляет никаких средств для условного включения.

Он предоставляет объявление %require, в котором указывается минимальная версия бизона. Это, вероятно, не очень полезно в этом случае. (Кроме того, он не позволяет указывать диапазон версий, поэтому вы не можете ограничить грамматику устаревшей версией бизона.)

Насколько я знаю, обычной стратегией также является включение сгенерированного парсера в дистрибутив, позволяющий скомпилировать ваш проект в системе с несовместимой версией зубра или даже без зубра. Если по какой-либо причине конечный пользователь желает восстановить синтаксический анализатор, он несет ответственность за получение правильной версии, что, конечно, должно быть задокументировано в инструкциях по сборке.

Вы можете предварительно обработать файл грамматики на основе версия зубров. Автоинструменты могут помочь вам в этом, если вы их используете. Но это, вероятно, излишне.

0 голосов
/ 25 января 2020

Я не вижу здесь проблемы: 3.4.2 поддерживает parser_class_name. Это устарело, поэтому вам предлагается выбрать api.parser.class, но его поддержка еще не удалена.

Но @rici прав: в типичных случаях использования Bison, сопровождающий использует современная версия для генерации и отправки парсера. Таким образом, пользователи не зависят от Bison, что, в свою очередь, освобождает разработчиков от необходимости поддерживать многие версии Bison.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...