Jump to content

Беркли Якк

Беркли Якк
Оригинальный автор(ы) Роберт Корбетт
Разработчик(и) Томас Дики
Первоначальный выпуск 2 сентября 1989 г .; 34 года назад ( 1989-09-02 ) [1]
Стабильная версия
20240109 [2]  Отредактируйте это в Викиданных / 9 января 2024 г .; 6 месяцев назад ( 9 января 2024 г. )
Репозиторий
Написано в АНСИ С89
Операционная система Unix-подобный
Тип Генератор парсера
Лицензия общественное достояние
Веб-сайт невидимый остров .сеть /byacc / Отредактируйте это в Викиданных

Berkeley Yacc ( byacc ) — Unix генератор синтаксического анализатора , разработанный для совместимости с Yacc . Первоначально он был написан Робертом Корбеттом и выпущен в 1989 году. [3] Благодаря либеральной лицензии и более быстрой скорости, чем AT&T Yacc, он быстро стал самой популярной версией Yacc. [4] Его преимущества заключаются в том, что он написан на языке ANSI C89 и является общедоступным программным обеспечением.

Он содержит функции, недоступные в Yacc, такие как повторный вход, который реализован способом, широко совместимым с GNU Bison . [5] [6]

В 1985 году Роберт Корбетт разработал оригинальный генератор синтаксического анализатора LALR на основе статьи ДеРемера и Пеннелло 1982 года. [7] Корбетт написал это как часть своего исследования для доктора философии. он получил степень в Калифорнийском университете в Беркли в июне 1985 года. [8] [9] Первоначально он назывался Byson и был несовместим с Yacc , но впоследствии был переименован в Bison и стал основой GNU Bison .

Позже, в 1985 году, Корбетт разработал свой генератор синтаксического анализатора LALR, сделав его Yacc-совместимым и назвав его Zeus, но впоследствии переименовав в Zoo. [10] Корбетт опубликовал исходный код Zoo в группе новостей Usenet, но он остался по большей части незамеченным до тех пор, пока в сентябре 1989 года Корбетт не опубликовал в группе новостей comp.compilers сообщение о размещении исходного кода на FTP-сервере . [1] Была дискуссия о его переименовании, и к октябрю 1989 года он стал известен как Berkeley Yacc (byacc). [11]

В 1995 году Крис Додд разработал BtYacc, производную от Berkeley Yacc с обратным отслеживанием для поддержки синтаксического анализа контекстно-зависимых языков, таких как C++ . [12] [13] основано на статье Меррилла 1993 года, описывающей аналогичные модификации AT&T Yacc. [14] [15] Его возможности поиска с возвратом и устранения семантической неоднозначности позволяют ему генерировать анализаторы для неоднозначных грамматик . Правило, проанализированное, но отклоненное семантической информацией, можно откатить, чтобы синтаксический анализатор мог попробовать другое правило. [16] [17] Однако его также критиковали за необходимость бесплатных пробных действий с побочными эффектами и за негибкое урегулирование конфликтов, связанных с сокращением смен. [18]

В 1997 году Вадим Маслов взял на себя сопровождение BtYacc для поддержки парсера COBOL, разработанного его компанией. [19] К 1999 году последняя версия 3.0 была преобразована в C++ чего она больше не реализовывалась на C. , в результате [20]

В 2000 году Томас Э. Дики портировал Berkeley Yacc на OpenVMS, чтобы облегчить перенос Tin на VMS. Не сумев найти другого сопровождающего, Дики поддерживает Berkeley Yacc с февраля 2002 года. [21] Существенным обновлением стал переход с K&R C на ANSI C89 . [21]

В 2014 году Том Шилдс интегрировал возврат BtYacc в Berkeley Yacc, фактически включив BtYacc и снова поддерживая C (вместо только C++) в выпусках Dickey с апреля 2014 года. [22]

