🗊Презентация Генерация кода языков программирования. (Глава 5)

Нажмите для полного просмотра!
Генерация кода языков программирования. (Глава 5), слайд №1Генерация кода языков программирования. (Глава 5), слайд №2Генерация кода языков программирования. (Глава 5), слайд №3Генерация кода языков программирования. (Глава 5), слайд №4Генерация кода языков программирования. (Глава 5), слайд №5Генерация кода языков программирования. (Глава 5), слайд №6Генерация кода языков программирования. (Глава 5), слайд №7Генерация кода языков программирования. (Глава 5), слайд №8Генерация кода языков программирования. (Глава 5), слайд №9Генерация кода языков программирования. (Глава 5), слайд №10Генерация кода языков программирования. (Глава 5), слайд №11Генерация кода языков программирования. (Глава 5), слайд №12Генерация кода языков программирования. (Глава 5), слайд №13Генерация кода языков программирования. (Глава 5), слайд №14Генерация кода языков программирования. (Глава 5), слайд №15Генерация кода языков программирования. (Глава 5), слайд №16Генерация кода языков программирования. (Глава 5), слайд №17Генерация кода языков программирования. (Глава 5), слайд №18Генерация кода языков программирования. (Глава 5), слайд №19Генерация кода языков программирования. (Глава 5), слайд №20Генерация кода языков программирования. (Глава 5), слайд №21Генерация кода языков программирования. (Глава 5), слайд №22Генерация кода языков программирования. (Глава 5), слайд №23Генерация кода языков программирования. (Глава 5), слайд №24Генерация кода языков программирования. (Глава 5), слайд №25Генерация кода языков программирования. (Глава 5), слайд №26Генерация кода языков программирования. (Глава 5), слайд №27Генерация кода языков программирования. (Глава 5), слайд №28Генерация кода языков программирования. (Глава 5), слайд №29Генерация кода языков программирования. (Глава 5), слайд №30Генерация кода языков программирования. (Глава 5), слайд №31

Содержание

Вы можете ознакомиться и скачать презентацию на тему Генерация кода языков программирования. (Глава 5). Доклад-сообщение содержит 31 слайдов. Презентации для любого класса можно скачать бесплатно. Если материал и наш сайт презентаций Mypresentation Вам понравились – поделитесь им с друзьями с помощью социальных кнопок и добавьте в закладки в своем браузере.

Слайды и текст этой презентации


Слайд 1


Генерация кода языков программирования. (Глава 5), слайд №1
Описание слайда:

Слайд 2





5.1 Генерация внутреннего представления программы
Результатом работы синтаксического анализатора должно быть некоторое представление программы, которое отражает ее синтаксическую структуру.
Программа в таком представлении дальше может либо интерпретироваться либо транслироваться в объектный код.
Описание слайда:
5.1 Генерация внутреннего представления программы Результатом работы синтаксического анализатора должно быть некоторое представление программы, которое отражает ее синтаксическую структуру. Программа в таком представлении дальше может либо интерпретироваться либо транслироваться в объектный код.

Слайд 3





5.1.1 Язык внутреннего представления программы
Свойства:
Он позволяет фиксировать синтаксическую структуру программы.
Текст на нем можно автоматически генерировать на этапе синтаксического разбора.
Его конструкции должны достаточно просто транслироваться в объектный код либо достаточно эффективно интерпретироваться.
Описание слайда:
5.1.1 Язык внутреннего представления программы Свойства: Он позволяет фиксировать синтаксическую структуру программы. Текст на нем можно автоматически генерировать на этапе синтаксического разбора. Его конструкции должны достаточно просто транслироваться в объектный код либо достаточно эффективно интерпретироваться.

Слайд 4





5.1.1 Язык внутреннего представления программы
Некоторые общепринятые способы внутреннего представления программы:
Постфиксная запись;
Префиксная запись;
Многоадресный код с неявно именуемыми результатами (триады);
Многоадресный код с явно именуемыми результатами (тетрады);
Связные списочные структуры, представляющие деревья операций.
Описание слайда:
5.1.1 Язык внутреннего представления программы Некоторые общепринятые способы внутреннего представления программы: Постфиксная запись; Префиксная запись; Многоадресный код с неявно именуемыми результатами (триады); Многоадресный код с явно именуемыми результатами (тетрады); Связные списочные структуры, представляющие деревья операций.

