yacc_doc (1119422)

Файл №1119422 yacc_doc (Синтаксические и лексические анализаторы)yacc_doc (1119422)2019-05-09СтудИзба
Просмтор этого файла доступен только зарегистрированным пользователям. Но у нас супер быстрая регистрация: достаточно только электронной почты!

Текст из файла

Начало формы

Конец формы

Генератор программ синтаксического анализа yacc

Производственно-внедренческий кооператив

"И Н Т Е Р Ф Е Й С"

Диалоговая Единая Мобильная

Операционная Система

Демос/P 2.1

Генератор программ синтаксического анализа yacc

Москва

1988

Аннотация

Значительная часть создаваемых программ, рассчитанных

на определенную структуру входной информации, явно или

неявно включает в себя некоторую процедуру синтаксического

анализа. В задачах, где пользователю при задании входной

информации предоставляется относительная свобода (в отноше-

нии сочетания и последовательности структурных элементов),

синтаксический анализ достаточно сложен. При решении подоб-

ных задач существенную поддержку могут оказать сервисные

программы, осуществляющие построение синтаксических (грамма-

тических) анализаторов на основе заданных сведений о синтак-

сической структуре входной информации. yacc относится к

числу этих сервисных программ - генераторов синтаксических

анализаторов.

Поскольку обширной областью, где наиболее явно видна

необходимость (нетривиального) грамматического анализа, а

следовательно и его автоматизации, является область создания

трансляторов (в частности, компиляторов), программы, подоб-

ные yacc, получили еще название компиляторов (или генерато-

ров) компиляторов.

Заметим, что понятие транслятора может относиться не

только к языкам программирования, но и к командным языкам,

входным языкам любых диалоговых систем, языкам управления

технологическими процессами и т.п.

Пользователь yacc должен описать структуру своей вход-

ной информации (грамматику) как набор правил в виде, близком

к Бэкусово-Науровской форме (БНФ). Каждое правило описывает

грамматическую конструкцию, называемую нетерминальным симво-

лом, и сопоставляет ей имя. С точки зрения грамматического

разбора правила рассматриваются как правила вывода (подста-

новки). Грамматические правила описываются в терминах неко-

торых исходных конструкций, которые называются лексическими

единицами, или лексемами. Имеется возможность задавать лек-

семы непосредственно (литерально) или употреблять в грамма-

тических правилах имя лексемы. Как правило, имена сопостав-

ляются лексемам, соответствующим классам объектов, конкрет-

ное значение которых не существенно для целей грамматичес-

кого анализа. (Иногда в литературе с понятием лексемы совпа-

дает понятие терминального символа; однако, ряд авторов

называет терминальными символами отдельные символы стандарт-

ного набора). Примерами имен лексем могут служить идентифи-

катор и число, а введение таких лBексем позволяет обобщить

конкретные способы записи идентификаторов и чисел. В некото-

рых случаях имена лексем служат для придания правилам боль-

шей выразительности.

Лексемы должны распознаваться программой лексического

анализа, определяемой пользователем. Пользователь же предва-

рительно выбирает конструкции,которые более удобно и

эффективно распознавать непосредственно, и в соответствии с

этим объявляет имена лексем. Пользовательская программа лек-

сического анализа - лексический анализатор - осуществляет

чтение реальной входной информации и передает синтаксичес-

кому анализатору распознанные лексемы.

Как уже отмечалось, yacc обеспечивает автоматическое

построение лишь процедуры грамматического анализа. Однако,

действия по обработке входной информации обычно должны

выполняться по мере распознавания на входе тех или иных

допустимых грамматических конструкций. Поэтому наряду с

заданием грамматики входных текстов yacc предусматривает

воможность описания для отдельных конструкций семантических

процедур (действий) с тем, чтобы они были включены в прог-

рамму грамматического разбора. В зависимости от характера

пользовательских семантических процедур (интерпретация рас-

познанного фрагмента входного текста, генерация фрагмента

объектного кода, отметка в справочной таблице или форматиро-

вание вершины в дереве разбора) генерируемая с помощью yacc

программа будет обеспечивать кроме анализа тот или иной вид

обработки входного текста, в частности, его компиляцию или

интерпретацию.

Итак, пользователь yacc подготавливает общее описание

(спецификации) обработки входного потока, включающее пра-

вила, описывающие входные конструкции, кодовую часть, к

которой должно быть организовано обращение при обнаружении

этих конструкций, и программу ввода базовых элементов потока

(лексический анализатор). Kомпилятор компиляторов обеспечи-

вает создание подпрограммы (синтаксического анализатора),

реализующей процедуру обработки входного потока в соответст-

вии с заданными спецификациями.

yacc написан на языке Си и работает под управлением

системы ДЕМОС.

К компонентам компилятора компиляторов относятся выпол-