Генераторы парсеров обычно работают с тремя языками: языком, на котором реализован генератор, языком, на котором реализован сгенерированный парсер, и, конечно же, метаязыком , который описывает все, что должен анализировать сгенерированный парсер. Четвертым языком можно считать любой язык, который анализирует сгенерированный синтаксический анализатор, но генераторы синтаксического анализатора не обрабатывают его напрямую, а просто сосредотачиваются на создании синтаксического анализатора на основе заданного описания, позволяя сгенерированному синтаксическому анализатору работать с ним. Yacc написан на C и генерирует синтаксические анализаторы на C на основе собственных описаний метаязыка Yacc. Именно так работает Berkely Yacc (отсюда и его совместимость), однако был создан ряд производных, позволяющих генерировать синтаксические анализаторы на языках, отличных от C.

Рэй Лишнер разработал perl-byacc (pbyacc) на основе byacc 1.6, чтобы он также мог генерировать парсеры в Perl . Позже Ричард «Рик» Онемус перенес патчи с byacc 1.6 на byacc 1.8. [23] А позже, в 1996 году, Джейк Донэм разработал p5yacc на основе perl-yacc 1.8.2, чтобы созданные им парсеры Perl использовали классы Perl 5 .

В 1994 году Майк Клейн разработал tyacc на основе perl-yacc 1.8.2, чтобы он также мог генерировать анализаторы в Tcl. [24]

В 1997 году Боб Джеймисон разработал BYACC/Java (позже названный BYACC/J или byaccj) на основе byacc 1.8, чтобы он также мог генерировать синтаксические анализаторы на Java . [25] [26]

В 2000 году Брюс Бансен объединил возможности парсера Java BYACC/J с perl-yacc и добавил возможность генерировать парсеры на Python . [27] В 2013 году Томас Дикерсон внес в него дальнейшие улучшения, назвав его PyByacc. [28]

В 2003 году Дэйв Боденстаб объединил tyacc и p5yacc для разработки PERL-TCL-YACC, перебазировав его из версии 4.8 yacc из FreeBSD (производной byacc). [29]

См. также

