- •Учебное пособие
- •Учебное пособие
- •Оглавление
- •2. 2 Регулярные выражения
- •2. 3 Грамматика
- •2. 4 Способы получения одних цепочек символов из других
- •2. 5 Формальное определение языка
- •2. 6 Расширенные грамматики
- •2. 7 Задачи анализа
- •2. 8 Синтаксические диаграммы
- •2. 9 Введение в компиляцию
- •2. 30 Структура компилятора
- •2. 11 Проходы компилятора
- •3 Алгоритмический язык spl
- •3. 4 Символы
- •3. 4 Оператор цикла
- •4 Лексический анализ
- •4. 5 Блок-схема функции void main (int ac, char * av [ ])
- •4. 5 Блок-схема функции void number ()
- •4. 5 Блок-схема функции void word ()
- •4. 5 Блок-схема функции char*add(char*nm)
- •5 Полный синтаксис языка spl
- •5.6Алфавит нетерминальных символов
- •5. 6 Синтаксические диаграммы и функции распознавания цепочек для нетерминальных символов
- •6 Пояснения к выполнению курсовой работы
- •6. 7 Пример выполнения курсовой работы
- •6. 7 Варианты заданий для курсовой работы
- •6. 7 Требования к оформлению курсовой работы
- •7 Вопросы к экзамену
- •8 Список литературы
- •Учебное пособие
2. 8 Синтаксические диаграммы
Это ориентированный граф с двумя фиксированными вершинами: входной, из которой дуги только выходят, и выходной, в которую дуги только входят.
Дуги этого графа могут быть помечены терминальными и нетерминальными символами. В расширенной диаграмме с терминальным Т и нетерминальным N алфавитами каждому нетерминалу А и его правилу вывода А , где - регулярное выражение в алфавите TUN, отвечает одна синтаксическая диаграмма. При обозначении дуг помеченными терминальными символами условились эти символы писать строчными буквами и заключать в окружность. Нетерминальные символы условились писать заглавными буквами и размещать в прямоугольнике. Регулярное выражение будет обозначаться греческими буквами внутри ромба.
На рисунке 2 показаны примеры изображения дуг, помеченных терминальным символом а, нетерминальным – А и регулярным выражением – .
Рисунок 2
Алгоритм лексического анализа может быть применен при условиях, что в синтаксических диаграммах нет непомеченных дуг от входной вершины до выходной и в каждом разветвлении ветки начинаются с неодинаковых последующих терминальных символов. По синтаксической диаграмме строится функция анализа выводимых из нетерминала цепочек символов . Прохождению дуги, помеченной терминальным символома, отвечает распознавание этого символа (т.е. а) в предъявленном для анализа слове и сдвиг на следующий символ в этом слове (чтение очередного символа из слова).
Прохождению дуги, помеченной нетерминальным символом А, отвечает вызов функции распознавания цепочек, которые выводятся из А. Перед вызовом этой функции предварительно должен быть прочитан первый терминальный символ х, который выводят из А, т.е. . Функция успешно анализирует цепочку, выводимую из нетерминалаА, если в соответствии с синтаксической диаграммой, прочитав посимвольно всю цепочку , удается попасть из входной вершины в выходную.
2. 9 Введение в компиляцию
Все изложенные выше сведения о грамматических и формальных языках необходимы для создания трансляторов.
Транслятором называется компьютерная программа, которая осуществляет переход программы на входном языке (например, алгоритмическом) на эквивалентную ей объектную программу. Если входной язык высокого уровня (алгоритмические языки Паскаль, Си и др.), а выходной – машинные коды или АССЕМБЛЕР (т.е. машинно-ориентированный язык), то такой транслятор называется компилятором.
Интерпретатор - разновидность транслятора, который переводит программу на язык простых промежуточных команд и выполняет их.
Препроцессор – транслятор, осуществляющий перевод с одного языка высокого уровня на другой язык тоже высокого уровня.
Итак, транслятор – компьютерная программа, которая читает последовательно символ за символом текст некоторой другой компьютерной программы на каком-то алгоритмическом языке и осуществляет перевод этой программы на другой (выходной) язык. В случае, если транслятором является программа-компилятор, после перевода с алгоритмического языка будет получена компьютерная программа или на ассемблере или в виде последовательности машинных команд в кодах (объектный модуль). Один или нескольких объектных модулей обрабатываются программой - компоновщиком. В результате создается готовая к исполнению программа. Компилятор осуществляет перевод программы на алгоритмическом языке в программу, состоящую из последовательности некоторых промежуточных команд. Сразу же после окончания перевода интерпретатор в отличие от компилятора выполняет полученную программу.