Введение
Программа-генератор парсеров, совместимая с Yacc. Сгенерированные парсеры переносимы: они не требуют каких-либо конкретных компиляторов. Bison по умолчанию генерирует парсеры LALR(1), но также может генерировать канонические LR, IELR(1) и GLR парсеры. В режиме POSIX Bison совместим с Yacc, но также имеет ряд расширений по сравнению с этой более ранней программой, включая:
The generated parsers are portable: they do not require any specific compilers. Bison by default generates LALR(1) parsers but it can also generate canonical LR, IELR(1) and GLR parsers. In POSIX mode, Bison is compatible with Yacc, but also has several extensions over this earlier program, including
Generation of counterexamples for conflicts
Location tracking (e. g., file, line, column)
Rich and internationalizable syntax error messages in the generated parsers
Customizable syntax error generation,
Reentrant parsers
Push parsers, with autocompletion
Support for named references
Several types of reports (graphical, XML) on the generated parser
Support for several programming languages (C, C++, D, or Java)
Flex, an automatic lexical analyser, is often used with Bison, to tokenise input data and provide Bison with tokens. Bison was originally written by Robert Corbett in 1985. Later, in 1989, Robert Corbett released another parser generator named Berkeley Yacc. Bison was made Yacc compatible by Richard Stallman. Bison is free software and is available under the GNU General Public License, with an exception (discussed below) allowing its generated code to be used without triggering the copyleft requirements of the licence.
* Генерацию контрпримеров для конфликтов.
* Отслеживание местоположения (например, файл, строка, столбец).
* Подробные и интернационализированные сообщения об ошибках синтаксиса в сгенерированных парсерах.
* Настраиваемую генерацию сообщений об ошибках синтаксиса.
* Повторно входящие парсеры (Reentrant parsers).
* Парсеры с подавлением (Push parsers) с автодополнением.
* Поддержку именованных ссылок.
* Несколько типов отчетов (графические, XML) о сгенерированном парсере.
* Поддержку нескольких языков программирования (C, C++, D или Java).
The generated parsers are portable: they do not require any specific compilers. Bison by default generates LALR(1) parsers but it can also generate canonical LR, IELR(1) and GLR parsers. In POSIX mode, Bison is compatible with Yacc, but also has several extensions over this earlier program, including
Generation of counterexamples for conflicts
Location tracking (e. g., file, line, column)
Rich and internationalizable syntax error messages in the generated parsers
Customizable syntax error generation,
Reentrant parsers
Push parsers, with autocompletion
Support for named references
Several types of reports (graphical, XML) on the generated parser
Support for several programming languages (C, C++, D, or Java)
Flex, an automatic lexical analyser, is often used with Bison, to tokenise input data and provide Bison with tokens. Bison was originally written by Robert Corbett in 1985. Later, in 1989, Robert Corbett released another parser generator named Berkeley Yacc. Bison was made Yacc compatible by Richard Stallman. Bison is free software and is available under the GNU General Public License, with an exception (discussed below) allowing its generated code to be used without triggering the copyleft requirements of the licence.
Flex, автоматический анализатор лексем, часто используется с Bison для токенизации входных данных и предоставления Bison токенов. Bison был первоначально написан Робертом Корбетом в 1985 году. Позже, в 1989 году, Роберт Корбет выпустил еще один генератор парсеров под названием Berkeley Yacc. Bison был сделан совместимым с Yacc Ричардом Столлманом. Bison является свободным программным обеспечением и распространяется под лицензией GNU General Public License с исключением (описанным ниже), позволяющим использовать его сгенерированный код без соблюдения требований copyleft лицензии.
The generated parsers are portable: they do not require any specific compilers. Bison by default generates LALR(1) parsers but it can also generate canonical LR, IELR(1) and GLR parsers. In POSIX mode, Bison is compatible with Yacc, but also has several extensions over this earlier program, including
Generation of counterexamples for conflicts
Location tracking (e. g., file, line, column)
Rich and internationalizable syntax error messages in the generated parsers
Customizable syntax error generation,
Reentrant parsers
Push parsers, with autocompletion
Support for named references
Several types of reports (graphical, XML) on the generated parser
Support for several programming languages (C, C++, D, or Java)
Flex, an automatic lexical analyser, is often used with Bison, to tokenise input data and provide Bison with tokens. Bison was originally written by Robert Corbett in 1985. Later, in 1989, Robert Corbett released another parser generator named Berkeley Yacc. Bison was made Yacc compatible by Richard Stallman. Bison is free software and is available under the GNU General Public License, with an exception (discussed below) allowing its generated code to be used without triggering the copyleft requirements of the licence.
Возвращение
Повторный вызов (reentrancy) — это функция, добавленная в Bison, которой нет в Yacc. Обычно Bison генерирует нереентрантный парсер. Для обеспечения повторного входа необходимо использовать объявление %define api.pure. Более подробную информацию о повторном вызове в Bison можно найти в руководстве Bison.
Языки вывода
Bison может генерировать код для C, C++, D и Java. Для использования парсера, сгенерированного Bison, из других языков можно использовать инструмент для создания привязок к языкам программирования, например SWIG.
Лицензия и распространение генерируемого кода
Поскольку Bison генерирует исходный код, который затем включается в исходный код других программных проектов, это порождает несколько простых, но интересных вопросов, касающихся авторских прав.
Не требуется лицензия, совместимая с GPL
Код, генерируемый Bison, включает в себя значительные объемы кода из самого проекта Bison. Пакет Bison распространяется на условиях лицензии GNU General Public License (GPL), но к нему добавлено исключение, согласно которому GPL не распространяется на результат работы. В более ранних версиях Bison оговаривалось, что части его вывода также лицензируются под GPL из-за включения функции yyparse из исходного кода в этот вывод.
Распределение посылок с использованием Bison
Проекты свободного программного обеспечения, использующие Bison, могут выбирать, распространять ли исходный код, который передается в Bison, или результирующий C-код, сгенерированный Bison. Оба варианта достаточны для компиляции исходного кода проекта получателем. Однако распространение только исходного кода создает небольшое неудобство: получателям потребуется установленная совместимая версия Bison для генерации необходимого C-кода при компиляции проекта. А распространение только C-кода затрудняет модификацию парсера, поскольку этот код не предназначен для чтения или редактирования человеком – он предназначен для прямой подачи в компилятор C. Эти проблемы можно избежать, распространяя как исходные файлы, так и сгенерированный код. Большинство пользователей будут компилировать, используя сгенерированный код, как и любое другое программное обеспечение, но любой, кто захочет изменить компонент парсера, сможет сначала изменить исходные файлы и повторно сгенерировать код перед компиляцией. Проекты, распространяющие оба варианта, обычно не хранят сгенерированные файлы в системах контроля версий. Эти файлы генерируются только при создании релиза. Некоторые лицензии, такие как GPL, требуют, чтобы исходный код был предоставлен в "предпочтительной форме для внесения изменений". Поэтому проекты, использующие Bison и распространяемые под лицензией GPL, должны распространять файлы, являющиеся входными данными для Bison. Разумеется, они также могут включать сгенерированные файлы.