Скачать презентацию Трансляция арифметических выражений Тройка EC EL ER Скачать презентацию Трансляция арифметических выражений Тройка EC EL ER

8d1544494d61138044bf81c4e7bdbc86.ppt

  • Количество слайдов: 41

Трансляция арифметических выражений Тройка EC = EL ER, где EC – результат, EL, ER Трансляция арифметических выражений Тройка EC = EL ER, где EC – результат, EL, ER – левый и правый операнды, – операция. Пример: d = a+b*c должна быть построена последовательность троек: T 1 = b*c, d = a+T 1 1

Метод Рутисхаузера 0. Записать в полной скобочной форме: d = a+b*c d = a+(b*c) Метод Рутисхаузера 0. Записать в полной скобочной форме: d = a+b*c d = a+(b*c) 1. Сопоставить индексы: N[0]: =0 J: =1 Цикл-пока S[J] ’_’ Если S[J] = ( или S[J] = <операнд> то N[J]: =N[J-1] +1 иначе N[J]: =N[J-1] -1 Все-если J: =J+1 Все-цикл N[J]: =0 2. Определить max индекса k(k-1)k и построить тройку. 3. Удалить обработанные символы из выражения, результату сопоставить индекс N=k-1 2

Пример использования метода Рутисхаузера Пример. (((a+b)*c)+d)/k a) S: ( ( ( a + b Пример использования метода Рутисхаузера Пример. (((a+b)*c)+d)/k a) S: ( ( ( a + b ) * c ) + d ) / k N: 0 1 2 3 4 3 2 1 2 1 0 => T 1 = a+b b) S: ( ( T 1 * c ) + d ) / k N: 0 1 2 3 2 1 0 1 0 c) S: ( T 2 + d ) / k N: 0 1 2 1 0 d) S: T 3 / k N: 0 1 0 => T 2 = T 1*c => T 3 = T 2+d => T 4 = T 3/k 3

Классификация компилирующих программ Транслятор – программа, которая переводит программу, написанную на одном языке, в Классификация компилирующих программ Транслятор – программа, которая переводит программу, написанную на одном языке, в эквивалентную ей программу, написанную на другом языке. Компилятор – транслятор с языка высокого уровня на машинный язык или язык ассемблера. Ассемблер – транслятор с языка Ассемблера на машинный язык. Интерпретатор – программа, которая принимает исходную программу и выполняет ее, не создавая программы на другом языке. Макрогенератор (для компиляторов – препроцессор) – программа, которая обрабатывает исходную программу, как текст, и выполняет в нем замены указанных символов на подстроки. Макрогенератор обрабатывает программу до трансляции. 4

Синтаксис и семантика Синтаксис – это совокупность правил, определяющих допустимые конструкции языка, т. е. Синтаксис и семантика Синтаксис – это совокупность правил, определяющих допустимые конструкции языка, т. е. его форму. Семантика – это совокупность правил, определяющих логическое соответствие между элементами и значением синтаксически орректных редложений, . к п т е. содержание языка. 5

Структура процесса компиляции Лексический анализ Синтаксический анализ Семантический анализ Распределение памяти Генерация и оптимизация Структура процесса компиляции Лексический анализ Синтаксический анализ Семантический анализ Распределение памяти Генерация и оптимизация объектного кода 6

Лексический анализ Лексемы Терминальные слова Базовые понятия Пример. if Sum>5 then pr: = true; Лексический анализ Лексемы Терминальные слова Базовые понятия Пример. if Sum>5 then pr: = true; Лексема Тип Значение if Служебное слово Код «if» Sum Идентификатор > Служебный символ Код «>» 5 Литерал then Служебное слово pr Идентификатор : = Служебный символ Код «: =» true Литерал ; Служебный символ Код «; » Ссылка Адрес в таблице идентиф. Адрес в таблице литералов Код «then» Адрес в таблице идентиф. Адрес в таблице литералов - 7

Синтаксический анализ Таблица токенов Лексема Тип if Сс Sum Ид > С 5 Кц Синтаксический анализ Таблица токенов Лексема Тип if Сс Sum Ид > С 5 Кц then Сс pr Ид : = С true Кл ; Значение Ссылка Р Код if Адрес Логическое выражение Код > Адрес Условный оператор Код then Адрес Оператор Код : = Адрес 8