[ редактировать ]
  1. ^ Jump up to: а б Корбетт, Роберт (2 сентября 1989 г.). «Генератор парсера PD LALR(1)» . Группа новостей : comp.compilers . Usenet:   [электронная почта защищена] . Проверено 17 сентября 2021 г.
  2. ^ «Индекс /archives/byacc» .
  3. ^ Дуг Браун; Джон Левин; Тони Мейсон (октябрь 1992 г.), lex & yacc (2-е изд.), O'Reilly Media
  4. ^ Джон Левин (август 2009 г.), flex & bison , O'Reilly Media
  5. ^ «Беркли Якк» . invisible-island.net . Архивировано из оригинала 19 октября 2020 г. Проверено 10 ноября 2020 г. ... поддержка реентерабельного кода, который развился до такой степени, что его можно сравнивать и настраивать против bison.
  6. ^ "Журнал изменений Berkeley Yacc, см. запись "2010-06-07 Andres.Meji" " . 07.06.2010. Архивировано из оригинала 10 ноября 2020 г. Проверено 10 ноября 2020 г.
  7. ^ ДеРемер, Фрэнк; Пеннелло, Томас (октябрь 1982 г.). «Эффективное вычисление наборов упреждающего просмотра LALR (1)» (PDF) . АКМ Транс. Программа. Ланг. Сист. 4 (4). АКМ : 615–649. дои : 10.1145/69622.357187 . ISSN   0164-0925 . S2CID   52833742 . Проверено 26 августа 2017 г.
  8. ^ Корбетт, Роберт (24 сентября 1998 г.). «Re: Кто-нибудь расширял MAXTABLE в парсерах yacc?» . Группа новостей : comp.compilers . Usenet:   [электронная почта защищена] . Проверено 26 августа 2017 г.
  9. ^ Корбетт, Роберт Пол (июнь 1985 г.). Статическая семантика и восстановление ошибок компилятора (доктор философии). Калифорнийский университет в Беркли . ДТИК ADA611756 .
  10. ^ Корбетт, Роберт (6 сентября 1989 г.). «Назовите этот генератор анализатора PD» . Группа новостей : comp.compilers . Usenet:   [электронная почта защищена] . Проверено 26 августа 2017 г.
  11. ^ Корбетт, Роберт (3 октября 1989 г.). «Беркли Якк (новая версия)» . Группа новостей : comp.compilers . Usenet:   [электронная почта защищена] . Проверено 17 сентября 2021 г.
  12. ^ Додд, Крис (7 марта 1995 г.). «BTYACC — yacc с обратным отслеживанием и унаследованными атрибутами» . Группа новостей : comp.compilers . Usenet:   [электронная почта защищена] . Проверено 17 сентября 2021 г.
  13. ^ «README.txt» . BtYacc: обратное отслеживание Yacc. Сибирские Системы . Проверено 14 мая 2020 г.
  14. ^ «README.BYACC» . Возврат yacc. Гитхаб . Проверено 12 августа 2022 г.
  15. ^ Меррилл, Гэри Х. (1 августа 1993 г.). «Разбор грамматик, отличных от LR (k), с помощью yacc». Программное обеспечение: практика и опыт . 23 (8): 829–850. CiteSeerX   10.1.1.14.1958 . дои : 10.1002/спе.4380230803 . ISSN   0038-0644 . S2CID   14695500 .
  16. ^ "btyacc(1)" . Растяжка Debian — Руководства Debian .
  17. ^ Додд, Крис (13 февраля 2019 г.). "КрисДодд/btyacc" . Гитхаб .
  18. ^ Терстон, Адриан Д.; Корди, Джеймс Р. (2006). «Алгоритм LR с возвратом для анализа неоднозначных контекстно-зависимых языков» (PDF) . В Эрдогмусе, Хакан; Струля, Элени; Стюарт, Дарлин А. (ред.). Материалы конференции Центра перспективных исследований совместных исследований 2006 г., 16–19 октября 2006 г., Торонто, Онтарио, Канада . КАСКОН 2006. стр. 39–53. CiteSeerX   10.1.1.518.7094 . дои : 10.1145/1188966.1188972 . Проверено 14 мая 2020 г.
  19. ^ Маслов, Вадим (8 октября 1997 г.). «Доступна версия 1.1 BtYacc (Backtracking Yacc)» . Группа новостей : comp.compilers . Usenet:   [электронная почта защищена] . Проверено 17 сентября 2021 г.
  20. ^ «BtYacc: генератор синтаксического анализатора Yacc с обратным отслеживанием» . Сибирские Системы . Проверено 18 мая 2020 г.
  21. ^ Jump up to: а б «БАЙАКК-БЕРКЛИ ЯКК» . invisible-island.net . Архивировано из оригинала 6 апреля 2002 г. Проверено 10 ноября 2020 г.
  22. ^ «Выпуск t20140407» . ThomasDickey/byacc-снапшоты. Гитхаб . Проверено 18 мая 2020 г.
  23. ^ «БЛАГОДАРНОСТИ» . elfprince13/PyByacc. Гитхаб . 14 января 2013 г. Проверено 1 ноября 2021 г.
  24. ^ "tyacc-0.9.README" . паб/языки/tcl/ibp. ftp.funet.fi . Проверено 1 ноября 2021 г.
  25. ^ «Домашняя страница BYACC/Java» . Боб Джеймисон. ЛинКом Инновации АСГ . Архивировано из оригинала 5 декабря 1998 г.
  26. ^ "master/src/skeleton.c" . поакк/дж. СоурсФордж . Проверено 28 октября 2021 г.
  27. ^ «Беркли Якк» . СоурсФордж . Проверено 1 ноября 2021 г.
  28. ^ "elfprince13/PyByacc" . Гитхаб . 14 января 2013 г. Проверено 1 ноября 2021 г.
  29. ^ «BYACC, производящий парсеры Perl/Tcl» . Домашняя страница Дэйва Боденстаба . Архивировано из оригинала 1 мая 2021 г.
[ редактировать ]
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: de6e81f7f5de10aa6257349d11cc6d72__1698892860
URL1:https://arc.ask3.ru/arc/aa/de/72/de6e81f7f5de10aa6257349d11cc6d72.html
Заголовок, (Title) документа по адресу, URL1:
Berkeley Yacc - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)