Главная              Рефераты - Информатика

Программное обеспечение удалённого доступа к технической документации - реферат

МИНИСТЕРСТВО ОБЩЕГО И ПРОФЕССИОНАЛЬНОГО ОБРАЗОВАНИЯ РФ
МОСКОВСКИЙ ГОСУДАРСТВЕННЫЙ ИНСТИТУТ ЭЛЕКТРОННОЙ ТЕХНИКИ (ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ)


КНИЖКА ДИПЛОМНИКА.


Ф.И.О. _Мамаев Василий Александрович ____________________

Факультет ____ ЭКТ _______ Индекс группы _____52_______

Специальность N_ 22.03 ______________

Специализация (кафедра) _ПКИМС___________________________

Начало дипломного проектирования _ 21.01.2000 _____

Контрольные сроки просмотра проекта на кафедре:

1 просмотр _16.02.2000 2 просмотр _20.03.2000

дата дата

3 просмотр _15.04.2000 4 просмотр _18.05.2000

дата дата

Окончание дипломного проектирования _05.06.2000__________

Срок представления на рецензию ______01.06.2000__________

Защита проекта на заседании ГЭК _____07.06.2000__________

ЗАДАНИЕ НА ДИПЛОМНЫЙ ПРОЕКТ

  1. Наименование темы: _ Программное обеспечение удалённого доступа к технической документации.  

  2. Цель проекта: _Разработка метода создания программ трансляторов различных текстовых форматов с использованием генераторов программ Lex и Yacc путем создания программы-транслятора из текстового формата nroff в гипертекстовый формат HTML.  

  3. Назначение разрабатываемого изделия (процесса):   Обеспечение возможности работы с документацией и справочной информацией для пользователей САПР ИМС на основе унифицированных средств удалённого доступа.  

  4. Технические требования.

А) требования, предъявляемые к объектам проектирования:

___Разрабатываемое программное обеспечение должно функционировать на компьютерах под управлением операционной системы UNIX и различных ее разновидностей (SunOS, Solaris, FreeBSD, Linux, Intel Solaris).  
Требования к конечному формату текста:  

Тексты в конечном формате должны быть доступны для чтения на компьютерах, работающих как под управлением Windows 95 (NT), так и под управлением системы UNIX и ее разновидностей, вне зависимости от реализации от графического интерфейса пользователя.  
Тексты в конечном формате должны быть доступны для чтения как в режиме удаленного доступа, так и непосредственно на компьютере пользователя.  
Необходимые функциональные возможности программы транслятора:  
Преобразование стандартного набора команд текстового формата nroff в команды формата HTML.  
Максимально полное сохранение исходного форматирования текста.  
Замена используемых шрифтов X Window System на шрифты операционной системы Windows.  
Добавление гипертекстовых ссылок.  
Требования к количественным параметрам программы-транслятора:  
Не должно быть ограничений на объем входного файла. 
• Время обработки файла длиной 1000 строк текста не должно превышать 10 секунд.  

Б) содержание специального раздела проекта (указываются отдельно части, разрабатываемые как эскизный, технический и рабочий проекты, графические работы: чертежи и плакаты, требования к выполнению расчетно-пояснительной записки): На уровне эскизного проекта дать описание структуры программно-аппаратного комплекса САПР.  
Глава пояснительной записки.  
Плакат №1 – Общая структура программно-аппаратного комплекса САПР ИМС.  
На уровне технического проекта рассмотреть и сопоставить применяемые в настоящее время технические решения по организации удалённого доступа к технической документации.  
Глава пояснительной записки.  
Плакат №2 - Схема удалённого доступа к документации.  
Плакат №3 - Схема доступа к гипертекстовой документации.  
На уровне рабочего проекта разработать и реализовать программу транслятор из текстового формата nroff в гипертекстовый формат HTML на основе генераторов программ Lex и Yacc.  
Глава пояснительной записки.  
Плакаты в составе, необходимом для иллюстрации содержания выполненных работ.  


В) задание на технологический раздел проекта:   Технология создания трансляторов с применением генераторов программ Lex и Yacc.  

Г) задание на организационно-экономический раздел проекта: _Экономическое обоснование разработки НИОКР.  

Д) задание на раздел «Производственная и экологическая безопасность»: Обеспечение комфортных условий труда при работе на ПЭВМ.  