Формальный язык Алфавит – непустое конечное множество символов, используемых для записи предложений языка. Пример: Формальный язык Алфавит – непустое конечное множество символов, используемых для записи предложений языка. Пример: A = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, +, -} Строка – любая последовательность символов алфавита, расположенных один за другим. A* - множество строк, включая пустую, составленных из А. A+ - множество строк за исключением пустой, составленных из А. A* = A+ e Формальным языком L в алфавите A называют произвольное подмножество множества A*. Язык можно задать перечислением и правилами продукции. 9

Формальная грамматика G = (VT, VN, P, S), где VT – алфавит языка или Формальная грамматика G = (VT, VN, P, S), где VT – алфавит языка или множество терминальных (незаменяемых) символов; VN – множество нетерминальных (заменяемых) символов – вспомогательный алфавит, символы которого обозначают допустимые понятия языка, VT VN = ; V = VT VN – словарь грамматики; P – множество порождающих правил – каждое правило состоит из пары строк (α, β), где α V+ – левая часть правила, β V* – правая часть правила: α β, где строка α должна содержать хотя бы один нетерминал; S VN – начальный символ – аксиома грамматики. 10

Грамматика записи десятичных чисел G 0 VT = {0, 1, 2, 3, 4, 5, Грамматика записи десятичных чисел G 0 VT = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, +, -}; VN = {<целое>, <целое без знака>, <цифра>, <знак>}; P = {<целое> <знак><целое без знака>, <целое> <целое без знака>, <целое без знака> <цифра><целое без знака>, <целое без знака> <цифра>, <цифра> 0, <цифра> 1, <цифра> 2, <цифра> 3, <цифра> 4, <цифра> 5, <цифра> 6, <цифра> 7, <цифра> 8, <цифра> 9, <знак> +, <знак> - }; S = <целое>. Правосторонняя рекурсия 11

Форма Бэкуса-Наура (БНФ) Условные обозначения: <Имя> – нетерминальный символ – конструкция; Имя – терминальный Форма Бэкуса-Наура (БНФ) Условные обозначения: <Имя> – нетерминальный символ – конструкция; Имя – терминальный символ – символ алфавита; : : = – «можно заменить на» ; | – «или» Пример: <целое> : : = <знак><целое без знака>|<целое без знака> : : = <цифра><целое без знака>|<цифра> <цифра > : : = 0|1|2|3|4|5|6|7|8|9 <знак> : : = +| - 12

Грамматический разбор Вывод представляет собой последовательность подстановок. Пример. Вывод строки «-45» : <целое> 1 Грамматический разбор Вывод представляет собой последовательность подстановок. Пример. Вывод строки «-45» : <целое> 1 1<знак><целое без знака> 2 2 <знак><цифра><целое без знака> 3 3 <знак><цифра> 4 4 - <цифра> 5 5 - 4<цифра> 6 знак 6 - 45 Грамматический разбор Восходящий разбор - Нисходящий разбор целое цбз цифра 4 цбз цифра 5 13

Левосторонний восходящий грамматический разбор Пример. Разобрать строку «-45» Правила грамматики: <целое> : : = Левосторонний восходящий грамматический разбор Пример. Разобрать строку «-45» Правила грамматики: <целое> : : = <знак><целое без знака>|<целое без знака>, <целое без знака> : : = <целое без знака><цифра>|<цифра>, <цифра > : : = 0|1|2|3|4|5|6|7|8|9, <знак> : : = +| -. Последовательность получения сентенциальных форм данным методом: <знак> 45 <знак> <цифра>5 <знак> <цбз>5 Тупик! <целое> 5 <знак><целое> 5 Тупик! <знак> <цбз><цифра> Тупик! <целое> <цифра> <знак> <цбз> <целое> Тупик! 14

Левосторонний нисходящий грамматический разбор Пример. Разобрать строку «-45» Правила грамматики: а) <целое> : : Левосторонний нисходящий грамматический разбор Пример. Разобрать строку «-45» Правила грамматики: а) <целое> : : = <знак><целое без знака>|<целое без знака> б) <целое без знака> : : = <цифра><целое без знака>|<цифра>, в) <цифра > : : = 0|1|2|3|4|5|6|7|8|9, г) <знак> : : = +| -. 15