Слайд 5





Пример
<stmt> ::= <id> := <expr>
<expr> ::= <expr> + <term> | <term>
<term> ::= <term> * <factor> | <factor>
<factor> ::= (<expr>) | <id>
A:=B*C+D
ABC*D+:=
Польская инверсная запись
Описание слайда:
Пример <stmt> ::= <id> := <expr> <expr> ::= <expr> + <term> | <term> <term> ::= <term> * <factor> | <factor> <factor> ::= (<expr>) | <id> A:=B*C+D ABC*D+:= Польская инверсная запись

Слайд 6





Пример
Описание слайда:
Пример

Слайд 7





5.1.2 ПОЛИЗ
В полизе операнды выполняются слева направо в порядке их следования (в инфиксной записи), знаки операций размещают таким образом, что знаку операции непосредственно предшествуют операнды, скобки отсутствуют.
	a*(b-c)/d-(e+f)*g
	ПОЛИЗ: abc-*d/ef+g*-
Формальное определение постфиксной записи:
Если E – единственный операнд, то полизом такого выражения будет этот операнд
Если есть выражение вида E1 Ѳ E2, где Ѳ – бинарная операция, то E1' E2' Ѳ, где E1', E2' – полизы E1 и E2.
Если Ѳ E, где Ѳ – знак унарной операции, то E' Ѳ, где E' – полиз  E.
Полизом выражения (E) будет E', где E' – полиз  E.
Описание слайда:
5.1.2 ПОЛИЗ В полизе операнды выполняются слева направо в порядке их следования (в инфиксной записи), знаки операций размещают таким образом, что знаку операции непосредственно предшествуют операнды, скобки отсутствуют. a*(b-c)/d-(e+f)*g ПОЛИЗ: abc-*d/ef+g*- Формальное определение постфиксной записи: Если E – единственный операнд, то полизом такого выражения будет этот операнд Если есть выражение вида E1 Ѳ E2, где Ѳ – бинарная операция, то E1' E2' Ѳ, где E1', E2' – полизы E1 и E2. Если Ѳ E, где Ѳ – знак унарной операции, то E' Ѳ, где E' – полиз E. Полизом выражения (E) будет E', где E' – полиз E.

Слайд 8





5.1.2 ПОЛИЗ
Алгоритм интерпретации Полиза.
Используем стек, выражения читаем слева направо. Если очередным элементом полиза является операнд, то заталкиваем в стек. Если операция, то из стека выталкиваем необходимое количество операндов, проводим вычисления и результат заталкиваем в стек.
Описание слайда:
5.1.2 ПОЛИЗ Алгоритм интерпретации Полиза. Используем стек, выражения читаем слева направо. Если очередным элементом полиза является операнд, то заталкиваем в стек. Если операция, то из стека выталкиваем необходимое количество операндов, проводим вычисления и результат заталкиваем в стек.

Слайд 9





5.2 Синтаксически управляемый перевод
На практике синтаксический, семантический анализ и генерация внутреннего представления программы осуществляется одновременно. Существует несколько способов, один из них – синтаксически управляемый перевод.
В основе СУ – перевода лежит способ сопоставления правилам грамматики соответствующих процедур генерации (семантические подпрограммы).
Описание слайда:
5.2 Синтаксически управляемый перевод На практике синтаксический, семантический анализ и генерация внутреннего представления программы осуществляется одновременно. Существует несколько способов, один из них – синтаксически управляемый перевод. В основе СУ – перевода лежит способ сопоставления правилам грамматики соответствующих процедур генерации (семантические подпрограммы).

Слайд 10





5.2.1 Генерация внутреннего представления арифметического выражения
Описание слайда:
5.2.1 Генерация внутреннего представления арифметического выражения

Слайд 11





