Jump to content

Якк

(Перенаправлено с YACC )
Якк
Оригинальный автор(ы) Стивен С. Джонсон
Репозиторий
Написано в С
Операционная система Unix , Unix-подобные , Plan 9 , Inferno
Платформа Кросс-платформенный
Тип Команда
Лицензия План 9: МОЯ лицензия

Yacc ( Еще один компилятор-компилятор ) — компьютерная программа для операционной системы Unix, разработанная Стивеном К. Джонсоном . Это генератор синтаксического анализатора LALR с просмотром слева направо (LALR) , генерирующий анализатор LALR (часть компилятора , которая пытается придать синтаксический смысл исходному коду ) на основе формальной грамматики , написанной в обозначениях, аналогичных Форма Бэкуса–Наура (БНФ). [1] Yacc поставляется как стандартная утилита в BSD и AT&T Unix. [2] GNU на базе Linux Дистрибутивы включают Bison , совместимую с будущими версиями замену Yacc. [3]

В начале 1970-х годов Стивен С. Джонсон , ученый-компьютерщик из Bell Labs / AT&T , разработал Yacc, потому что он хотел вставить исключительный оператор или в языка B. компилятор [4] (разработан с использованием McIlroy ) компании TMG компилятора-компилятора [5] ), но это оказалось непростой задачей. В результате его коллега из Bell Labs в Аль-Ахо направил его к Дональда Кнута работе по парсингу LR , которая послужила основой для Yacc. [4] Якк находился под влиянием [6] и получил свое название от компилятора-компилятора TMG. [7]

Yacc изначально был написан на языке программирования B , но вскоре был переписан на C Аланом Снайдером. [5] Он появился как часть версии 3 Unix . [8] а полное описание Yacc было опубликовано в 1975 году. [6]

Джонсон использовал Yacc для создания C. портативного компилятора [8] Бьёрн Страуструп также пытался использовать Yacc для создания формальной спецификации C++ , но «потерпел поражение из-за синтаксиса C». [9] Считая его непригодным для формальной спецификации языка, Страуструп все же приступил к использованию Yacc для реализации Cfront , первой реализации C++. [10]

В интервью 2008 года Джонсон отметил, что «вклад, который Якк внес в распространение Unix и C , — это то, чем я горжусь больше всего». [11]

Описание

[ редактировать ]

Входные данные для Yacc — это грамматика с фрагментами кода C (называемыми «действиями»), прикрепленными к ее правилам. Его выходные данные — это синтаксический анализатор на языке C, который выполняет фрагменты кода C, связанные с каждым правилом, как только правило распознается. Типичные действия включают в себя построение деревьев разбора . Используя пример Джонсона, если вызов node(label, left, right) создает узел двоичного дерева разбора с указанным метка и дети, затем правило

expr : expr '+' expr  { $$ = node('+', $1, $3); }

распознает выражения суммирования и строит для них узлы. Специальные идентификаторы $$ , 1 доллар и $3 парсера относятся к элементам стека . [6]

Yacc производит только синтаксический анализатор (анализатор фраз), который можно использовать отдельно в случае синтаксического анализа без сканирования , однако полный синтаксический анализ обычно требует, чтобы внешний лексический анализатор сначала выполнил этап токенизации (анализ слов), за которым затем следует этап синтаксического анализа. правильный. [6] генераторы лексических анализаторов, такие как Lex или Flex Для этой цели широко доступны . Стандарт IEEE POSIX P1003.2 определяет функциональность и требования как для Lex, так и для Yacc. [12]

Некоторые версии AT&T Yacc стали открытыми . Например, исходный код доступен в стандартных дистрибутивах Plan 9 . [13]

Yacc и подобные программы (в основном переработанные) пользуются большой популярностью. Сам Yacc раньше был доступен в качестве генератора синтаксического анализатора по умолчанию в большинстве систем Unix, хотя с тех пор он был вытеснен более поздними, в значительной степени совместимыми программами, такими как Berkeley Yacc , GNU Bison , MKS Yacc и Abraxas PCYACC. Обновленная версия исходной версии AT&T Yacc включена в проект Sun OpenSolaris . Каждый из них предлагает небольшие улучшения и дополнительные функции по сравнению с исходным Yacc, но концепция и базовый синтаксис остались прежними. [14]

Yacc также был одним из нескольких инструментов UNIX, доступных для операционной системы UNOS компании Charles River Data Systems по лицензии Bell Laboratories . [15]

Среди языков, которые были впервые реализованы с помощью Yacc, — AWK , C++ , [10] уравнение и рис . [16] Yacc также использовался в Unix для реализации портативного компилятора C , а также парсеров для таких языков программирования, как FORTRAN 77 , Ratfor , APL , bc , m4 и т. д. [8] [17]