Левосторонний нисходящий грамматический разбор Распознано Текущий символ Цель или подцель Правило Истина? 1 - Левосторонний нисходящий грамматический разбор Распознано Текущий символ Цель или подцель Правило Истина? 1 - Целое A 1 Да 2 - Знак Г 1 Нет Г 2 3 4 5 4 Целое без знака Б 1 4 - Да Да Цифра В 1 -В 4 Нет 6 7 В 5 - 4 5 Целое без знака Б 1 5 Цифра В 1 -В 5 Нет В 6 8 Да Нет 9 10 Да Нет _ Целое без знака Б 1 11 _ Цифра В 1 -В 10 Нет 12 _ Целое без знака Б 2 Нет 13 _ Цифра В 1 -В 10 Нет 14 - 4 5 Целое без знака Б 2 Да 15 5 Цифра В 1 -В 5 Нет В 6 Да 16 - 4 5 16

Классификация грамматик Хомского Тип 0 – грамматики фразовой структуры или грамматики «без ограничений» : Классификация грамматик Хомского Тип 0 – грамматики фразовой структуры или грамматики «без ограничений» : α β, где α V+, β V*– в таких грамматиках допустимо наличие любых правил вывода, что свойственно грамматикам естественных языков; Тип 1 – контекстно-зависимые (неукорачивающие) грамматики: α β, где α V+, β V*, | α | | β | – в этих грамматиках для правил вида α X β α x β возможность подстановки строки х вместо символа X определяется присутствием подстрок α и β, т. е. контекста, что также свойственно грамматикам естественных языков; Тип 2 – контекстно-свободные грамматики: A β, где A VN, β V* – поскольку в левой части правила стоит нетерминал, подстановки не зависят от контекста; Тип 3 – регулярная грамматика: A α, A αB, где A, В VN, α VT; 17

Конечный автомат M = (Q, , δ, q 0, F), где Q – конечное Конечный автомат M = (Q, , δ, q 0, F), где Q – конечное множество состояний; – конечное множество входных символов; δ(qi, сk) – функция переходов (qi – текущее состояние, сk – очередной символ); q 0 – начальное состояние; F = {qj} – подмножество допускающих состояний. Пример. Автомат «Чет-нечет» : Q = {Чет, Нечет}; = {0, 1}; δ(Чет, 0) = Чет, δ(Нечет, 0) = Нечет, δ(Чет, 1) = Нечет, δ(Нечет, 1) = Чет; q 0 = Чет; Граф переходов F = {Чет} 1 0 Чет 1 Нечет 0 Таблица переходов 0 1 Чет Нечет Чет Синтаксическая диаграмма 0 1 1 0 18

Реализация конечного автомата 0 Чет Нечет 1 Символы заверш. Другие символы Чет Нечет Конец Реализация конечного автомата 0 Чет Нечет 1 Символы заверш. Другие символы Чет Нечет Конец Ошибка Нечет Чет Ошибка Ind : = 1 q : = q 0 Цикл-пока q «Ошибка» и q «Конец» q = Table [q, S[Ind]] Ind : = Ind +1 Все-цикл Если q = «Конец» то «Строка принята» иначе «Строка отвергнута» Все-если 19

Лексические анализаторы Пример. Распознаватель целых чисел. Состояние Знак Цифра Разделитель Другие 1 2, А Лексические анализаторы Пример. Распознаватель целых чисел. Состояние Знак Цифра Разделитель Другие 1 2, А 1 3, А 2 E, D 1 E, D 4 2 Е, D 2 3, А 2 E, D 3 E, D 4 3 K, A 3 3, А 2 K, A 3 E, D 4 A 0: Инициализация: Целое : = 0; Знак_числа : = «+» . А 1: Знак_числа : = Знак А 2: Целое : = Целое*10 + Цифра А 3: Если Знак_числа = «-» то Целое : = -Целое Все-если 20