5.2.1 Генерация внутреннего представления арифметического выражения
Левосторонний вывод
E => T => T*F =>F*F => x*F => x*(E) => x*(E+T) => x*(T+T) => x*(F+T) => x*(x+T) => x*(x+F) => x*(x+y)
2 3 4 6 5 1 2 4 6 4 7
   *     x	  +       x    y		префиксная запись
Правосторонний вывод
E => T => T*F => T*(E) => T*(E+T) => T*(E+F) => T*(E+y) => T*(T+y) => T*(F+y) => T*(x+y) => F*(x+y) =>x*(x+y)
 
6 4 6 4 2 7 4 1 5 3 2
x     x        y    +    *		постфиксная запись
Описание слайда:
5.2.1 Генерация внутреннего представления арифметического выражения Левосторонний вывод E => T => T*F =>F*F => x*F => x*(E) => x*(E+T) => x*(T+T) => x*(F+T) => x*(x+T) => x*(x+F) => x*(x+y) 2 3 4 6 5 1 2 4 6 4 7 * x + x y префиксная запись Правосторонний вывод E => T => T*F => T*(E) => T*(E+T) => T*(E+F) => T*(E+y) => T*(T+y) => T*(F+y) => T*(x+y) => F*(x+y) =>x*(x+y)   6 4 6 4 2 7 4 1 5 3 2 x x y + * постфиксная запись

Слайд 12





5.2.2 Трансляция кода для интерпретации
Описание слайда:
5.2.2 Трансляция кода для интерпретации

Слайд 13





5.2.2 Трансляция кода для интерпретации
xADD proc near
   pop  bp; адрес возврата  
   pop  ax;  первый операнд
   pop  bx;  второй операнд  
   ADD  ax,bx;  сложение
   Push   ax;  результат в стек
   Push   bp;  адрес возврата в стек 
  ret           ;   возврат                                                            xADD  endp
Описание слайда:
5.2.2 Трансляция кода для интерпретации xADD proc near pop bp; адрес возврата pop ax; первый операнд pop bx; второй операнд ADD ax,bx; сложение Push ax; результат в стек Push bp; адрес возврата в стек ret ; возврат xADD endp

Слайд 14





5.2.2 Трансляция кода для интерпретации
Про операцию присвоения
I := E
В полизе IE’:= , 
где I – адрес, E’ – полиз E
Описание слайда:
5.2.2 Трансляция кода для интерпретации Про операцию присвоения I := E В полизе IE’:= , где I – адрес, E’ – полиз E

Слайд 15





