stringtranslate.com

Беркли Якк

Berkeley Yacc ( byacc ) — это генератор парсеров Unix , разработанный для совместимости с Yacc . Первоначально он был написан Робертом Корбеттом и выпущен в 1989 году. [3] Благодаря своей либеральной лицензии и более высокой скорости, чем Yacc от AT&T, он быстро стал самой популярной версией 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. ^ ab Corbett, Robert (2 сентября 1989 г.). "PD LALR(1) parser generator". Группа новостей : comp.compilers. Usenet:  [email protected] . Получено 17 сентября 2021 г.
  2. ^ "Индекс /archives/byacc".
  3. ^ Дуг Браун; Джон Левин; Тони Мейсон (октябрь 1992 г.), lex & yacc (2-е изд.), O'Reilly Media
  4. ^ Джон Левин (август 2009 г.), flex & bison , O'Reilly Media
  5. ^ "Berkeley Yacc". invisible-island.net . Архивировано из оригинала 2020-10-19 . Получено 2020-11-10 . ...поддержка реентерабельного кода, которая развилась в byacc до такой степени, что ее можно сравнивать и настраивать с помощью bison.
  6. ^ "Berkeley Yacc Change log, see entry "2010-06-07 Andres.Meji"". 2010-06-07. Архивировано из оригинала 2020-11-10 . Получено 2020-11-10 .
  7. ^ ДеРемер, Фрэнк; Пеннелло, Томас (октябрь 1982 г.). «Эффективное вычисление наборов прогнозов LALR(1)» (PDF) . ACM Trans. Program. Lang. Syst. 4 (4). ACM : 615–649. doi :10.1145/69622.357187. ISSN  0164-0925. S2CID  52833742 . Получено 26.08.2017 .
  8. ^ Корбетт, Роберт (24 сентября 1998 г.). "Re: Кто-нибудь расширял MAXTABLE в парсерах yacc?". Группа новостей : comp.compilers. Usenet:  [email protected] . Получено 26 августа 2017 г.
  9. ^ Корбетт, Роберт Пол (июнь 1985 г.). Статическая семантика и восстановление после ошибок компилятора (доктор философии). Калифорнийский университет в Беркли . DTIC ADA611756.
  10. ^ Корбетт, Роберт (6 сентября 1989 г.). «Назовите этот генератор парсеров PD». Группа новостей : comp.compilers. Usenet:  [email protected] . Получено 26 августа 2017 г.
  11. Корбетт, Роберт (3 октября 1989 г.). "Berkeley Yacc (новая версия)". Группа новостей : comp.compilers. Usenet:  [email protected] . Получено 17 сентября 2021 г.
  12. ^ Додд, Крис (7 марта 1995 г.). "BTYACC -- yacc с откатом и унаследованными атрибутами". Группа новостей : comp.compilers. Usenet:  [email protected] . Получено 17 сентября 2021 г.
  13. ^ "README.txt". BtYacc: BackTracking Yacc. Siber Systems . Получено 2020-05-14 .
  14. ^ "README.BYACC". Возврат к yacc. GitHub . Получено 2022-08-12 .
  15. ^ Merrill, Gary H. (1 августа 1993 г.). «Разбор не-LR(k) грамматик с помощью yacc». Software: Practice and Experience . 23 (8): 829–850. CiteSeerX 10.1.1.14.1958 . doi :10.1002/spe.4380230803. ISSN  0038-0644. S2CID  14695500. 
  16. ^ "btyacc(1)". Debian stretch — Debian Manpages .
  17. Додд, Крис (13 февраля 2019 г.). "ChrisDodd/btyacc". GitHub .
  18. ^ Терстон, Адриан Д.; Корди, Джеймс Р. (2006). «Алгоритм обратного отслеживания LR для анализа неоднозначных контекстно-зависимых языков» (PDF) . В Erdogmus, Hakan; Stroulia, Eleni; Stewart, Darlene A. (ред.). Труды конференции 2006 года Центра передовых исследований по совместным исследованиям, 16–19 октября 2006 г., Торонто, Онтарио, Канада . CASCON 2006. стр. 39–53. CiteSeerX 10.1.1.518.7094 . doi :10.1145/1188966.1188972 . Получено 14.05.2020 . 
  19. ^ Маслов, Вадим (8 октября 1997 г.). «Версия 1.1 BtYacc (Backtracking Yacc) доступна». Группа новостей : comp.compilers. Usenet:  [email protected] . Получено 17 сентября 2021 г.
  20. ^ "BtYacc: Генератор парсеров Yacc BackTracking". Siber Systems . Получено 18.05.2020 .
  21. ^ ab "BYACC - BERKELEY YACC". invisible-island.net . Архивировано из оригинала 2002-04-06 . Получено 2020-11-10 .
  22. ^ "Выпуск t20140407". ThomasDickey/byacc-snapshots. GitHub . Получено 2020-05-18 .
  23. ^ "БЛАГОДАРНОСТИ". elfprince13/PyByacc. GitHub . 2013-01-14 . Получено 2021-11-01 .
  24. ^ "tyacc-0.9.README". pub/languages/tcl/ibp. ftp.funet.fi . Получено 01.11.2021 .
  25. ^ "BYACC/Java Home Page". Боб Джеймисон. LinCom Innovations ASG . Архивировано из оригинала 1998-12-05.
  26. ^ "master/src/skeleton.c". byacc/j. SourceForge . Получено 28.10.2021 .
  27. ^ "Berkeley Yacc". SourceForge . Получено 2021-11-01 .
  28. ^ "elfprince13/PyByacc". GitHub . 2013-01-14 . Получено 2021-11-01 .
  29. ^ "BYACC, который производит анализаторы Perl/Tcl". Домашняя страница Дэйва Боденстаба . Архивировано из оригинала 2021-05-01.

Внешние ссылки