Распознаватель целых чисел Д 1: «Строка не является десятичным числом» ; Д 2: «Два Распознаватель целых чисел Д 1: «Строка не является десятичным числом» ; Д 2: «Два знака рядом» ; Д 3: «В строке отсутствуют цифры» , Д 4: «В строке встречаются недопустимые символы» Ind : = 1 q : = 1 Выполнить А 0 Цикл-пока q «Е» и q «К» Если S[Ind] = «+» или S[Ind] = «-» , то j : = 1 иначе Если S[Ind] « 0» и S[Ind] « 9» , то j : = 2, иначе j : = 3 Все-если Выполнить Ai : = Table [q, j]. A() q : = Table [q, j] Ind : = Ind +1 Все-цикл Если q = «К» то Выполнить А 3 Вывести «Это число» иначе Вывести сообщение Di Все-если 21

Синтаксические анализаторы Пример. Синтаксический анализатор списка описания целых скаляров, массивов и функций, например: int Синтаксические анализаторы Пример. Синтаксический анализатор списка описания целых скаляров, массивов и функций, например: int xaf, y 22[5], zrr[2][4], re[N], fun(), *g; int V, V[N][N], V(), *V Обозначения: V – идентификатор; N – целочисленная константа; служебные символы: «[ ] ( ) , ; *» . V 1 3 2 3 3 E 4 E 5 E 6 E 7 E 8 E N E E E 7 E E * 2 E E E E ( E E 4 E E E ) E E E 5 E E [ E E 6 ] E E E 8 E , E E 1 ; E E К Другие E E E E 22

Алгоритм распознавателя Ind : = 1 q : = 1 Цикл-пока q «Е» и Алгоритм распознавателя Ind : = 1 q : = 1 Цикл-пока q «Е» и q «К» q : = Table [q, Pos(S[Ind], «VN*()[]; » )] Ind : = Ind +1 Все-цикл Если q = «К» то Выполнить А 3 Вывести сообщение «Это число» иначе Вывести сообщение Дi Все-если 23

Автомат с магазинной памятью PM = (Q, , Г, , q 0, z 0, Автомат с магазинной памятью PM = (Q, , Г, , q 0, z 0, F), где Q – конечное множество состояний автомата; – конечный входной алфавит; Г – конечное множество магазинных символов; (q, ck, zj) – функция переходов; q 0 Q – начальное состояние автомата; z 0 Г – символ, находящийся в магазине в начальный момент, F Q – множество заключительных (допускающих) состояний. Пример. Синтаксический анализатор выражений. = {<Ид>, +, –, *, /, (, ), ◄, ►}. 24

Синтаксические диаграммы выражения A * (B + C) + (D + F) / (A Синтаксические диаграммы выражения A * (B + C) + (D + F) / (A + B) - C * D 25

Объединенная синтаксическая диаграмма 26 Объединенная синтаксическая диаграмма 26

Таблица переходов автомата 27 Таблица переходов автомата 27

Алгоритм распознавателя q: =1 Ind : = 1 Mag : = Цикл-пока q «E» Алгоритм распознавателя q: =1 Ind : = 1 Mag : = Цикл-пока q «E» и q «К» q : = Table [q, String[Ind]]. q Если q = то Mag Table [q, String[Ind]]. S q : = X иначе Если q = то Mag q иначе Ind : = Ind +1 Все-если Если q = «К» то «Строка принята» иначе «Строка отвергнута» Все-если 28

LL(k)-грамматики Пример. Дана грамматика записи выражений: 1) <Строка> : : = <Выр>◄ 2) <Выр> LL(k)-грамматики Пример. Дана грамматика записи выражений: 1) <Строка> : : = <Выр>◄ 2) <Выр> : : = <Терм> <Слож> 3) <Слож> : : = e | + <Терм> <Слож> | - <Терм><Слож> 4) <Терм> : : = <Множ><Умн> 5) <Умн> : : = e | *<Множ><Умн> | / <Множ><Умн> 6) <Множ> : : = <Ид> | (<Выр>) 29

Метод рекурсивного спуска Пример. Выражение 30 Метод рекурсивного спуска Пример. Выражение 30

