Тема 2. Трансляторы.pptx
- Количество слайдов: 41
Югорский государственный университет Трансляция
Основные понятия • • • Memory Processor Code, source code Executable code Programming language Translator Сompiler routine Interpreter routine Linkage editor • • • Analysis Synthesis Lexical element, lexeme, token Syntactic analysis, parse Semantic interpretation Macro
Югорский государственный университет Трансляторы
Югорский государственный университет Язык программирования - формальная знаковая система, предназначенная для записи компьютерных программ. Язык программирования определяет набор лексических, синтаксических и семантических правил, задающих внешний вид программы и действия, которые выполнит исполнитель (компьютер) под ее управлением.
Югорский государственный университет Трансляторы Транслятор - программа или техническое средство, выполняющее преобразование программы, представленной на одном из языков, в программу на другом языке и, в определённом смысле, равносильную первой. Транслятор обычно выполняет также диагностику ошибок, формирует словари идентификаторов и т. д.
Югорский государственный университет По типу выходных данных различают: компиляторы интерпретаторы компилирующие окончательный выполнимый код (EXE-файлы, DLLбиблиотеки, COM-компоненты); компилирующие интерпретируемый код, для выполнения которого требуется дополнительное программное обеспечение (# байт-код JAVAпрограмм, выполняемый посредством виртуальной машины JVM)
Югорский государственный университет Особенности трансляции традиционных ЯП Выполнимая форма кода в большинстве случаев формируется из нескольких программных модулей (определенным образом оформленный код на языке высокого уровня). Тогда процесс трансляции может выполняться как единое целое – компиляция и редактирование связей, или как два отдельных этапа – сначала компиляция объектных модулей, а затем вызов редактора связей, создающего окончательный код (# С и С++).
Югорский государственный университет Особенности трансляции традиционных ЯП Объектный код, создаваемый компилятором, представляет собой область данных и область машинных команд, имеющих адреса, которые в дальнейшем "согласуются" редактором связи (иногда называемым загрузчиком - loading routine ). Редактор связи размещает в едином адресном пространстве все по отдельности откомпилированные объектные модули и статически подключаемые библиотеки.
Югорский государственный университет Особенности трансляции традиционных ЯП В процессе трансляции выполняется анализ исходной программы, а затем синтез выполнимой формы данной программы. В зависимости от числа просмотров исходной программы, выполняемых компилятором, трансляторы разделяются на однопроходные, двухпроходные и трансляторы, использующие более двух проходов.
Югорский государственный университет Процесс трансляции
Югорский государственный университет
Югорский государственный университет На этапе лексического анализа выполняется выделение основных составляющих программы– лексем (ключевые слова, идентификаторы, символы операций, комментарии, пробелы и разделители). Лексический анализатор также определяет тип каждой лексемы. При этом на этапе лексического анализа составляется таблица символов, в которой каждому идентификатору сопоставлен свой адрес. Этапы трансляции 1. Лексический анализ 2. Синтаксический анализ 3. Семантический анализ 4. Фаза оптимизации 5. Фаза синтеза
Югорский государственный университет На этапе синтаксического анализа выполняется разбор полученных лексем с целью получения семантически понятных синтаксических единиц, которые затем обрабатываются семантическим анализатором. Так, синтаксическими единицами выступают выражения, объявление, оператор языка программирования, вызов функции. Этапы трансляции 1. Лексический анализ 2. Синтаксический анализ 3. Семантический анализ 4. Фаза оптимизации 5. Фаза синтеза
Югорский государственный университет Семантический анализатор решает задачи: • обнаружение ошибок времени компиляции; • заполнение таблицы символов, созданной на этапе лексического анализа, конкретными значениями, определяющими дополнительную информацию о каждом элементе таблицы; • замена макросов их определениями; • выполнение директив времени компиляции. Этапы трансляции 1. Лексический анализ 2. Синтаксический анализ 3. Семантический анализ 4. Фаза оптимизации 5. Фаза синтеза
Югорский государственный университет Макросом называется некоторый предварительно определенный код, который на этапе компиляции вставляется в программу во всех местах указания вызова данного макроса. Результатом семантического анализа может быть оптимизируемый далее промежуточный код или готовый объектный модуль (без оптимизации). Этапы трансляции 1. Лексический анализ 2. Синтаксический анализ 3. Семантический анализ 4. Фаза оптимизации 5. Фаза синтеза
Югорский государственный университет На фазе синтеза программы производится: • генерация промежуточного кода (или оптимизированного кода) в объектный код; • редактор связей приводит в соответствие адреса фрагментов кода, расположенных в отдельных объектных модулях: определяются адреса вызываемых внешних функций, адреса внешних переменных, адреса функций и методов каждого модуля. Этапы трансляции 1. Лексический анализ 2. Синтаксический анализ 3. Семантический анализ 4. Фаза оптимизации 5. Фаза синтеза
Югорский государственный университет Фаза синтеза На фазе синтеза программы производится: • генерация промежуточного кода (или оптимизированного кода) в объектный код; • редактор связей приводит в соответствие адреса фрагментов кода, расположенных в отдельных объектных модулях: определяются адреса вызываемых внешних функций, адреса внешних переменных, адреса функций и методов каждого модуля.
Югорский государственный университет Формальные граматики
Югорский государственный университет Подходы к определению языка программирования • • • Определением языка считается формальная лингвистическая система (грамматика). Определением языка считается соответствие между структурными единицами текста и правилами интерпретации. Сама программа-транслятор считается описанием языка.
Югорский государственный университет Синтаксис языка программирования • • Синтаксис языка программирования совокупность правил, позволяющая: формально проверить текст программы (выделив множество синтаксически правильных программ); разбить эти программы на составляющие конструкции и в конце концов на лексемы.
Югорский государственный университет Синтаксис языка программирования • • Синтаксис принято разделять на две части: контекстно-свободную грамматику языка (синтаксические диаграммы, формы Бэкуса. Наура); Содержательно КС-грамматика языка – это та часть его синтаксиса, которая игнорирует вопросы, связанные с зависимостью интерпретации лексем от описаний имен в программе. правила задания контекстных зависимостей (#соответствия между описаниями и именами).
Югорский государственный университет Форма Бэкуса-Наура • • • Нотации БНФ включают: символ : : = имеет значение "определяется как"; символ | имеет значение "или"; пара символов < > ограничивает имя синтаксической единицы, называемой также нетерминальным символом или синтаксической категорией.
Югорский государственный университет Расширенная форма Бэкуса. Наура • • • Вводит следующие дополнительные элементы: необязательные элементы указываются заключенными в квадратные скобки; альтернативные элементы, указываемые через символ вертикальной черты, также могут являться необязательными элементами, заключаемыми в квадратные скобки; последовательность нескольких однотипных элементов обозначается заключением элемента в фигурные скобки, за которыми указывается символ звездочка ({<целое>}*).
Югорский государственный университет Формы Бэкуса-Наура Пример правила в нотации БНФ: <цифра>: : = 0|1|2|3|4|5|6|7|8|9 <целочисленное значение> : : = цифра | цифра < целочисленное значение> При построении грамматики, описывающей язык программирования, выделяется начальный нетерминальный символ, определяющий конструкцию "программа".
Югорский государственный университет Классификация грамматик Различают порождающие и распознающие грамматики: Порождающая грамматика генерирует множество цепочек терминальных символов из начального символа; Распознающая грамматика используется для построения по цепочке символов дерева грамматического разбора, ведущего к начальному символу.
Югорский государственный университет Классификация грамматик Различают порождающие и распознающие грамматики: Порождающая грамматика генерирует множество цепочек терминальных символов из начального символа; Распознающая грамматика используется для построения по цепочке символов дерева грамматического разбора, ведущего к начальному символу.
Югорский государственный университет Иерархия Хомского • • регулярные грамматики, используемые для построения лексических анализаторов; КС-грамматики, используемые для построения дерева грамматического разбора. (# НБФ-грамматики); контекстно-зависимые грамматики - набор правил типа x ->y, в которых х - это любая цепочка нетерминальных символов, а y – цепочкой терминальных и нетерминальных символов; грамматики с фразовой структурой, реализуемые набором правил типа x->y, в которых х - это любая цепочка нетерминальных символов, а y – цепочкой терминальных и нетерминальных символов (без ограничения длины).
Югорский государственный университет Правила задания контекстных зависимостей Контекстные зависимости сужают множество правильных программ. В руководствах редко прибегают к формализации описаний контекстных зависимостей (исключение - Алгол 68). Например, задается правило «все идентификаторы должны иметь описания в программе» , которое можно конкретизировать как: …
Югорский государственный университет Правила задания контекстных зависимостей • • • Для каждого имени должно быть описание, в котором оно встречается. Это описание должно стоять либо в данном, либо в охватывающем его блоке и предшествовать в тексте программы использованию данного имени. Два описания одного имени в одном и том же блоке не считаются ошибкой лишь в том случае, если первое является предваритель-ным упоминанием, а второе - полноценным описанием.
Югорский государственный университет Правила задания контекстных зависимостей • • Если есть несколько описаний одного и того же имени в разных блоках, действующим считается то из них, которое стоит в самом внутреннем блоке. Если действующее описание определяет имя как глобальное, то оно не должно противоречить никакому другому глобальному описанию того же имени, встречающемуся в других блоках программы.
Югорский государственный университет Абстрактный и конкретный синтаксис Синтаксическое определение языка задает конкретные синтаксические правила построения программы как строки символов. При этом определяется, какие структурные элементы могут быть выделены в тексте программы. Таким образом задан конкретный синтаксис. Можно определить структура синтаксических понятий, которая соответствует некоторому алгоритмически разрешимому понятию эквивалентности программ. Это – абстрактный синтаксис.
Югорский государственный университет Абстрактный и конкретный синтаксис Например, операторы X = a * b + c * d; X = (a * b) + (c * d); X = ((a * b) + (c * d)) имеют различный конкретный синтаксис, но одинаковый абстрактный.
Югорский государственный университет Семантика языка программирования - соответствие между синтаксически правильными программами и действиями абстрактного исполнителя, позволяющее определить, какие последовательности действий абстрактного исполнителя будут правильны в случае, если мы имеем данную программу и данное ее внешнее окружение (характеристики машины, на которой исполняется программа - точность представления данных, объем памяти, - и потоки входных данных, поступающие в программу в ходе ее исполнения).
Югорский государственный университет Прагматика языка программирования • • Прагматика языка программирования - то, что связывает программу с ее конкретной реализацией: Все определения становятся явными; Появляются дополнительные конструкции, описатели и др. , обусловленные реализацией: ▫ ▫ особенности вычислительной машины и среды вычислений; особенности принятой схемы реализации языка; обеспечение эффективности вычислений; ориентацию на специфику пользователей.
Югорский государственный университет Прагматика языка программирования В тексте документации о реализации языка раздел с явным описанием прагматики встречается редко. Например, прагматическим является замечание, что тип Longint в системе Visual C++ определяется как 32 -разрядное двоичное число с фиксированной точкой, занимающее слово памяти.
Югорский государственный университет Прагматика языка программирования Можно частично изменять прагматику языка, используя специальные синтаксические конструкции. # В Pascal есть прагматические комментарии, например, {$I+}, {$I-} (включение/выключение контроля ввода-вывода).
Югорский государственный университет Прагматика языка программирования Различают: • Синтаксическую прагматику • Семантическую прагматику.
Югорский государственный университет Прагматика языка программирования Синтаксическая прагматика - это правила сокращения записи. Например, в С/С++ операторы увеличения и уменьшения на единицу: ▫ ▫ <переменная>++; или ++<переменная>; <переменная>--; или --<переменная>; В языке Prolog вместо вызова предиката +(X, Y) можно употреблять выражение X+Y.
Югорский государственный университет Прагматика языка программирования Семантическая прагматика - это определение того, что в описании языка оставлено на усмотрение реализации или предписывается в качестве вариантов вычислений. # При использовании переменной с индексом в языке Pascal на уровне вычислений контролируется выход индекса за диапазон допустимых значений. Однако иногда это излишне и тогда предусмотрен сокращенный, т. е. без проверок, режим вычислений. Выбор режимов управляется с помощью прагматических указаний для транслятора, выражаемых в конкретном синтаксисе как прагматические комментарии {$R+} и {$R-}.
Основные понятия • • • Memory Processor Code, source code Executable code Programming language Translator Сompiler routine Interpreter routine Linkage editor • • • Analysis Synthesis Lexical element, lexeme, token Syntactic analysis, parse Semantic interpretation Macro
Югорский государственный университет Трансляция