Введение в методы трансляции
Введение в методы трансляции Введение в методы трансляции
Дисциплина "Компьютерные науки" © М.Л. Цымблер Введение в методы трансляции Если в вашей программе нет ошибок – сообщите разработчику транслятора, чтобы он исправил ошибку в трансляторе. Из программистского фольклора Компьютерные науки © М.Л. Цымблер Содержание � Понятие языкового процессора � Компиляторы как класс программного обеспечения � Упрощенная модель компилятора Введение в методы трансляции © М.Л. Цымблер 2 Понятие языкового процессора � Компьютер выполняет программы на языке машинных команд. Программист создает программы на языке программирования. � Языковый процессор обеспечивает выполнение на компьютере директив и предложений программы, написанной программистом. hello.pas Program Hello; begin WriteLn(‘Привет!’); end. Введение в методы трансляции Компилятор HELLO_TEXT CODE + X+ -!s щn ¦ - Й БЙ Г +t +@ О++p &¦ 3э.О С +l +r ш¦ _ 6s _6q _6 ў_Г_0 щ¦ d __Й6 +__^]- UЛьVЛv Vш+_Л¦^]- Л^ Г_$w\А_ rWЛF ЛN +} А~ t &¦ -Gў+ў+Г+ ыЁ+-ўє6ИF +uЇНN_ў+ +№N6К , s :ы F ктю_ к ЛV ЛF _^Лх]- UЛь3+P_v _v _v + P_ P_aPшb_]- UЛьЛ^ - hello.exe © М.Л. Цымблер 3 Лекция "Введение в методы трансляции" 1
- Page 2 and 3: Дисциплина "Компью
- Page 4 and 5: Дисциплина "Компью
- Page 6 and 7: Дисциплина "Компью
Дисциплина "Компьютерные науки" © М.Л. Цымблер<br />
<strong>В<strong>в</strong>едение</strong> <strong>в</strong> <strong>методы</strong><br />
<strong>трансляции</strong><br />
Если <strong>в</strong> <strong>в</strong>ашей программе нет ошибок –<br />
сообщите разработчику транслятора,<br />
чтобы он испра<strong>в</strong>ил ошибку <strong>в</strong> трансляторе.<br />
Из программистского фольклора<br />
Компьютерные науки © М.Л. Цымблер<br />
Содержание<br />
� Понятие языко<strong>в</strong>ого процессора<br />
� Компиляторы как класс программного<br />
обеспечения<br />
� Упрощенная модель компилятора<br />
<strong>В<strong>в</strong>едение</strong> <strong>в</strong> <strong>методы</strong> <strong>трансляции</strong><br />
© М.Л. Цымблер 2<br />
Понятие языко<strong>в</strong>ого процессора<br />
� Компьютер <strong>в</strong>ыполняет программы на языке<br />
машинных команд. Программист создает<br />
программы на языке программиро<strong>в</strong>ания.<br />
� Языко<strong>в</strong>ый процессор обеспечи<strong>в</strong>ает <strong>в</strong>ыполнение<br />
на компьютере директи<strong>в</strong> и предложений<br />
программы, написанной программистом.<br />
hello.pas<br />
Program Hello;<br />
begin<br />
WriteLn(‘При<strong>в</strong>ет!’);<br />
end.<br />
<strong>В<strong>в</strong>едение</strong> <strong>в</strong> <strong>методы</strong> <strong>трансляции</strong><br />
Компилятор<br />
HELLO_TEXT CODE<br />
+ X+ -!s щn ¦ - Й БЙ Г<br />
+t +@ О++p &¦ 3э.О С +l +r ш¦ _<br />
6s _6q _6<br />
ў_Г_0 щ¦ d __Й6 +__^]- UЛьVЛv<br />
Vш+_Л¦^]-<br />
Л^ Г_$w\А_ rWЛF ЛN<br />
+} А~ t &¦ -Gў+ў+Г+<br />
ыЁ+-ўє6ИF<br />
+uЇНN_ў+ +№N6К ,<br />
s :ы F ктю_ к ЛV ЛF<br />
_^Лх]- UЛь3+P_v _v _v +<br />
P_ P_aPшb_]- UЛьЛ^ -<br />
hello.exe<br />
© М.Л. Цымблер 3<br />
Лекция "<strong>В<strong>в</strong>едение</strong> <strong>в</strong> <strong>методы</strong> <strong>трансляции</strong>" 1
Дисциплина "Компьютерные науки" © М.Л. Цымблер<br />
Типы языко<strong>в</strong>ых процессоро<strong>в</strong><br />
� Интерпретатор – <strong>в</strong>ыполняет программу на<br />
исходном языке.<br />
� Транслятор – пере<strong>в</strong>одит программу на<br />
исходном языке <strong>в</strong> язык машинных команд.<br />
� Ассемблер – транслятор языка низкого<br />
уро<strong>в</strong>ня.<br />
� Компилятор – транслятор языка <strong>в</strong>ысокого<br />
уро<strong>в</strong>ня.<br />
<strong>В<strong>в</strong>едение</strong> <strong>в</strong> <strong>методы</strong> <strong>трансляции</strong><br />
© М.Л. Цымблер 4<br />
Компиляторы как класс программного обеспечения<br />
� Многочисленные реализации из<strong>в</strong>естных языко<strong>в</strong><br />
<strong>в</strong>ысокого уро<strong>в</strong>ня.<br />
� Разработка но<strong>в</strong>ых языко<strong>в</strong> <strong>в</strong>ысокого уро<strong>в</strong>ня<br />
требует разработки компиляторо<strong>в</strong>.<br />
� Разработка но<strong>в</strong>ых аппаратных архитектур<br />
требует разработки но<strong>в</strong>ых компиляторо<strong>в</strong> для<br />
из<strong>в</strong>естных языко<strong>в</strong> <strong>в</strong>ысокого уро<strong>в</strong>ня.<br />
<strong>В<strong>в</strong>едение</strong> <strong>в</strong> <strong>методы</strong> <strong>трансляции</strong><br />
© М.Л. Цымблер 5<br />
Упрощенная модель компилятора<br />
Лексический<br />
блок<br />
<strong>В<strong>в</strong>едение</strong> <strong>в</strong> <strong>методы</strong> <strong>трансляции</strong><br />
Синтаксический<br />
блок<br />
Таблицы<br />
Генератор<br />
кода<br />
© М.Л. Цымблер 6<br />
Лекция "<strong>В<strong>в</strong>едение</strong> <strong>в</strong> <strong>методы</strong> <strong>трансляции</strong>" 2
Дисциплина "Компьютерные науки" © М.Л. Цымблер<br />
Таблицы<br />
� Таблицы хранят долго<strong>в</strong>ременную и/или<br />
глобальную информацию о программе.<br />
� Одна из таблиц – таблица имен (таблица<br />
идентификаторо<strong>в</strong>, таблица сим<strong>в</strong>оло<strong>в</strong>), <strong>в</strong><br />
которой накапли<strong>в</strong>ается информация об<br />
идентификаторах программы.<br />
<strong>В<strong>в</strong>едение</strong> <strong>в</strong> <strong>методы</strong> <strong>трансляции</strong><br />
Лексический блок<br />
© М.Л. Цымблер 7<br />
� Лексический блок преобразует последо<strong>в</strong>ательность<br />
сим<strong>в</strong>оло<strong>в</strong> (цепочку) на исходном языке <strong>в</strong><br />
последо<strong>в</strong>ательность лексем.<br />
� Лексема – наименьшая цепочка исходного языка,<br />
имеющая заранее определенный смысл. Лексема<br />
состоит из д<strong>в</strong>ух частей:<br />
� класс – указы<strong>в</strong>ает на характер информации <strong>в</strong> лексеме<br />
� значение – собст<strong>в</strong>енно значение лексемы.<br />
myprog.pas Лексический<br />
Лексемы<br />
блок<br />
<strong>В<strong>в</strong>едение</strong> <strong>в</strong> <strong>методы</strong> <strong>трансляции</strong><br />
© М.Л. Цымблер 8<br />
Пример: работа лексического блока<br />
� Цепочка: if B>=2 then A:=0<br />
Лексема<br />
if<br />
B<br />
>=<br />
2<br />
then<br />
A<br />
:=<br />
0<br />
if<br />
<strong>В<strong>в</strong>едение</strong> <strong>в</strong> <strong>методы</strong> <strong>трансляции</strong><br />
Переменные<br />
Операции отношения<br />
Константы<br />
then<br />
Переменные<br />
Оператор прис<strong>в</strong>аи<strong>в</strong>ания<br />
Константы<br />
Класс<br />
Индекс B <strong>в</strong>таблицеимен<br />
Больше либо ра<strong>в</strong>но<br />
2<br />
–<br />
Индекс A <strong>в</strong>таблицеимен<br />
0<br />
Значение<br />
–<br />
–<br />
© М.Л. Цымблер 9<br />
Лекция "<strong>В<strong>в</strong>едение</strong> <strong>в</strong> <strong>методы</strong> <strong>трансляции</strong>" 3
Дисциплина "Компьютерные науки" © М.Л. Цымблер<br />
Синтаксический блок<br />
� Синтаксический блок преобразует цепочку<br />
лексем <strong>в</strong> цепочку атомо<strong>в</strong>.<br />
� Атом – элементарная операция;<br />
последо<strong>в</strong>ательность атомо<strong>в</strong> отражает порядок<br />
<strong>в</strong>ыполнения операций.<br />
Атом состоит из д<strong>в</strong>ух частей:<br />
� класс – <strong>в</strong>ид операции<br />
� значение – набор указателей на операнды операции.<br />
Лексемы<br />
<strong>В<strong>в</strong>едение</strong> <strong>в</strong> <strong>методы</strong> <strong>трансляции</strong><br />
� Цепочка: A+B*C<br />
� 2Лексема<br />
� 2<br />
<strong>В<strong>в</strong>едение</strong> <strong>в</strong> <strong>методы</strong> <strong>трансляции</strong><br />
Синтаксический<br />
блок<br />
Атомы<br />
© М.Л. Цымблер 10<br />
Пример: работа синтаксического блока<br />
A<br />
+<br />
B<br />
*<br />
C<br />
Атом<br />
УМНОЖ(B,C,R1)<br />
СЛОЖ(R1,A,R2)<br />
Переменные<br />
Аддити<strong>в</strong>ные операции<br />
Переменные<br />
Переменные<br />
Класс<br />
Мультипликати<strong>в</strong>ные операции<br />
Класс<br />
Умножить<br />
Сложить<br />
Генератор кода<br />
Индекс A <strong>в</strong> таблице имен<br />
Сложить<br />
Индекс B <strong>в</strong> таблице имен<br />
Умножить<br />
Значение<br />
Индекс C <strong>в</strong> таблице имен<br />
Значение<br />
Индексы B, C, R1 (системная переменная) <strong>в</strong><br />
таблице имен<br />
Индексы A, R1 и R2 (системные переменные)<br />
<strong>в</strong>таблицеимен<br />
© М.Л. Цымблер 11<br />
� Генератор кода преобразует цепочку атомо<strong>в</strong> <strong>в</strong><br />
цепочку команд машинного языка.<br />
� Генератор кода я<strong>в</strong>ляется машинно-за<strong>в</strong>исимым<br />
блоком компилятора.<br />
Атомы<br />
<strong>В<strong>в</strong>едение</strong> <strong>в</strong> <strong>методы</strong> <strong>трансляции</strong><br />
Генератор<br />
кода<br />
HELLO_TEXT CODE<br />
+ X+ -!s щn ¦ - Й БЙ Г<br />
+t +@ О++p &¦ 3э.О С +l +r ш¦ _<br />
6s _6q _6<br />
ў_Г_0 щ¦ d __Й6 +__^]- UЛьVЛv<br />
Vш+_Л¦^]-<br />
Л^ Г_$w\А_ rWЛF ЛN<br />
+} А~ t &¦ -Gў+ў+Г+<br />
ыЁ+-ўє6ИF<br />
© М.Л. Цымблер 12<br />
Лекция "<strong>В<strong>в</strong>едение</strong> <strong>в</strong> <strong>методы</strong> <strong>трансляции</strong>" 4
Дисциплина "Компьютерные науки" © М.Л. Цымблер<br />
Дополнительные блоки компилятора<br />
Лексический<br />
блок<br />
Таблицы<br />
<strong>В<strong>в</strong>едение</strong> <strong>в</strong> <strong>методы</strong> <strong>трансляции</strong><br />
Синтаксический<br />
блок<br />
Блок семантической<br />
обработки<br />
Блок оптимизации<br />
кода<br />
Генератор<br />
кода<br />
© М.Л. Цымблер 13<br />
Блок семантической обработки<br />
� Блок семантической обработки <strong>в</strong>ыполняет<br />
часть работы компилятора, с<strong>в</strong>язанную со<br />
смыслом лексем или атомо<strong>в</strong>.<br />
� Пример:<br />
Порождение команд с фиксиро<strong>в</strong>анной или<br />
пла<strong>в</strong>ающей точкой <strong>в</strong> за<strong>в</strong>исимости от операндо<strong>в</strong><br />
атома УМНОЖ(B,C,R1).<br />
<strong>В<strong>в</strong>едение</strong> <strong>в</strong> <strong>методы</strong> <strong>трансляции</strong><br />
Блок оптимизации<br />
© М.Л. Цымблер 14<br />
� Блок оптимизации по<strong>в</strong>ышает эффекти<strong>в</strong>ность<br />
машинного кода.<br />
� Пример:<br />
до оптимизации – атомы кода<br />
for i:=1 to 100000 do<br />
K:=K+i*(A+B*C);<br />
после оптимизации – атомы кода<br />
tmp:=A+B*C;<br />
for i:=1 to 100000 do<br />
K:=K+i*tmp;<br />
<strong>В<strong>в</strong>едение</strong> <strong>в</strong> <strong>методы</strong> <strong>трансляции</strong><br />
© М.Л. Цымблер 15<br />
Лекция "<strong>В<strong>в</strong>едение</strong> <strong>в</strong> <strong>методы</strong> <strong>трансляции</strong>" 5
Дисциплина "Компьютерные науки" © М.Л. Цымблер<br />
Проходы компилятора<br />
� Проход компилятора – это работа блока (или<br />
блоко<strong>в</strong>) по <strong>в</strong>ыдаче <strong>в</strong>сей цепочки объекто<strong>в</strong><br />
(лексем, атомо<strong>в</strong> или машинных команд) до<br />
передачи упра<strong>в</strong>ления другому блоку.<br />
� Классификация компиляторо<strong>в</strong> по числу<br />
проходо<strong>в</strong>:<br />
� 1-проходные<br />
� 2-проходные<br />
� 3-проходные<br />
<strong>В<strong>в</strong>едение</strong> <strong>в</strong> <strong>методы</strong> <strong>трансляции</strong><br />
Однопроходный компилятор<br />
Лексический<br />
блок<br />
<strong>В<strong>в</strong>едение</strong> <strong>в</strong> <strong>методы</strong> <strong>трансляции</strong><br />
Синтаксический<br />
блок<br />
Таблицы<br />
© М.Л. Цымблер 16<br />
Генератор<br />
кода<br />
© М.Л. Цымблер 17<br />
Д<strong>в</strong>ухпроходный компилятор (a)<br />
Лексический<br />
блок<br />
<strong>В<strong>в</strong>едение</strong> <strong>в</strong> <strong>методы</strong> <strong>трансляции</strong><br />
Синтаксический<br />
блок<br />
Таблицы<br />
Генератор<br />
кода<br />
© М.Л. Цымблер 18<br />
Лекция "<strong>В<strong>в</strong>едение</strong> <strong>в</strong> <strong>методы</strong> <strong>трансляции</strong>" 6
Дисциплина "Компьютерные науки" © М.Л. Цымблер<br />
Д<strong>в</strong>ухпроходный компилятор (b)<br />
Лексический<br />
блок<br />
<strong>В<strong>в</strong>едение</strong> <strong>в</strong> <strong>методы</strong> <strong>трансляции</strong><br />
Синтаксический<br />
блок<br />
Таблицы<br />
Генератор<br />
кода<br />
Трехпроходный компилятор<br />
Лексический<br />
блок<br />
<strong>В<strong>в</strong>едение</strong> <strong>в</strong> <strong>методы</strong> <strong>трансляции</strong><br />
Синтаксический<br />
блок<br />
Таблицы<br />
© М.Л. Цымблер 19<br />
Генератор<br />
кода<br />
© М.Л. Цымблер 20<br />
Моти<strong>в</strong>ация разбиения на проходы<br />
� Логика языка – компилятору может<br />
потребо<strong>в</strong>аться информация из еще не<br />
просмотренной части программы.<br />
� Оптимизация кода – машинный код можно<br />
сформиро<strong>в</strong>ать более эффекти<strong>в</strong>ным, если<br />
генератору кода доступна информация обо <strong>в</strong>сей<br />
программе.<br />
<strong>В<strong>в</strong>едение</strong> <strong>в</strong> <strong>методы</strong> <strong>трансляции</strong><br />
© М.Л. Цымблер 21<br />
Лекция "<strong>В<strong>в</strong>едение</strong> <strong>в</strong> <strong>методы</strong> <strong>трансляции</strong>" 7