МИНИСТЕРСТВО
ОБЩЕГО И ПРОФЕССИОНАЛЬНОГО
ОБРАЗОВАНИЯ
РФМОСКОВСКИЙ
ГОСУДАРСТВЕННЫЙ
ИНСТИТУТ ЭЛЕКТРОННОЙ
ТЕХНИКИ (ТЕХНИЧЕСКИЙ
УНИВЕРСИТЕТ)
КНИЖКА
ДИПЛОМНИКА.
Ф.И.О. _Мамаев
Василий Александрович
____________________
Факультет
____
ЭКТ _______
Индекс группы
_____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__________
ЗАДАНИЕ
НА ДИПЛОМНЫЙ
ПРОЕКТ
Наименование
темы: _
Программное
обеспечение
удалённого
доступа к
технической
документации.
Цель
проекта: _Разработка
метода создания
программ трансляторов
различных
текстовых
форматов с
использованием
генераторов
программ Lex и
Yacc путем создания
программы-транслятора
из текстового
формата nroff в
гипертекстовый
формат HTML.
Назначение
разрабатываемого
изделия (процесса):
Обеспечение
возможности
работы с документацией
и справочной
информацией
для пользователей
САПР ИМС на
основе унифицированных
средств удалённого
доступа.
Технические
требования.
А) требования,
предъявляемые
к объектам
проектирования:
___Разрабатываемое
программное
обеспечение
должно функционировать
на компьютерах
под управлением
операционной
системы 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.
Рассмотрим
характеристики
этих программ,
выясняя их
преимущества
и их недостатки.
Наиболее
известными
и распространенными
программами
в настоящее
время являются
следующие:
Программа
“nroff2HTML” (автор Р.
Ричи).
Программа
написана на
языке “C”, работает
под управлением
ОС “UNIX”.
Работает
с исходными
текстами в
формате nroff. При
конвертировании
вставляет в
текст конечного
файла обязательные
теги формата
HTML (такие, как
, , )
и затем копирует
исходный текст,
уничтожая все
команды nroff,
предварительно
отформатировав
его с помощью
тега
. В
результате
получается
сплошной текст.
Программа
“gnome-man2html”, входящая
в графический
интерфейс
пользователя
“GNOME”.
Программа
написана на
языке "C", работает
под управлением
операционной
системы "Linux",
тесно интегрирована
с графическим
интерфейсом
пользователя
"GNOME".
Данная
программа
работает не
с реальными
файлами, а выступает
как фильтр при
выводе текста
с помощью программы
“man” на экран
компьютера,
перенаправляя
вывод в окно
HTML-броузера и
снабжая его
при этом всеми
командами,
необходимыми
для форматирования.
Полученный
на экране текст
выглядит наилучшим
образом, т.к. в
нем сохраняются
все необходимые
виды форматирования
и поддерживаются
перекрестные
ссылки. Но данная
программа не
может работать
без пакета
“GNOME”, для работы
которого, в
свою очередь,
необходима
ОС “Linux”.
Программа
“hypernroff” (автор К.
Садовски).
Программа
написана на
языке “C”, работает
под управлением
ОС “UNIX”.
В
качестве входного
и выходного
потоков используется
стандартный
поток ввода вывода.
Позволяет
принимать
информацию
из файлов и
выводить ее
в файл посредством
перенаправления
потоков, доступном
в среде UNIX. Вставляет
в текст конечного
файла обязательные
теги формата
HTML. Поддерживает
некоторые виды
управления
текстом, такие,
как выравнивание
(по левому и
правому краям,
по центру). Все
форматирование
осуществляется
заменой пробелов,
при помощи
которых форматируется
текст в формате
nroff, на символ
формата HTML “nbsp” -
неразрывный
пробел. Изменение
шрифтов, подчеркивание,
курсив не
поддерживаются.
Программа
“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. В
синтаксическом
анализаторе
описываются
правила, с помощью
которых будет
происходить
преобразование
текста. Правила
опираются на
полученные
из лексического
анализатора
лексемы.
Кроме того,
возможно, что
в формате, в
который происходит
преобразование,
могут требоваться
какие-либо
элементы, не
зависящие от
текста, например,
заголовок
формата и команды,
завершающие
текст. Эти элементы
должны быть
вставлены либо
на этапе синтаксического
анализа, и процедура
их вставки
будет частью
синтаксического
анализатора,
либо они будут
вставляться
головной программой,
которая и будет
вызывать программу
синтаксического
анализа.
Компиляция
модулей (лексического
анализатора,
синтаксического
анализатора
и головной
программы)
происходит
в следующем
порядке:
Спецификация
синтаксического
анализатора
с помощью генератора
программ Yacc
преобразуется
в программу
на языке C. При
этом создается
файл с описанием
лексем, обрабатываемых
синтаксическим
анализатором.
Спецификация
лексического
анализатора
с помощью генератора
программ Lex
преобразуется
в программу
на языке C. Имена
лексем определяются
в подключаемом
файле, полученном
на предыдущем
этапе.
Компилируется
с помощью
компилятора
языка 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
Один из нетерминалов
выделен как
начальный
нетерминал
или начальный
символ, с которого
должны начинаться
выводы цепочек
языка. Для языков
программирования
таким нетерминалом
может быть,
например,
.
Обычно начальный
символ обозначают
.
Итак, контекстно-свободная
грамматика
будет задаваться:
конечным
множеством
нетерминалов;
конечным
множеством
терминалов,
которое не
пересекается
с множеством
нетерминалов;
конечным
множеством
правил вида
,
где A – нетерминал,
а
- цепочка терминалов
и нетерминалов
(возможно, пустая);
нетерминал
называется
левой частью
правила, а
- правой частью;
одним
нетерминальным
символом, выделенным
в качестве
начального.
Если множество
правил приводится
без специального
указания множества
терминальных
и нетерминальных
символов, то
предполагается,
что грамматика
содержит в
точности те
терминалы и
нетерминалы,
которые встречаются
в правилах.
Для описания
грамматик очень
часто используют
способ записи,
получивший
название формы
Бэкуса-Науэра
или БНФ. Здесь
символ
заменяется
символом ::=, за
которым может
следовать любое
число правых
частей, разделенных
вертикальной
чертой |. Здесь
также нетерминалы
заключаются
в угловые скобки.
Правила
грамматики
используют
для того, чтобы
задавать способы
подстановки
или замены
цепочек. Подстановка
осуществляется
путем замены
некоторого
нетерминала
в какой-нибудь
заданной цепочке
терминалов
и нетерминалов
на правую часть
правила, левой
частью которого
является этот
нетерминал.
Иногда говорят,
что в таком
случае правило
применяется
к нетерминалу
цепочки.
Последовательность
некоторых
подстановок
называется
выводом. Каждая
цепочка, встречающаяся
в выводе, называется
промежуточной
цепочкой этого
вывода.
Множество
терминальных
цепочек, которые
можно вывести
из начального
символа грамматики,
называется
языком. Говорят,
что язык определяется,
грамматикой,
порождается
ею или выводится
в ней. Язык,
порождаемый
контекстно-свободной
грамматикой,
также называется
контекстно-свободным
языком.
В случае,
когда на каждом
шаге подстановок
заменяется
самый левый
нетерминальный
символ, такой
вывод называется
левосторонним
или левым выводом.
Для каждого
дерева существует
единственный
левый вывод,
так как благодаря
условию выбора
самого левого
нетерминала
место каждой
подстановки
устанавливается
единственным
образом. Аналогично,
для дерева
существует
единственный
правосторонний
или правый
вывод, который
получается
если заменять
всегда самый
правый нетерминал.
Описать дерево
вывода цепочки
контекстно-свободного
языка проще
на примере.
Пусть дана
следующая
грамматика
(начальный
нетерминал
):
1.
ac
2.
3.
c
4.
b
5.
b
6.
a
Пусть дана
цепочка: ac,
тогда вывод
будет выглядеть
следующим
образом:
(1) ==> ac (2) ==>
abc (3) ==> acbc (4)
==> acabc (5) ==> acabc (6) ==>
acabac (7).
Теперь для
каждой из семи
пронумерованных
цепочек можно
построить
дерево.
|
|
|
|
|
|
|
| |
|
|
|
| |
| |
|
|
|
| |
| |
| |
|
|
|
| |
| |
| |
|
|
|
| |
| |
| |
|
Окончательный
вариант дерева
называется
деревом вывода
терминальной
цепочки acabac.
Когда одна
цепочка может
иметь несколько
деревьев вывода,
говорят, что
соответствующая
грамматика
неоднозначна.
Таким образом,
резюмируя
вышесказанное,
можно подытожить:
Каждой
цепочке, выводимой
в данной
контекстно-свободной
грамматике,
соответствует
одно или несколько
деревьев вывода.
Каждому
дереву соответствует
один или более
выводов.
Каждому
дереву соответствует
единственный
правый и единственный
левый выводы.
Если
каждой цепочке,
выводимой в
данной контекстно-свободной
грамматике,
соответствует
единственное
дерево вывода,
эта грамматика
называется
однозначной;
в противном
случае ее называют
неоднозначной.
Если правая
часть каждого
правила грамматики
содержит не
более одного
нетерминала,
причем этот
нетерминал
является самым
правым символом
правой части,
грамматика
называется
праволинейной.
Нетерминалы,
которые не
порождают ни
одной терминальной
цепочки, называются
бесплодными
или мертвыми.
Они могут быть
исключены из
грамматики
со всеми правилами,
в которые входят.
Нетерминалы,
которые не
появляются
ни в одной цепочке,
выводимой из
начального
символа, называются
недостижимыми
нетерминалами.
Нетерминалы,
которые бесплодны
или недостижимы,
называются
бесполезными.
При составлении
грамматик
велика вероятность
появления
бесполезных
нетерминалов
и загромождение
грамматик
лишними правилами.
Для поиска
подобных нетерминалов
существует
конкретная
процедура,
разбитая на
две части:
обнаружение
бесплодных
нетерминалов
и обнаружение
недостижимых
нетерминалов.
Сначала нужно
выполнить
процедуру для
бесплодных
нетерминалов,
так как при их
удалении из
грамматик
другие нетерминалы
могут стать
недостижимыми.
Терминальный
символ называется
продуктивным
(или живым), если
из него выводится
какая-нибудь
терминальная
цепочка, то
есть если он
не является
бесплодным
нетерминалом.
Процедура
обнаружения
бесплодных
нетерминалов
основана на
следующем
свойстве продуктивных
символов: Если
все символы
правой части
правила продуктивны,
то продуктивен
и символ, стоящий
в ее левой части.
Символ называется
достижимым
в грамматике,
если он может
появиться в
какой-нибудь
цепочке, выводимой
из начального
нетерминала,
то есть если
он не является
недостижимым.
Процедура
обнаружения
недостижимых
символов грамматики
основана на
следующем
свойстве достижимых
символов:
Если нетерминал
в левой части
правила является
достижимым,
то достижимы
и все символы
правой части
этого правила.
Теперь, исходя
из вышеописанных
свойств грамматик,
можно сформулировать
принципы построения
синтаксического
анализатора.
Во-первых,
должно существовать
правило, описывающее
любой входной
поток, который
может быть
обработан
анализатором.
Для большинства
текстов таким
правилом может
быть следующее:
text: text string
Такое правило
описывает
входной поток
рекурсивно
как набор строк,
образующих
текст. В некоторых
форматах (например,
таких, как RTF)
начальным
правилом было
бы
text: text word
Следует
различать
обработку
команд и обработку
непосредственно
содержащегося
текста. В большинстве
случаев команды
производят
некоторое
действие, а
текст подлежит
выводу в существующих
условиях.
Команды могут
располагаться
как в определенных
местах потока
(в определенном
контексте), так
и быть расположены
среди текстовых
строк. В любом
случае, команды
каким-либо
образом отличаются
от текстовых
строк. Зарезервированных
слов в текстовых
форматах не
бывает, обычно
для выделения
команд применяются
те или иные
спецсимволы.
Команды могут
иметь аргументы,
описание аргументов
также подчиняется
определенным
правилам.
Можно сказать,
что такие элементы,
как команды,
аргументы,
текстовые и
пустые строки
представляют
собой лексемы
- минимальный
объект, которым
оперирует
анализатор
при синтаксическом
анализе.
Следует
заметить, что
использование
в качестве
построителя
лексического
анализатора
генератора
программ Lex, а
в качестве
построителя
синтаксического
анализатора
генератора
программ Yacc удобно
еще и потому,
что эти инструменты
создавались
с учетом возможности
их совместного
использования
и имеют удобные
способы совмещения.
Заключение.
Рассмотрены
общие принципы
проектирования
трансляторов
текстовых
форматов. Разобраны
принципы создания
лексических
анализаторов.
Исследованы
грамматики
и разобраны
общие принципы
построения
синтаксических
анализаторов.
Лексические
и синтаксические
анализаторы
удобно строить
именно с помощью
генераторов
программ Lex и
Yacc, так как они
создавались
для совместной
работы.
3. Технология
реализации
транслятора
с помощью
генераторов
программ Lex и
Yacc.
При построении
транслятора
сначала строится
лексический
анализатор
и происходит
его отладка.
На этом этапе
лексемы определяются,
но передачи
их куда-либо
не происходит.
После отладки
(когда есть
уверенность,
что тексты на
лексическом
уровне обрабатываются
достаточно
полно) в правила
лексического
анализатора
добавляется
возврат лексем
командой return().
Естественно,
что на этом
этапе лексический
анализатор
самостоятельно
может принять
из потока и
обработать
не более одной
лексемы. Начинается
построение
синтаксического
анализатора,
который каждый
раз для получения
лексемы вызывает
лексический
анализатор.
Затем также
происходит
отладка анализаторов.
Окончательным
этапом является
создание головной
программы и
отладка взаимодействия
всех частей
транслятора.
3.1 Определение
лексем, встречающихся
в формате nroff
Прежде всего,
в формате nroff можно
выделить четыре
группы лексем:
текст, команды,
аргументы
команд и переменные.
Команды всегда
находятся в
начале строки
и начинаются
с точки. Все
команды состоят
из одной или
двух букв латинского
алфавита. Команды
могут иметь
один или несколько
аргументов.
Аргументы
команд следуют
через один или
несколько
пробелов (или
табуляций)
после команды.
Аргумент может
быть числом
со знаком или
без знака, символом
или строкой.
После аргумента
могут следовать
пробельные
символы.
Переменные
могут располагаться
в любом месте
текста. Все
переменные
сначала объявляются
при помощи
специальной
команды.
Текстовые
строки выводятся
сплошным потоком,
то есть если
текст располагается
на нескольких
строках, но
между ними нет
команды перевода
строки в формате
nroff, то этот текст,
по возможности,
будет выведен
без перевода
строк.
Если строка
не содержит
никаких символов
(кроме конца
строки), то
происходит
вывод пустой
строки и выдается
команда перевода
строки.
Состояния,
имеющиеся в
формате nroff.
Состояние | Описание | Переходы |
0 | Начальное | Возможен |
TEXT | Состояние | После |
COMMAND | Состояние | После |
COMARG | Состояние | Вне |
Основные
лексемы, встречающиеся
в формате nroff.
Лексема | Значение |
TEXTSTR | Строка |
EMPTYSTR | Пустая |
FONT | Команды |
SIZE | шрифтами |
ADJUST | Команды |
NOADJUST | расположением |
SCENTER | текста |
IN | Команды |
TIN | отступами |
SUNDERLINE | Команды |
UNDERLINE | видом |
BOLD | текста |
BREAKLINE | Команды |
SPACE | символов |
LINESPACE | пробельных |
UNKNOW | Все |
EXIT | Команда |
DARG | Аргументы |
CARG | команд |
SARG |
Лексический
анализатор
разбирает
входной поток
следующим
образом:
В
начальном
состоянии
считывается
первый символ
из потока.
Если
символ является
точкой, то
анализатор
переходит в
состояние
ожидания команды.
Иначе
предполагается,
что взят первый
символ из текстовой
строки. Анализатор
переходит в
состояние
приема текста,
причем при
последующем
действии взятые
из потока данные
будут добавлены
к символу,
находящемуся
в буфере – так
обеспечивается
целостность
текста.
Если
же символ взять
не удалось -
была встречена
пустая строка
– то синтаксическому
анализатору
передается
лексема, означающая
пустую строку.
В
состоянии
приема текста
строка из потока
принимается
целиком, до
символа конца
строки. Лексический
анализатор
возвращает
синтаксическому
анализатору
лексему, означающую
текст, предварительно
перейдя в начальное
состояние.
В
состоянии
приема команды
из потока
принимается
две латинских
буквы, за которыми
могут следовать
один или более
пробелов.
В
соответствии
с полученными
символами
выбирается
лексема и передается
синтаксическому
анализатору.
Если
полученные
символы не
подходят под
шаблон ни одной
из команд, то
команда объявляется
неизвестной.
Перед возвращением
лексемы в
синтаксический
анализатор,
лексический
анализатор
переходит в
состояние
ожидания аргумента
команды.
Предполагается,
что аргументы
команд могут
быть трех типов
– слово (например,
название шрифта
у команды .ft);
символьный
(например, тип
выравнивания
у команды .ad) или
числовой (например,
количество
строк у команды
.br). После определения
лексемы, лексический
анализатор
переходит в
начальное
состояние и
передает лексему
синтаксическому
анализатору.
Следует
учитывать, что
лексический
анализатор,
построенный
с помощью генератора
программ Lex,
принимая символы,
берет их не по
порядку следования
правил, а выбирает
правило, удовлетворяющее
наибольшей
длине принимаемой
строки. Поэтому
лексический
анализатор
определит
аргумент как
символьный
только в случае,
если он действительно
содержит только
один символ.
В
противоположном
случае аргумент
определяется
как слово.
Если
аргумент состоит
из одной и более
цифр, то он
передается
как число.
3.2 Описание
грамматических
правил преобразования
из формата
nroff в формат HTML.
В нашем случае
наиболее общим
правилом является
описание входного
файла как списка
списков строк.
Строки могут
быть двух типов
- команды и текст.
Команды могут
иметь аргумент
либо не иметь
аргумента.
Текст может
быть текстовой
строкой и пустой
строкой. Такие
элементы, как
команды, аргументы,
текстовые и
пустые строки
представляют
собой лексемы
- минимальный
объект, которым
оперирует
анализатор
при синтаксическом
анализе.
Если
синтаксический
анализатор
получает от
лексического
анализатора
лексему "текст",
то он выводит
в выходной
поток содержимое
буфера yytext, используя
для этого специально
определенную
функцию textout().
Если
получена лексема
"пустая строка",
то в выходной
поток выводится
тэг HTML при помощи
функции breakline().
Если
получена лексема,
соответствующая
одной из команд,
то, возможно,
запрашивается
лексема аргумента
и выполняются
необходимые
операции.
Так как во
всех командах
аргумент является
вторым элементом
правила, то для
доступа к его
значению всегда
используется
псевдопеременная
$2.
Обработка
большинства
команд приводит
к тому, что в
выходной поток
записывается
открывающий
тэг, возможно
с теми или иными
аргументами.
Так как формат
HTML требует закрытия
тэга до его
повторного
открытия, то
для контроля
закрытия
предусмотрены
переменные-триггеры.
Они принимают
значение, равное
единице, при
выводе в выходной
поток открывающего
тэга и каждый
раз перед выводом
нового открывающего
тэга проводится
проверка на
включение
триггера. Если
триггер включен,
то перед выводом
стартового
тэга будет
выведен закрывающий
тэг.
В формате
nroff принята такая
система команд,
при которой
у большинства
команд аргументом
является количество
строк, на которые
будет распространятся
действие этой
команды. В HTML же
область действия
команды определяется
местоположением
открывающего
и закрывающего
тэгов. Для того,
что бы определить
место вывода
закрывающего
тэга, введены
переменные-счетчики.
В момент получения
команды им
присваивается
значение аргумента,
и затем оно
уменьшается
при выводе в
выходной поток
очередной
порции текста.
При достижении
счетчиком
значения "ноль",
в выходной
поток выводится
закрывающий
тэг. Если значение
счетчика меньше
нуля, то это
значит, что он
сейчас неактивен.
При выводе
текста функцией
textout() происходит
анализ на содержание
в тексте переменных.
Если переменные
найдены, то
происходит
подстановка
их значений
в выводимый
текст.
Для вывода
в выходной
поток тэга
- команда перевода
строки – применяется
специальная
функция breakline().
Необходимость
такого шага
обусловлена
тем, что в nroff существует
команда ".ls",
которая определяет,
сколько пустых
строк выводится
по команде
".br" (аналогом
которой является
тег ). При поступлении
лексемы, соответствующей
команде ".ls"
значение ее
аргумента
присваивается
переменной
LS, которая определяет
сколько раз
подряд выведется
тэг в выходной
файл.
Замена шрифтов
осуществляется
при помощи
функции fontchange(). В
качестве аргумента
ей передается
имя шрифта,
используемого
в исходном
документе. Имя
шрифта, на который
будет заменен
данный шрифт
определяется
по специально
созданной
таблице, хранящейся
во внешнем
файле. В случае,
если замена
не определена,
подставляется
шрифт по умолчанию.
Особо надо
оговорить
обработку
команды nroff ".ex".
При получении
лексемы, соответствующей
этой команде,
синтаксический
анализатор
завершает свою
работу, возвращая
в головную
функцию значение
"0", свидетельствующее
о нормальном
завершении
работы.
3.3 Соответствие
между командами
форматовnroff и
HTML.
Точного
соответствия
между текстовым
форматом nroff и
гипертекстовым
форматом HTML нет.
Главным
отличием является
то, что формат
HTML ориентирован
на использование
его в локальных
или глобальных
сетях, а формат
nroff - на использование
только для
чтения документов.
Формат HTML
поддерживает
больше видов
форматирования
текстов, гипертекстовые
ссылки, включение
в текст графики,
запуск внешних
программ и
многое другое.
Формат nroff
подразумевает
постраничный
вывод на экран,
а формат HTML - вывод
сплошным потоком
с возможностью
последующей
прокрутки окна
просмотра.
Так как нас
интересует,
прежде всего,
преобразование
команд формата
nroff в команды
формата HTML, то
имеет смысл
рассмотреть
команды исходного
формата и определить,
какие команды
им будут соответствовать
в конечном
формате:
nroff | HTML | Описание |
Комментарии | ||
” | Комментарий | |
Команды для управления шрифтом | ||
.bd | Жирный шрифт | |
.ul | Подчеркивание | |
.ft font_name | Устанавливает шрифт | |
.ps n | Устанавливает размер символа |
nroff | HTML | Описание |
Команды управления текстом | ||
.br | Следующая строка | |
.ce | Центрирование | |
.ad x | Выравнивание текста | |
.na | Нет управления текстом | |
.sp |
| Пустое пространство |
В HTML не
поддерживаются
следующие
команды, имеющиеся
в формате nroff:
nroff | Описание |
Команды управления страницами | |
.bp | начать новую страницу |
.pl | установить длину страницы |
.pn | установить номер страницы |
.ll | длина строки |
Для
вывода текста
в виде, максимально
близко к исходному,
в конечном
формате иногда
необходимо
использовать
не одну команду,
а комбинацию
команд:
Nroff | HTML | Описание |
.rt |
| |
|
возврат для
столбцов
заполнения
отступ
строки
При создании
документа в
формате HTML необходимо
вставлять
обязательные
тэги:
HTML | Комментарий |
Признак Весь Закрывающий | |
Область заголовка HTML-документа, служит для формирования общей структуры документа. | |
Заголовок Вставляется | |
Заключает в себе гипертекст, который, собственно и выводится в окне броузера. | |
Гиперссылка. Этими | |
Элемент для создания базового адреса для ссылок. Если документы и программа транслятор находятся в разных каталогах, то это тэг определяет местонахождение каталога с документами. |
3.4 Отладка лексического
и грамматического
анализаторов.
Отладка
происходит
в два этапа –
отладка лексического
анализатора
и отладка системы
из лексического
и синтаксического
анализаторов.
Для отладки
используется
метод пошагового
просмотра
работы анализаторов.
Для этого создан
специальный
оператор (посредством
команды #define языка
С), выводящий
сообщение о
состоянии
анализатора
(имя обрабатываемой
лексемы и состояние
различных
переменных).
При отладки
лексического
анализатора
возможно
использование
тестовых пакетов
– текстов в
формате nroff, а
также интерактивное
тестирование,
когда анализатор
принимает
информацию
из стандартного
ввода (с клавиатуры)
и выдает результаты
на стандартный
вывод (экран
монитора).
Для проверки
правильности
написания
правил синтаксического
анализатора
генератор
программ Yacc на
этапе тестирования
запускается
с ключом d по
которому создается
файл с деревом
разбора.
Заключение.
Создана
программа-транслятор
из формата
nroff в гипертекстовый
формат HTML.
Программа
выводит пустые
обязательные
теги формата
HTML и преобразует
текст из формата
nroff в формат HTML.
Полностью
поддерживается
стандартный
набор команд
формата nroff. Реализована
большая часть
команд различных
пакетов макросов,
наиболее полно
реализован
пакет макросов
“man”.
Порядок
работы с
программой-транслятором
ut4all таков: на вход
программы
подается текстовый
файл в формате
nroff, а на выходе
получаем текстовый
файл в формате
HTML. Имена текстовых
файлов передаются
в качестве
аргумента,
причем первым
аргументом
является имя
входного файла,
а вторым – имя
выходного. В
случае отсутствия
одного или
обоих аргументов
в качестве
входного и
выходного
потоков используются
стандартные
потоки.
Если
входного файла
не существует,
то выдается
сообщение об
ошибке, если
не существует
выходного
файла, то он
создается.
Сообщения
об ошибках
направляются
в стандартный
поток ошибок.
4. Экономическое
обоснование
разработки
НИОКР.
4.1 Расчет затрат
времени на
разработку
транслятора.
4.1.1. Для начала
необходимо
определить
продолжительность
создания транслятора.
Определим весь
перечень работ
по всем этапам
разработки
информационной
системы.
Этапы создания
транслятора:
Этап | Техническое задание. | ||||||
Получение задания, его обработка, а также согласование задания и его деталей с консультантом. | |||||||
Этап | Техническое предложение. | ||||||
Изучение ОС Unix и ее компонент – lex, yacc. | |||||||
Этап | Эскизное проектирование. | ||||||
Изучение подходов к написанию трансляторов. | |||||||
Этап | Техническое проектирование. | ||||||
Разработка алгоритмов решения задачи. | |||||||
Этап | Рабочий проект. | ||||||
Разработка структуры программного обеспечения. | |||||||
Этап | Изготовление опытного образца. | ||||||
Непосредственно программирование. | |||||||
Этап | Испытание опытного образца. | ||||||
Отладка программы | |||||||
Этап | Оформление документации. | ||||||
Оформление документации.
Обсуждение:
Название реферата: Программное обеспечение удалённого доступа к технической документации
Вам также могут понравиться эти работы:
|