Основная литература:  
1. Беляков М.И., Рабовер Ю.И., Фридман А.Л. Мобильная операционная система. – Москва: Радио и связь, 1991. – 206 с.  
2. Topham D.W., Troung H.V., Unix and Xenix: A Step-by-Step Guide. – Bowie: Brady Communication Company, Inc. 1985. – 352 c.  
3. Гончаров А.А., HTML в примерах. - Петербург: Питер, 1997. - 230 с.  
4. Ф. Льюис, Д. Розенкранц, Р. Стирнз., Теоретические основы проектирования компиляторов. - Москва: Мир, 1979. - 120 с.  
5. Р. Петерсен., LINUX. Полное руководство. Киев: BHV, 1998. - 300 с.  
 
 
 
 
 
 
 
 
 
 

(подписи)

Руководитель дипломного проекта Авдеев Ю.В. _____________

Нач. отд. 26 з-д Микрон.

Консультанты по разделам проекта:

Специальному Авдеев Ю.В. _____________

Нач. отд. 26 з-д Микрон.

Технологическому Адрианов М.В. _____________

Нач. лаб. 261 з-д Микрон.

Организационно-экономическому Короткова Т.Л. _____________

Доцент каф. Маркетинга МГИЭТ(ТУ).

Производственной и экологической Привалов В.П. _____________

безопасности К.Т.Н., доцент каф. ПЭБ МГИЭТ(ТУ).


Заведующий кафедрой Казенов Г.Г. _____________


Задание получил 16.02.2000 Мамаев В.А.  

Рецензент Наумов Н.М. _____________

Ст. науч. сотрудник НИИМЭ и з-д Микрон.

СПРАВКА ОБ УСПЕВАЕМОСТИ.

Студент Мамаев В.А. за время пребывания в МИЭТ с 1992г. по 2000г. полностью выполнил учебный план специальности со следующими оценками:

отлично - ____________________________________________________

хорошо - ____________________________________________________

удовлетворительно -___________________________________________

Секретарь факультета ______________________________________________

(подпись)

Заключение руководителя дипломного проекта:

Студент _____________________________________________________________

_____________________________________________________________________

_____________________________________________________________________

_____________________________________________________________________

_____________________________________________________________________

_____________________________________________________________________

_____________________________________________________________________

_____________________________________________________________________

_____________________________________________________________________

_____________________________________________________________________

Руководитель Авдеев Ю.В. (подпись)

Заключение о дипломном проекте:

Дипломный проект просмотрен, и студент Мамаев В.А. может быть допущен к защите этого проекта в Государственной экзаменационной комиссии.

Заведующий учебным центром _________________________________(подпись)

Заведующий кафедрой Казенов Г.Г. (подпись)


Введение. 3

1. Постановка задачи. 8

1.1 Требования, предъявляемые к транслятору. 8

1.2 Оценка достоинств и недостатков существующих трансляторов. 10

Заключение. 15

2. Проектирование транслятора 16

2.1 Схема разработки транслятора. 16

2.2 Принципы построения лексических анализаторов. 18

2.3 Грамматики.
Принципы построения грамматических анализаторов. 21

Заключение. 34

3. Технология реализации транслятора с помощью генераторов программ Lex и Yacc. 35

3.1 Определение лексем, встречающихся в формате nroff 35

3.2 Описание грамматических правил преобразования из формата nroff в формат HTML. 40

3.3 Соответствие между командами форматов
nroff и HTML. 43

3.4 Отладка лексического и грамматического анализаторов. 48

Заключение. 49

4. Экономическое обоснование разработки НИОКР. 50

4.1 Расчет затрат времени на разработку транслятора. 50

4.2 Расчет стоимости основных фондов, используемых для разработки транслятора. 52

4.3 Расчет затрат на разработку транслятора. 56

Наименование фонда 60

4.4 Формирование расчетной (остаточной) прибыли предприятия и определение эффективности произведенных затрат на разработку транслятора. 60

4.5 Оценка значимости разработки транслятора. 65

Заключение. 68

5. Обеспечение комфортных условий труда при работе на ПЭВМ. 69

5.1 Характеристика условий труда оператора ЭВМ 69

5.2 Требования к защите от шума и вибраций. 69

5.3 Требования к микроклимату, содержанию аэроионов и вредных химических веществ в воздухе помещений эксплуатации ПЭВМ 71

5.4 Требования к интенсивности электромагнитных полей, рентгеновского, видимого, ультрафиолетового и инфракрасного излучений. 73