няемый файл yacc, библиотека стандартных программ

/lib/liby.a, Файл /usr/lib/yaccpar. Заключительная фаза

построения компилятора требует применения компилятора языка

Си.

1. Принципы работы yacc

Грамматические анализаторы, создаваемые с помощью yacc,

реализуют так называемый LALR(1)-разбор, являющийся модифи-

кацией одного из основных методов разбора "снизу вверх" -

LR(k)-разбора (буквы L(eft) и R(ight) в обоих сокращениях

означают соответственно чтение входных символов слева нап-

раво и использование правостороннего вывода. Индекс в скоб-

ках показывает число предварительно просматриваемых лекси-

ческих единиц).

- 3 -

Любой разбор по принципу "снизу вверх" (или восходящий

разбор) состоит в попытке приведения всей совокупности вход-

ных данных (входной цепочки) к так называемому "начальному

символу грамматики" (это понятие будет объяснено в разделе

4.1) путем последовательного применения правил вывода.

В каждый момент грамматического разбора анализатор

находится в некотором состоянии, определяемом предысторией

разбора, и в зависимости от очередной лексемы предпринимает

то или иное действие для перехода к новому состоянию. Разли-

чают два типа действий: сдвиг, т.е. чтение следующей входной

лексемы, и свертку, т.е. применение одного из правил подс-

тановки для замещения нетерминалом последовательности симво-

лов, соответствующей правой части правила. Работа yacc по

генерации процедуры грамматического анализа заключается в

построении таблиц, которые для каждого из состояний опреде-

ляют тип действий анализатора и номер следующего состояния в

соответствии с каждой из входных лексем.

Любой метод разбора требует грамматик с определенными

свойствами. В этом смысле yacc предполагает контекстно-

свободные грамматики со свойствами LALR(1). LALR(1)-

грамматики, являясь подмножеством LR(1)-грамматик, допускают

при построении таблиц разбора сокращение общего числа состо-

яний за счет объединения идентичных состояний, различающихся

только набором символов-следователей (символов, которые

могут следовать после применения одного из правил вывода,

если разбор по этому правилу проходил через данное состоя-

ние). Другие грамматики являются неоднозначными для приня-

того в yacc метода разбора и вызовут конфликты (раздел 5).

Однако, если язык, описываемый данной грамматикой, в прин-

ципе допускает задание грамматики, однозначной для данного

метода разбора, то yacc позволяет без перестройки грамматики

построить грамматический анализатор, разрешающий конфликты

на основе механизма приоритетов (раздел 5).

2. Входные и выходные файлы, структура грамматического ана-

лизатора

Входная информация для yacc задается в спецификационном

файле, структура которого рассматривается в разделе 4.

На выходе компилятора компиляторов в результате обра-

ботки спецификаций создается файл y.tab.c с исходным текстом

Си-процедур, составляющих грамматический анализатор. Основ-

ной в файле y.tab.c является процедура yyparse, реализующая

алгоритм грамматического разбора. При формировании ее yacc

использует файл /usr/lib/yaccpar, содержащий неизменяемую

часть анализатора. Кроме yyparse, в файл y.tab.c yacc вклю-

чает построенные им таблицы разбора, описания и программные

фрагменты пользовательских спецификаций.

- 4 -

Процедура yyparse представляет собой целочисленную

функцию, возвращающую значение 0 или 1. Значение 0 возвраща-

ется в случае успешного разбора по достижении признака конца

файла, значение 1- в случае несоответствия входного текста

заданным спецификациям. Процедура yyparse содержит многок-

ратное обращение к процедуре лексического анализа yylex,

текст которой либо переносится в файл y.tab.c из специфика-

ционного файла, либо прикомпоновывается впоследствии.

Для организации обращения к процедуре yyparse в библио-

теке yacc существует стандартная процедура main, не содержа-

щая помимо обращения к yyparse никаких действий. Пользова-

тель может написать собственную процедуру main, включив в

нее как начальные действия, предваряющие вызов yyparse

(установка нужных режимов, открытие файлов, частичное запол-

нение таблиц), так и действия по завершении разбора, которым

должен предшествовать анализ возвращаемого yyparse значения;

действиями в случае успешного разбора могут быть закрытие

файлов, вывод результатов, вызов следующей фазы транслятора,

в частности, повторный вызов yyparse. Для замены стандартной

процедуры пользовательской программой main она должна быть

описана в спецификационном файле или присоединена на этапе

вызова Си- компилятора для подготовки исполняемой программы.

Кроме выходного файла y.tab.c, yacc может дополнительно

генерировать следующие выходные файлы:

y.output

содержащий описание состояний анализатора и сообщения о

конфликтах (раздел 6)

y.tab.h

содержащий описание лексем (раздел 4.3).

Для генерации этих файлов требуется задание соответст-

