Часть II. Формальное описание языков программирования ( Формальная спецификация формальных языков ) Приложение. Атрибутная грамматика языка SIL. Генерация.

Презентация:



Advertisements
Похожие презентации
Часть II. Формальное описание языков программирования ( Формальная спецификация формальных языков ) Приложение. Грамматика языка IMP в форме BNF.
Advertisements

Часть II. Формальное описание языков программирования ( Формальная спецификация формальных языков ) Атрибутные грамматики (2). Генерация кода.
Часть II. Формальное описание языков программирования ( Формальная спецификация формальных языков ) Приложение. Операционная семантика языка SIL.
Часть II. Формальное описание языков программирования ( Формальная спецификация формальных языков ) Приложение. Описание статической семантики языка IMP.
Часть II. Формальное описание языков программирования ( Формальная спецификация формальных языков ) Операционная семантика.
Оператор присваивания := Ввода Read(x1,x2,…) Readln(x1,x2,…) Вывода Writex(x1,x2,…) Writeln(x1,x2,…) Составной оператор begin …. End;
Введение в программирование. Алфавит языка АлгоритмическийБейсикПаскаль 1) прописные и заглавные буквы русского алфавита; 2) 26 латинских строчных и 26.
Часть II. Формальное описание языков программирования ( Формальная спецификация формальных языков ) Приложение. Атрибутная грамматика языка IMP.
Одномерный массив Turbo Pascal 9 класс. Объясните каждый шаг в программе. Что делает программа? Сколько раз срабатывает цикл? Var A : array [1..10] of.
Часть II. Формальное описание языков программирования ( Формальная спецификация формальных языков ) Приложение. Дерево абстрактного синтаксиса языка IMP.
Conditional Statements. Program control statements modify the order of statement execution. Statements in a C program normally executes from top to bottom,
Рекурсивные структуры данных Списки, двоичные деревья.
Использование частных случаев в условиях. Флаг в задачах Задача. Определить место первого четного элемента в массиве.
Алгоритмические структуры 1.Линейный 2.Ветвление 3.Цикл.
1 Кубенский А.А. Функциональное программирование. Глава 5. Системы исполнения функциональных программ. Глава 5. Системы исполнения функциональных программ.
Выполнила учитель английского языка МБОУ СОШ с.Субханкулово Сираева Л.Р. FOOD.
Обработка массивов Сортировка. Сортировка массивов «…создается впечатление, что можно построить целый курс программирования, выбирая примеры только из.
Заглавные и строчные латинские буквы цифры 0…9 специальные символы + - * / = > <., : ^ () {} [] $ #
Задача 1. Какое значение будет иметь n в результате выполнения следующего фрагмента алгоритма? n:=5 m:=17 если nm то n:=n*m иначе n:=n-m все.
ТЕКСТОВЫЕ ФАЙЛЫ Turbo Pascal 7.0. Операции с текстовыми файлами Выделение буфера обмена Установка связи Открытие файла Чтение из файла Запись в файл Закрытие.
Транксрипт:

Часть II. Формальное описание языков программирования ( Формальная спецификация формальных языков ) Приложение. Атрибутная грамматика языка SIL. Генерация кода

Простой императивный язык (SIL) 1 ::= skip | := | 2 ; 3 | if then 2 else 3 | while do 2 1 ::= | | | | 2 * 3 1 ::= true | false | 1 = 2 | 1 2 | ¬ 2 | 2 3 | 2 3

Генерация кода операторов (1) ::=.code :=.code.labin := 0 1 ::= 2 ; 3 1.code := append( 2.code, 3.code) 2.labin := 1.labin 3.labin := 2.labout 1.labout := 3.labout

Генерация кода операторов (2) ::= skip.code :=.labout :=.labin |.code :=.code.labout :=.labin

Генерация кода операторов (3) 1 ::= if then 2 else 3 2.labin := 1.labin labin := 2.labout 1.labout := 3.labout 1.code := append(.code, ( "BZ" label( 1.labin) ), 2.code, ( "BR" label( 1.labin + 1) ), ( label( 1.labin) "NOP ), 3.code, ( label( 1.labin+1) "NOP ) )

Генерация кода операторов (4) 1 ::= while do 2 2.labin := 1.labin labout := 2.labout 1.code := append( ( label( 1.labin) "NOP ),.code, ( "BZ" label( 1.labin + 1) ), 2.code, ( "BR" label( 1.labin) ), ( label( 1.labin+1) "NOP ) )

Генерация кода операторов (5) ::= :=.temp := 1.code := append(.code, ("STO".name))

Генерация кода выражений 1 ::= 1.code :=.value) > | 1.code :=.name) > | temp := 1.temp 3.temp := 1.temp code := append( 2.code, ( "STO" temp( 1.temp) ), 3.code, ( "ADD" temp( 1.temp) ) )