5.5 Требования к освещению помещений и рабочих мест с ПЭВМ. 74

5.6 Расчет освещенности рабочего места программиста. 78

Заключение. 84

Список литературы: 85

Приложения. 86

Фрагмент кода лексического анализатора. 86

Фрагмент кода грамматического анализатора. 87

Код головной программы. 89

Введение.

Одним из основополагающих моментов организации САПР является выбор архитектуры вычислительного комплекса и технологии доступа к прикладным программным средствам. В настоящее время наиболее распространенным является подход, получивший наименование «технологии клиент-сервер». Этот подход состоит в сосредоточении вычислительных и прикладных ресурсов на выделенных компьютерах - серверах и организации доступа к ним с рабочих мест - клиентов.

Так как обязательным компонентом САПР является информационное обеспечение (различные базы данных, проектные библиотеки и все виды документации), то при использовании технологии клиент-сервер целесообразно разместить эти составляющие на выделенных серверах.

Главным препятствием при создании таких информационных серверов оказывается большое количество форматов текста, в которых хранится техническая информация и различная документация, способов и средств доступа к данным, их разнородность, различие требований к аппаратным средствам и системной среде.

Например, документация о системе UNIX и функциях языка «c++» (или его аналога «g++») представлена в виде так называемых «manual pages». Она просматривается с помощью команды системы UNIX «man» либо с помощью утилиты просмотра «Xman». Справочные файлы САПР «Compass» используют формат «Iview», просматриваемый с помощью специальных утилит просмотра. А САПР «Cadence» предоставляет информацию пользователю в формате «Open Book», также требующем специальных средств просмотра.

Кроме того, при использовании в качестве рабочего места X терминала, доступ к некоторым документам становится невозможен в принципе, так как, например, программе просмотра «Iview» требуется для работы графический клиент X Window версии 6, а многие из находящихся в эксплуатации Х терминалов имеют аппаратно реализованную версию X Window 5.

Для выхода из создавшейся ситуации можно предложить следующее: необходимо привести всю документацию к единому формату данных и сосредоточить ее в одном месте, удобном для доступа всех пользователей. Это даст возможность оснастить всех пользователей унифицированными средствами доступа ко всем информационным ресурсам.

Единый формат для документации должен отвечать следующим требованиям:

  • Тексты, записанные в выбранном формате, должны быть доступны для чтения как на персональном компьютере под управлением операционной системы Windows 95(NT), так и на сервере, работающим под управлением UNIX, а также на Х терминале.

  • Тексты должны сохранять исходное форматирование.

Учитывая, что часто документация содержит перекрестные ссылки, важной чертой, влияющей на выбор формата, становится возможность создания в тексте таких ссылок.

Кроме того, требуется, чтобы твердые копии документации изготавливались бы одним методом и выглядели бы одинаково вне зависимости от метода доступа к удаленному серверу технической документации.

Представляется оптимальным выбор формата HTML. Этот формат просматривается с помощью программ, версии которых работают как под управлением Windows, так и под управлением UNIX. Формат HTML поддерживает широкие возможности форматирования. Кроме того, этот формат является стандартным форматом для текстов в технологиях Internet, и его использование позволяет легко решить проблему общедоступности документации при помощи использовании этих технологий. Используя формат HTML, можно сделать документацию, преобразованную из того или иного формата, общедоступной, поместив ее в один из узлов сети. Следует заметить, что в настоящее время большинство локальных сетей строятся на тех же принципах и с использованием того же инструментария, что и сети Internet. Формат HTML удобен еще и тем, что форматирование текста в нем, как и в формате nroff (наиболее распространенном в среде UNIX), осуществляется простыми текстовыми командами, что позволяет его легко редактировать в случае надобности с помощью любого текстового редактора.


Проект посвящен разработке метода создания программ трансляторов различных форматов текста. Рассмотрены существующие программы трансляторы, оценены их достоинства и недостатки. Выбран унифицированный подход к разработке программ трансляторов, разработан маршрут разработки таких программ.

Рассмотрены экономические аспекты разработки программы транслятора, произведена оценка значимости разработки транслятора.

1. Постановка задачи.

