~~~~~~~~~~~~~~~~~~~~ Arc.Ask3.Ru ~~~~~~~~~~~~~~~~~~~~~ 
Номер скриншота №:
✰ CB31A6B225C78154A8152C452CA78B33__1707583980 ✰
Заголовок документа оригинал.:
✰ Yacc - Wikipedia ✰
Заголовок документа перевод.:
✰ Якк — Википедия ✰
Снимок документа находящегося по адресу (URL):
✰ https://en.wikipedia.org/wiki/Yacc ✰
Адрес хранения снимка оригинал (URL):
✰ https://arc.ask3.ru/arc/aa/cb/33/cb31a6b225c78154a8152c452ca78b33.html ✰
Адрес хранения снимка перевод (URL):
✰ https://arc.ask3.ru/arc/aa/cb/33/cb31a6b225c78154a8152c452ca78b33__translat.html ✰
Дата и время сохранения документа:
✰ 15.06.2024 02:42:58 (GMT+3, MSK) ✰
Дата и время изменения документа (по данным источника):
✰ 10 February 2024, at 19:53 (UTC). ✰ 

~~~~~~~~~~~~~~~~~~~~~~ Ask3.Ru ~~~~~~~~~~~~~~~~~~~~~~ 
Сервисы Ask3.ru: 
 Архив документов (Снимки документов, в формате HTML, PDF, PNG - подписанные ЭЦП, доказывающие существование документа в момент подписи. Перевод сохраненных документов на русский язык.)https://arc.ask3.ruОтветы на вопросы (Сервис ответов на вопросы, в основном, научной направленности)https://ask3.ru/answer2questionТоварный сопоставитель (Сервис сравнения и выбора товаров) ✰✰
✰ https://ask3.ru/product2collationПартнерыhttps://comrades.ask3.ru


Совет. Чтобы искать на странице, нажмите Ctrl+F или ⌘-F (для MacOS) и введите запрос в поле поиска.
Arc.Ask3.ru: далее начало оригинального документа

Якк — Википедия Jump to content

Якк

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

Yacc ( Еще один компилятор-компилятор ) — компьютерная программа для операционной системы Unix , разработанная Стивеном К. Джонсоном . Это генератор анализатора с просмотром слева направо (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) создает узел двоичного дерева разбора с указанным метка и дети, затем правило

выражение   :   выражение   '+'   выражение    {   $$   =   узел  (  '+'  ,   $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] Ратфор , ML , Ада , Паскаль , Java , 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. ^ Перейти обратно: а б Моррис, Ричард (1 октября 2009 г.). «Стивен Кертис Джонсон: Компьютерщик недели» . Программное обеспечение «Красные ворота» . Проверено 19 января 2018 г.
  5. ^ Перейти обратно: а б Ричи, Деннис М. (апрель 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. ^ Перейти обратно: а б с д Джонсон, Стивен К. (1975). Yacc: Еще один компилятор-компилятор (Технический отчет). Мюррей Хилл, Нью-Джерси: AT&T Bell Laboratories. 32 . Проверено 31 января 2020 г.
  7. ^ «Ранние системы письма переводчиков» . Компьютерная лаборатория Атлас.
  8. ^ Перейти обратно: а б с Макилрой, доктор медицины (1987). Читатель Research Unix: аннотированные выдержки из Руководства программиста, 1971–1986 (PDF) (Технический отчет). CSTR. Лаборатории Белла. 139.
  9. ^ Страуструп, Бьерн . «История C++: 1979–1991» (PDF) .
  10. ^ Перейти обратно: а б Страуструп, Бьерн . «Исходный код 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
Номер скриншота №: CB31A6B225C78154A8152C452CA78B33__1707583980
URL1:https://en.wikipedia.org/wiki/Yacc
Заголовок, (Title) документа по адресу, URL1:
Yacc - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть, любые претензии не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, денежную единицу можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)