вующих флагов при вызове yacc.

3. Процедура построения грамматического анализатора

Построение грамматического анализатора осуществляется в

два этапа. На первом этапе файл спецификаций входного языка

обрабатывается компилятором компиляторов yacc, для чего

задается командная строка

yacc [-vd] yfile

Здесь yfile - имя файла спецификаций, а флаги имеют следую-

щий смысл:

v - сформировать в файле y.output подробное описание грам-

матического анализатора;

- 5 -

d - сформировать в файле y.tab.h описание лексем. Тексто-

вые файлы y.output и y.tab.h содержат справочную инфор-

мацию для пользователя и никак не используются на вто-

ром этапе построения грамматического анализатора.

Основной результат работы yacc - процедура yyparse и

грамматические таблицы - помещается в файл y.tab.c. На вто-

ром этапе построения грамматического анализатора для получе-

ния в файле a.out исполняемой программы компилируется файл

y.tab.c и присоединяются другие программные компоненты:

cc y.tab.c [cfile...ofile...lfile...] -ly

cfile, ofile, lfile - имена исходных, объектных и библиотеч-

ных файлов, содержащих присоединяемые процедуры. В этот спи-

сок не включается имя стандартной библиотеки yacc

/lib/liby.a, ее подключение обеспечивается заданием флага

ly. Этот флаг полезно считать обязательным.

4. Задание входной информации yacc

4.1. Структура спецификационного файла

Пользовательские спецификации, задающие правила органи-

зации входной информации и алгоритм ее обработки, объединя-

ются в спецификационный файл следующей структуры:

декларации

%%

правила

%%

программы

Ядром спецификационного файла и единственной его обяза-

тельной частью является секция правил. При отсутсивии секции

программ может быть опущена вторая группа "%%"; следова-

тельно, минимальная допустимая конфигурация входного файла

Характеристики

Тип файла документ

Документы такого типа открываются такими программами, как Microsoft Office Word на компьютерах Windows, Apple Pages на компьютерах Mac, Open Office - бесплатная альтернатива на различных платформах, в том числе Linux. Наиболее простым и современным решением будут Google документы, так как открываются онлайн без скачивания прямо в браузере на любой платформе. Существуют российские качественные аналоги, например от Яндекса.

Будьте внимательны на мобильных устройствах, так как там используются упрощённый функционал даже в официальном приложении от Microsoft, поэтому для просмотра скачивайте PDF-версию. А если нужно редактировать файл, то используйте оригинальный файл.

Файлы такого типа обычно разбиты на страницы, а текст может быть форматированным (жирный, курсив, выбор шрифта, таблицы и т.п.), а также в него можно добавлять изображения. Формат идеально подходит для рефератов, докладов и РПЗ курсовых проектов, которые необходимо распечатать. Кстати перед печатью также сохраняйте файл в PDF, так как принтер может начудить со шрифтами.

Список файлов учебной работы

Синтаксические и лексические анализаторы
Coco-R
Программа - для С++
CocoR
Coco.exe
Action.cpp
Action.h
ArrayList.cpp
ArrayList.h
BitArray.cpp
BitArray.h
CharClass.cpp
CharClass.h
CharSet.cpp
CharSet.h
Coco.atg
Coco.cpp
Comment.cpp
Comment.h
Copyright.frame
DFA.cpp
DFA.h
Generator.cpp
Generator.h
Graph.h
HashTable.cpp
HashTable.h
Makefile.
Melted.cpp
Melted.h
Node.cpp
Node.h
Parser.cpp
Parser.frame
Parser.h
ParserGen.cpp
Parser.frame
Scanner.frame
Taste
Coco.exe
CodeGenerator.h
Copyright.frame
Makefile.
Parser.cpp
Parser.frame
Parser.h
Scanner.cpp
Scanner.frame
Scanner.h
SymbolTable.cpp
SymbolTable.h
Taste.IN
Taste.atg
Taste.cpp
Taste.exe
Test.TAS
build.bat
coc.bat
run.bat
__MACOSX
Taste
._Scanner.frame
cocorc17 - for unix.tgz
Разные мануалы
Примеры
Taste
Coco.exe
CodeGenerator.h
Copyright.frame
Makefile.
Parser.cpp
Parser.frame
Parser.h
Scanner.cpp
Scanner.frame
Scanner.h
SymbolTable.cpp
SymbolTable.h
Taste.IN
Taste.atg
Taste.cpp
Taste.exe
Test.TAS
build.bat
Свежие статьи
Популярно сейчас
Зачем заказывать выполнение своего задания, если оно уже было выполнено много много раз? Его можно просто купить или даже скачать бесплатно на СтудИзбе. Найдите нужный учебный материал у нас!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
7029
Авторов
на СтудИзбе
260
Средний доход
с одного платного файла
Обучение Подробнее