Существует множество путей создания программы-транслятора, работающей в среде UNIX. Конкретная реализация программы зависит, прежде всего, от требований, предъявляемых к программе и конечному формату. Кроме того, возможна ситуация, при которой разработка новой программы может просто не иметь смысла, так как в среде UNIX существует большое количество свободно распространяемых программ предназначенных для решения самого широкого спектра задач.

1.1 Требования, предъявляемые к транслятору.

Согласно условиям технического задания программа должна функционировать в вычислительных системах под управлением ОС "Unix" и совместимых с ней (“SunOS”, “Linux”, “FreeBSD”, и др.). Проблема состоит в том, что исполняемые файлы ОС “UNIX” могут быть неработоспособны в среде “Linux”. В то же время, многие из UNIX-подобных систем поставляются пользователю в виде исходных файлов, предназначенных для компилирования. Так же и в данном случае можно передавать программу в виде исходных текстов, снабженных программой компиляции. Это, с одной стороны, повысит переносимость программы, а с другой - позволит вносить достаточно опытному пользователю необходимые поправки и корректировки, расширяя возможности транслятора в соответствии с потребностями пользователя. При этом необходимым условием становится написание программы при помощи таких средств, которые присутствовали бы в любой UNIX-подобной операционной системе.

Полученный же в результате работы программы должен поддерживаться как в операционной системе UNIX, так и в операционной системе Windows 95 (NT). Программа, предназначенная для просмотра текста в конечном формате должна быть распространенной и общедоступной. Оптимальным вариантом было бы, если бы программа являлась неотъемлемой частью операционных систем или же в любой системе существовали способы просмотра текста в данном формате.

Важным условием является сохранение в конечном формате текста всего форматирования, имевшегося в исходном формате и, возможно, добавление элементов форматирования, облегчающих работу пользователя с документом.

Следует учитывать, что большинство имеющихся форматов используют при выводе текста различные шрифты. При этом в разных операционных системах шрифты различны и, в большинстве случаев, не совместимы. При преобразовании текста следует провести адекватную замену используемых в исходном тексте шрифтов.

1.2 Оценка достоинств и недостатков существующих трансляторов.

Прежде всего, следует выяснить, имеет ли смысл создавать новую программу, так как в настоящее время уже существуют различные программы-трансляторы из формата nroff в формат HTML. Рассмотрим характеристики этих программ, выясняя их преимущества и их недостатки.

Наиболее известными и распространенными программами в настоящее время являются следующие:

  1. Программа “nroff2HTML” (автор Р. Ричи).

Программа написана на языке “C”, работает под управлением ОС “UNIX”.

Работает с исходными текстами в формате nroff. При конвертировании вставляет в текст конечного файла обязательные теги формата HTML (такие, как , , ) и затем копирует исходный текст, уничтожая все команды nroff, предварительно отформатировав его с помощью тега

. В результате получается сплошной текст.

  1. Программа “gnome-man2html”, входящая в графический интерфейс пользователя “GNOME”.

Программа написана на языке "C", работает под управлением операционной системы "Linux", тесно интегрирована с графическим интерфейсом пользователя "GNOME".

Данная программа работает не с реальными файлами, а выступает как фильтр при выводе текста с помощью программы “man” на экран компьютера, перенаправляя вывод в окно HTML-броузера и снабжая его при этом всеми командами, необходимыми для форматирования. Полученный на экране текст выглядит наилучшим образом, т.к. в нем сохраняются все необходимые виды форматирования и поддерживаются перекрестные ссылки. Но данная программа не может работать без пакета “GNOME”, для работы которого, в свою очередь, необходима ОС “Linux”.

  1. Программа “hypernroff” (автор К. Садовски).

Программа написана на языке “C”, работает под управлением ОС “UNIX”.

В качестве входного и выходного потоков используется стандартный поток ввода вывода. Позволяет принимать информацию из файлов и выводить ее в файл посредством перенаправления потоков, доступном в среде UNIX. Вставляет в текст конечного файла обязательные теги формата HTML. Поддерживает некоторые виды управления текстом, такие, как выравнивание (по левому и правому краям, по центру). Все форматирование осуществляется заменой пробелов, при помощи которых форматируется текст в формате nroff, на символ формата HTML “nbsp” - неразрывный пробел. Изменение шрифтов, подчеркивание, курсив не поддерживаются.

  1. Программа “man2html” (автор Р. Верховен).