Алгоритм распознавателя Функция Выражение: Boolean: R: =Терм() Цикл-пока R=true и (Next. Symbol =’+’ или Алгоритм распознавателя Функция Выражение: Boolean: R: =Терм() Цикл-пока R=true и (Next. Symbol =’+’ или Next. Symbol =’-’) R: =Терм() Все-цикл Выражение: = R Все Функция Терм: Boolean: Множ() Цикл-пока R=true и (Next. Symbol =’*’ или Next. Symbol =’/’) R: =Множ() Все-цикл Терм: = R Все 31

Алгоритм распознавателя (2) Функция Множ: Boolean: Если Next. Symbol =’(’ то R: =Выражение() Если Алгоритм распознавателя (2) Функция Множ: Boolean: Если Next. Symbol =’(’ то R: =Выражение() Если Next. Symbol ‘)’ то Ошибка Все-если иначе R: = Ид() Все-если Все Основная программа: R: =Выражение() Если Next. Symbol ‘◄’ то Ошибка () Все-если Конец 32

LR(k)-грамматики Если два символа α, β V расположены рядом в сентенциальной форме, то между LR(k)-грамматики Если два символа α, β V расположены рядом в сентенциальной форме, то между ними возможны следующие отношения, названные отношениями предшествования: 1) α принадлежит основе, а β – нет, т. е. α – конец основы: α > β; 2) β принадлежит основе, а α – нет, т. е. β – начало основы: α < β ; 3) α и β принадлежит одной основе, т. е. α = β; 4) α и β не могут находиться рядом в сентенциальной форме (ошибка). Пример. Грамматика арифметических выражений (с левосторонней рекурсией): <Выражение> : : = <Терм>|<Выражение>+<Терм>|<Выражение>- <Терм> : : = <Множитель> | <Терм>* <Множитель> | <Терм> / <Множитель> : : = (<Выражение>) | <Идентификатор> 33

Построение таблицы предшествования < - начало основы; > - конец основы; = - одна Построение таблицы предшествования < - начало основы; > - конец основы; = - одна основа; ? - ошибка ►A+ ► A* ►(A ► A) ►A◄ +A+ +A* +(A +A) +A◄ *A+ *A* *(A *A ) *A◄ (A+ (A* ((A (A) (A◄ A)+ A)* A)( A)) A)◄ 34

Пример разбора выражения ►d+c*(a+b) ◄ 35 Пример разбора выражения ►d+c*(a+b) ◄ 35

Польская запись представляет собой последовательность команд двух типов: КI, где I – идентификатор операнда Польская запись представляет собой последовательность команд двух типов: КI, где I – идентификатор операнда – выбрать число по имени I и заслать его в стек операндов; K , где – операция – выбрать два верхних числа из стека операндов, произвести над ними операцию и занести результат в стек операндов. Пример: A+B*C KAKBKCK*K+ 36

Алгоритм Бауэра-Замельзона Построение польской записи : а) если символ – операнд, то вырабатывается команда Алгоритм Бауэра-Замельзона Построение польской записи : а) если символ – операнд, то вырабатывается команда КI, б) если символ – операция, то выполняются действия согласно таблице: Операции: I – заслать в стек операций и читать следующий символ; II – генерировать K , заслать в стек операций и читать следующий символ; III – удалить верхний символ из стека операций и читать следующий символ; IV – генерировать K и повторить с тем же входным символом. 37

Пример. Построить тройки для выражения (a+b*c)/d. Построение польской записи: Ka Kb Kc K* K+ Пример. Построить тройки для выражения (a+b*c)/d. Построение польской записи: Ka Kb Kc K* K+ Kd K/ или abc*+d/ 38

Пример (2) Выполнение операций: 39 Пример (2) Выполнение операций: 39

Распределение памяти 1) 2) 3) 4) статическое; автоматическое; управляемое; базированное. 40 Распределение памяти 1) 2) 3) 4) статическое; автоматическое; управляемое; базированное. 40

Генерация и оптимизация кодов Пример «заготовки» : Mov AX, <Op 1> Add AX, <Op Генерация и оптимизация кодов Пример «заготовки» : Mov AX, Add AX, Mov AX, Машинно-независимая оптимизация включает: а) исключение повторных вычислений одних и тех же операндов; б) выполнение операций над константами во время трансляции; в) вынесение из циклов вычисления величин, не зависящих от параметров циклов; г) упрощение сложных логических выражений и т. п. Машинно-зависимая оптимизация включает: а) исключение лишних передач управления типа «память-регистр» ; б) выбор более эффективных команд т. п. 41