Пример написания семантических процедур
Дана грамматика для описания дробных чисел с точкой. Обеспечить перевод числа таким образом, чтобы целая часть стала дробной, а дробная – целой.
1 <десят. с фиксир. точкой> := <целое> <.> <целое>
2 <.>  := .
3 < целое >  :=  <целое> <цифра>
4 < целое >  :=  <цифра>
5  <цифра> :=  0 | 1 | … |9
0 { int f=0; }
2 { f=1; }
5 { if (f) printf(“%c”, c); 
	else q.enque(c); // добавить в очередь} 
1 { printf(“.”); while (!q.queue()) printf(“%c”, q.deque);}
Описание слайда:
Пример написания семантических процедур Дана грамматика для описания дробных чисел с точкой. Обеспечить перевод числа таким образом, чтобы целая часть стала дробной, а дробная – целой. 1 <десят. с фиксир. точкой> := <целое> <.> <целое> 2 <.> := . 3 < целое > := <целое> <цифра> 4 < целое > := <цифра> 5 <цифра> := 0 | 1 | … |9 0 { int f=0; } 2 { f=1; } 5 { if (f) printf(“%c”, c); else q.enque(c); // добавить в очередь} 1 { printf(“.”); while (!q.queue()) printf(“%c”, q.deque);}

Слайд 16





5.2.3 Генерация кода для оператора READ
Описание слайда:
5.2.3 Генерация кода для оператора READ

Слайд 17





5.2.4 Генерация кода для безусловного перехода
goto L
 	[jmp  L]
        	[L:       ]
Оператор перехода в терминах ПОЛИЗа означает, что процесс интерпретации надо продолжить с того элемента ПОЛИЗа, который указан как операнд операции перехода.
Чтобы можно было ссылаться на элементы ПОЛИЗа, будем считать, что все они перенумерованы, начиная с 1 (допустим, занесены в последовательные элементы одномерного массива).
Пусть ПОЛИЗ оператора, помеченного меткой L, начинается с номера p, тогда оператор перехода goto L в ПОЛИЗе можно записать как p !
 
где ! - операция выбора элемента ПОЛИЗа, номер которого равен p.
Описание слайда:
5.2.4 Генерация кода для безусловного перехода goto L [jmp L] [L: ] Оператор перехода в терминах ПОЛИЗа означает, что процесс интерпретации надо продолжить с того элемента ПОЛИЗа, который указан как операнд операции перехода. Чтобы можно было ссылаться на элементы ПОЛИЗа, будем считать, что все они перенумерованы, начиная с 1 (допустим, занесены в последовательные элементы одномерного массива). Пусть ПОЛИЗ оператора, помеченного меткой L, начинается с номера p, тогда оператор перехода goto L в ПОЛИЗе можно записать как p !   где ! - операция выбора элемента ПОЛИЗа, номер которого равен p.

Слайд 18





5.2.5 Генерация кода для оператора IF
1. If B then S
Введем вспомогательную операцию - условный переход "по лжи" с семантикой
if (not B) then goto L
Это двухместная операция с операндами B и L. Обозначим ее !F
ПОЛИЗ: B’ p !F
где p - номер элемента, с которого начинается ПОЛИЗ оператора, помеченного меткой L.
 
2. if B then S1 else S2  
if (not B) then goto L2; S1; goto L3; L2: S2; L3: ...
ПОЛИЗ: B’ p2 !F S1’ p3 ! S2’ ...
Описание слайда:
5.2.5 Генерация кода для оператора IF 1. If B then S Введем вспомогательную операцию - условный переход "по лжи" с семантикой if (not B) then goto L Это двухместная операция с операндами B и L. Обозначим ее !F ПОЛИЗ: B’ p !F где p - номер элемента, с которого начинается ПОЛИЗ оператора, помеченного меткой L.   2. if B then S1 else S2   if (not B) then goto L2; S1; goto L3; L2: S2; L3: ... ПОЛИЗ: B’ p2 !F S1’ p3 ! S2’ ...

Слайд 19





5.2.5 Генерация кода для оператора IF
Описание слайда:
5.2.5 Генерация кода для оператора IF

Слайд 20





5.2.5 Генерация кода для оператора IF
Описание слайда:
5.2.5 Генерация кода для оператора IF

Слайд 21





5.2.6 Генерация кода для цикла WHILE
Описание слайда:
5.2.6 Генерация кода для цикла WHILE

Слайд 22





5.2.6 Генерация кода для цикла WHILE
Описание слайда:
5.2.6 Генерация кода для цикла WHILE

Слайд 23





5.2.6 Генерация кода для цикла WHILE
Описание слайда:
5.2.6 Генерация кода для цикла WHILE

Слайд 24





5.2.7 Генерация кода для цикла FOR
Описание слайда:
5.2.7 Генерация кода для цикла FOR

Слайд 25





5.2.7 Генерация кода для цикла FOR
Описание слайда:
5.2.7 Генерация кода для цикла FOR

Слайд 26





5.2.7 Генерация кода для цикла FOR
Описание слайда:
5.2.7 Генерация кода для цикла FOR

Слайд 27





5.2.7 Генерация кода для цикла FOR
Описание слайда:
5.2.7 Генерация кода для цикла FOR

Слайд 28





5.2.8 Генерация кода для оператора CASE
Описание слайда:
5.2.8 Генерация кода для оператора CASE

Слайд 29





5.2.9 Генерация кода для цикла с постусловием REPEAT
Описание слайда:
5.2.9 Генерация кода для цикла с постусловием REPEAT

Слайд 30





5.2.10 Генерация кода для раздела объявления переменных
Описание слайда:
5.2.10 Генерация кода для раздела объявления переменных

Слайд 31





Пример. Генерация кода
Описание слайда:
Пример. Генерация кода



Похожие презентации
Mypresentation.ru
Загрузить презентацию