Программа написана на языке “C”, работает под управлением ОС “FreeBSD”. Под управлением других разновидностей ОС “UNIX” не полностью работоспособна. Существует cgi-скрипт “vh-man2html” (автор М. Гамильтон), обеспечивающий вызов программы и выдачу результатов ее работы в html-броузере.

Работает с исходными текстами в формате nroff. Поддерживает макросы man-1.4 и формат BSD-mandoc (разновидность nroff). Вставляет в текст конечного файла обязательные теги формата HTML. Поддерживает различные виды управления текстом, в том числе таблицы. Замена шрифтов не производится. Не вставляются перекрестные ссылки, хотя скрипт “vh-man2html” сильно облегчает поиск необходимых файлов.

Ни одна из этих программ не удовлетворяет нашим требованиям, так как нам необходимо сохранять максимально полный объем форматирования (что дает нам программа “gnome-man2htmnl”), добившись переносимости программы и максимальной ее независимости от наполнения операционной среды (программа “gnome-man2htmnl” является непереносимой, она функционирует только под управлением системы Linux). Главным недостатком всех рассмотренных программ является их ориентация на работу непосредственно на одном рабочем месте, без использования сетевых технологий. Этим объясняется, например то, что ни одно из программ не поддерживает замену шрифтов X Window System на шрифты операционной системы Windows.

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

1.3 Выбор способа реализации транслятора.

Первым очевидным элементом, присутствующим во всех таких ОС, является компилятор языка “С”, на котором, собственно, и написана операционная система “UNIX”. Но язык “С” является достаточно сложным языком и не все пользователи знакомы с ним. В тоже время, в ОС “UNIX” существуют другие средства написания программ: это генераторы программ LEX и YACC. Описание их команд настолько просто и логично, что позволяет вносить коррективы в существующую программу не имея специальной подготовки, и, возможно, даже не будучи знакомым с описанием этих средств, имея только текст исходной программы.


Заключение.

Выявлена необходимость создания программы транслятора, так как существующие на данный момент программы не удовлетворяет предъявляемым требованиям. В качестве конечного формата выбран гипертекстовый формат HTML, как наиболее полно соответствующий нашим целям, широко распространенный и простой в использовании. В качестве средства создания программ выбраны генераторы программ Lex и Yacc благодаря легкости освоения и полной переносимости программ, написанных на их основе, в среде UNIX.

2. Проектирование транслятора

Проектирование программы транслятора с использованием генераторов программ Lex и Yacc имеет свои особенности, независящие от конкретных форматов, с которыми будет работать разрабатываемый транслятор.

Разработав общий маршрут проектирования на основе этих средств программирования, можно впоследствии проектировать подобные задачи быстро и без лишних затрат.

2.1 Схема разработки транслятора.

Сначала с помощью генератора программ Lex строится лексический анализатор. В задачу лексического анализатора входит полное поглощение входного файла (потока) и передача в синтаксический анализатор найденных лексем, а также некоторых необходимых данных. Например, может быть найдена некоторая лексема NUMBER, а в качестве данных будет передано числовое значение найденного числа или цифры, либо возможна ситуация при которой в качестве лексемы выбирается команда, а данные, сопутствующие этой команде, передаются не как лексемы, а каким-либо другим путем.

Затем строится синтаксический анализатор с помощью генератора программ YACC. В синтаксическом анализаторе описываются правила, с помощью которых будет происходить преобразование текста. Правила опираются на полученные из лексического анализатора лексемы.

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

Компиляция модулей (лексического анализатора, синтаксического анализатора и головной программы) происходит в следующем порядке:

  1. Спецификация синтаксического анализатора с помощью генератора программ Yacc преобразуется в программу на языке C. При этом создается файл с описанием лексем, обрабатываемых синтаксическим анализатором.

  2. Спецификация лексического анализатора с помощью генератора программ Lex преобразуется в программу на языке C. Имена лексем определяются в подключаемом файле, полученном на предыдущем этапе.

  3. Компилируется с помощью компилятора языка C головная программа, вызывающая синтаксический анализатор. При компиляции подключаются лексический анализатор и синтаксический анализатор (программы на языке C). Компиляция происходит с использованием стандартных библиотек.

2.2 Принципы построения лексических анализаторов.

Лексический анализатор выполняет первую стадию трансляции - читает строки транслируемого текста, выделяет лексемы и передает их на дальнейшие стадии трансляции (грамматический разбор, синтаксический анализ).