Yacc также был переписан для других языков, включая OCaml , [18] Ratfor , ML , Ada , Pascal , Java , PHP , Python , Ruby , Go , [19] Общий Лисп [20] и Эрланг . [21]

См. также

[ редактировать ]
  1. ^ «А-Я языков программирования: YACC» . Компьютерный мир. Архивировано из оригинала 31 января 2013 года . Проверено 30 ноября 2012 г.
  2. ^ Левин, Джон (1992). Лекс и Якк . Севастополь, Калифорния: O'Reilly & Associates. п. хх. ISBN  1-56592-000-7 .
  3. ^ Левин, Джон (2009). Флекс и бизон . Севастополь, Калифорния: O'Reilly Media. п. хв. ISBN  978-0-596-15597-1 .
  4. ^ Jump up to: а б Моррис, Ричард (1 октября 2009 г.). «Стивен Кертис Джонсон: Компьютерщик недели» . Программное обеспечение «Красные ворота» . Проверено 19 января 2018 г.
  5. ^ Jump up to: а б Ричи, Деннис М. (апрель 1993 г.). «Развитие языка Си». История языков программирования---II . Ассоциация вычислительной техники, Inc. (опубликовано 1 января 1996 г.). дои : 10.1145/234286.1057834 . ISBN  0-201-89502-1 . стр. 675, 684: После того, как версия B для TMG заработала, Томпсон переписал B сам по себе (шаг начальной загрузки).… Когда Джонсон вернулся в Bell Labs в 1973 году, он был сбит с толку, обнаружив, что язык, семена которого он привнес в Канада развилась дома; даже его собственная программа yacc была переписана на C Аланом Снайдером.
  6. ^ Jump up to: а б с д Джонсон, Стивен К. (1975). Yacc: Еще один компилятор-компилятор (Технический отчет). Мюррей Хилл, Нью-Джерси: AT&T Bell Laboratories. 32 . Проверено 31 января 2020 г.
  7. ^ «Ранние системы письма переводчиков» . Компьютерная лаборатория Атлас.
  8. ^ Jump up to: а б с Макилрой, доктор медицины (1987). Читатель Research Unix: аннотированные выдержки из Руководства программиста, 1971–1986 (PDF) (Технический отчет). CSTR. Лаборатории Белла. 139.
  9. ^ Страуструп, Бьерн . «История C++: 1979–1991» (PDF) .
  10. ^ Jump up to: а б Страуструп, Бьерн . «Исходный код Cfront» .
  11. ^ Гамильтон, Наоми (9 июля 2008 г.). «Yacc, Unix и советы выпускника Bell Labs Стивена Джонсона» . www.computerworld.com . Архивировано из оригинала 22 августа 2020 г. Проверено 10 ноября 2020 г.
  12. ^ lex – Справочник по оболочке и утилитам, Единая спецификация UNIX , версия 4 от Open Group , yacc – Справочник по оболочке и утилитам, Единая спецификация UNIX , версия 4 от Open Group .
  13. ^ «plan9: выпуск Plan 9 в Калифорнийском университете в Беркли под лицензией GPLv2» . Гитхаб . 26 декабря 2017 года . Проверено 2 января 2018 г.
  14. ^ Руководство для бизонов: История
  15. ^ Путеводитель по Вселенной для инсайдеров (PDF) . Charles River Data Systems, Inc., 1983. с. 13.
  16. ^ «Специальный выпуск UNIX: профессора Керниган и Брейлсфорд» . Компьютерфил . 30 сентября 2015 г. Архивировано из оригинала 11 декабря 2021 г.
  17. ^ Керниган, Брайан В.; Пайк, Роб (1984). Среда программирования Unix . Прентис Холл. ISBN  0-13-937681-Х .
  18. ^ «Руководство пользователя OCaml: Глава 12 Лексеры и генераторы синтаксических анализаторов (ocamllex, ocamlyacc)» . Проверено 25 ноября 2013 г.
  19. ^ «Yacc.go: версия Yacc для языка программирования Go» . Проверено 15 июля 2017 г.
  20. ^ «CL-Yacc: версия Yacc для Common Lisp» .
  21. ^ "yecc: реализация Yacc на Erlang" .
  22. ^ Джон Левин (август 2009 г.), flex & bison , O'Reilly Media
[ редактировать ]
  • Игровая площадка для изучения и тестирования синтаксиса
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: b700d0538b7a3077de0027b613507337__1722623340
URL1:https://arc.ask3.ru/arc/aa/b7/37/b700d0538b7a3077de0027b613507337.html
Заголовок, (Title) документа по адресу, URL1:
Yacc - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)