Основным элементом лексического анализатора являются правила. Правила – это расширенные регулярные выражения и действия. Действия могут быть записаны как с помощью команд «языка» Lex, так и на языке C. Регулярные выражения – это описания возможных наборов символов из входного потока, называемые в дальнейшем лексемами.

Лексический анализатор распознает тип каждой лексемы и соответствующим образом помечает ее. Лексический анализатор должен не только выделить лексему, но и выполнить некоторые преобразования. Например, если лексема - число, то его необходимо перевести во внутреннюю форму записи.

Хотя лексический анализ по своей идее прост, тем не менее эта фаза работы транслятора часто занимает больше времени, чем любая другая. Частично это происходит из-за необходимости просматривать и анализировать исходный текст символ за символом. Иногда даже бывает необходимо вернуть прочитанный символ во входной поток с тем, чтобы повторить просмотр и анализ. Происходит это потому, что часто бывает трудно определить, где проходят границы лексемы. Например, могут существовать две лексемы: “make” и “makefile”. При анализе входного потока символов может быть выделена лексема “make”, хотя правильно было бы выделить лексему “makefile”. Единственный способ преодолеть это затруднение - просмотр полученной цепочки символов назад и вперед. В нашем примере при выделении лексемы “make” мы должны просмотреть следующий поступающий символ и, если он будет символом "f", то вполне возможно, что поступает лексема “makefile”.

Вообще говоря, в общем случае программы лексического анализа, построенные с помощью генератора программ Lex, всегда просматривают входной поток вперед. При этом из входного потока выбирается лексема, соответствующая правилам, с наибольшей длиной. Это несколько замедляет работу, но помогает избежать ошибок.

Также в общем случае предполагается, что лексема может находиться в любом месте входного потока. Но при этом предусмотрены способы учитывать контекст. Во первых, для этого применяются так называемые «состояния» лексического анализатора. Переход в состояние осуществляется при срабатывании какого либо правила по специальной команде. Исходным состоянием анализатора является состояние «0». Возможна ситуация, когда одно и тоже правило может выполняться в нескольких состояниях. Во вторых, существует оператор определения контекста: «/». Например, выражение «ab/cd» удовлетворяет строке ab только в том случае, если за ней следует cd.

Кроме того, в Lex существуют инструменты, использующие просмотр вперед и назад: в правиле при определении лексемы могут использоваться спецсимволы «^» и «$», говорящие, что лексема должна находится в начале строки или в конце. Последний, на самом деле, является частным случаем оператора «/», так как для определения конца строки используется выражение

\”\n”

При использовании лексического анализатора совместно с синтаксическим, от лексического анализатора требуется полное поглощение входного потока и передача в синтаксический анализатор найденных лексем и данных, им соответствующих. Для того, чтобы весь входной поток был полностью поглощен и в конечный файл не попали необработанные фрагменты входного формата, лексемы, содержащиеся в спецификации лексического анализатора должны полностью описывать все возможные наборы символов.

Для передачи данных из лексического анализатора в синтаксический существует несколько путей. Наиболее простым является метод передачи данных при помощи глобальных переменных – текстовой yytext и числовой yylval.

Для упрощения написания спецификаций можно применять так называемые «подстановки». Какой-либо часто используемый шаблон описывается и сопоставляется с некоторым именем. В дальнейшем это имя можно использовать в правилах вместо данного шаблона. При этом, если возникнет необходимость изменения шаблона, не надо будет искать вхождения шаблона на протяжении всей спецификации – достаточно будет изменить шаблон в определении подстановки.

2.3 Грамматики.
Принципы построения грамматических анализаторов.

Спецификация Yacc (грамматика) описывается как набор правил в виде, близком к форме Бэкуса Наура (БНФ). Каждое правило описывает грамматическую конструкцию, называемую нетерминальным символом, и сопоставляет ей имя. С точки зрения грамматического разбора правила рассматриваются как правила вывода (подстановки). Грамматические правила описываются в терминах некоторых исходных конструкций, которые называются лексическими единицами, или лексемами. Как правило, имена сопоставляются лексемам, соответствующим классам объектов, конкретное значение которых не существенно для целей грамматического анализа.

Прежде, чем говорить о конкретных принципах построения синтаксических анализаторов с использованием генератора программ Yacc, необходимо разобраться в том, какие грамматики существуют и чем они отличаются.

Прежде всего стоит отметить, что различают два основных типа грамматик: контекстно-зависимые и контекстно-независимые.

Если порождающее правило имеет следующий вид:

A ::= ,

где A – нетерминальный символ, а  - терминальный или нетерминальный, то порождающее правило называется контекстно-зависимым, то есть замена нетерминального символа A на последовательность может иметь место только в контекстах и . Соответственно, и грамматика, содержащая подобное правило, называется контекстно-зависимой.

Если порождающее правило имеет вид:

A ::= ,

то есть, если левая часть порождающего правила состоит из одного нетерминального символа, который в итоге (через ряд промежуточных шагов) может заменяться на последовательность , стоящую в правой части, независимо от контекста, в котором этот нетерминальный символ встречается, то такое правило и, соответственно, грамматика называются контекстно-независимыми (или контекстно-свободными).

Контекстно независимые грамматики более универсальны. Для разработки универсальных принципов проектирования трансляторов следует использовать их, так как они позволяют обработать практически любой входной язык.

Контекстно-свободные грамматики.

Существует несколько основополагающих терминов в теории грамматик. Нетерминальный символ (нетерминал) – описываемые элементы. Например, при определении языков программирования нетерминалами служат <оператор>, <арифметическое выражение> и т.п. В контекстно-свободной грамматике может быть любое конечное число нетерминалов.

Слова из словаря языка играют роль терминальных символов (терминалов). Контекстно-свободная грамматика может также содержать любое конечное число терминалов. В языках программирования терминалами являются фактически используемые в них слова и символы: «do», «else», «+» и т.п.

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

Один_нетерминал  любая конечная цепочка из терминалов и нетерминалов.

При этом цепочка справа от стрелки может быть и пустой. Например,

Иногда подобные правила называют эпсилон правилами. Контекстно-свободная грамматика может содержать любое конечное множество продукций. В качестве иллюстрации опять приведем пример из описания языка программирования. Продукция тогда выглядит так:

<оператор>  IF <логическое_выражение> THEN <оператор>

Один из нетерминалов выделен как начальный нетерминал или начальный символ, с которого должны начинаться выводы цепочек языка. Для языков программирования таким нетерминалом может быть, например, <программа>. Обычно начальный символ обозначают .

Итак, контекстно-свободная грамматика будет задаваться:

  1. конечным множеством нетерминалов;

  2. конечным множеством терминалов, которое не пересекается с множеством нетерминалов;

  3. конечным множеством правил вида  , где A – нетерминал, а - цепочка терминалов и нетерминалов (возможно, пустая); нетерминал называется левой частью правила, а - правой частью;

  4. одним нетерминальным символом, выделенным в качестве начального.

Если множество правил приводится без специального указания множества терминальных и нетерминальных символов, то предполагается, что грамматика содержит в точности те терминалы и нетерминалы, которые встречаются в правилах.

Для описания грамматик очень часто используют способ записи, получивший название формы Бэкуса-Науэра или БНФ. Здесь символ  заменяется символом ::=, за которым может следовать любое число правых частей, разделенных вертикальной чертой |. Здесь также нетерминалы заключаются в угловые скобки.

Правила грамматики используют для того, чтобы задавать способы подстановки или замены цепочек. Подстановка осуществляется путем замены некоторого нетерминала в какой-нибудь заданной цепочке терминалов и нетерминалов на правую часть правила, левой частью которого является этот нетерминал. Иногда говорят, что в таком случае правило применяется к нетерминалу цепочки.

Последовательность некоторых подстановок называется выводом. Каждая цепочка, встречающаяся в выводе, называется промежуточной цепочкой этого вывода.

Множество терминальных цепочек, которые можно вывести из начального символа грамматики, называется языком. Говорят, что язык определяется, грамматикой, порождается ею или выводится в ней. Язык, порождаемый контекстно-свободной грамматикой, также называется контекстно-свободным языком.

В случае, когда на каждом шаге подстановок заменяется самый левый нетерминальный символ, такой вывод называется левосторонним или левым выводом. Для каждого дерева существует единственный левый вывод, так как благодаря условию выбора самого левого нетерминала место каждой подстановки устанавливается единственным образом. Аналогично, для дерева существует единственный правосторонний или правый вывод, который получается если заменять всегда самый правый нетерминал.

Описать дерево вывода цепочки контекстно-свободного языка проще на примере.

Пусть дана следующая грамматика (начальный нетерминал ):

1. ac

2.

3. c

4. b