Введение
Технологическая цепочка операций по созданию и исполнению новой программы:
Логическая последовательность этапов трансляции
Пример: функция, возвращающая наибольший общий делитель своих аргументов
ИМ (исходный модуль):
…
int nod( int first, int second ){
while ( first != second )
if ( first < second )
second -= first;
else
first -= second;
return first;
}
…
ПЛ (последовательность лексем), все числовые индексы условны:
Во внутреннем представлении:
[0,13] [5,52] [2,2] [0,13] [5,87] [4,2] [0,13] [5,33] [2,3] [2,0] [0,7] [2,2] [5,87] [1,9] [5,33] [2,3] [0,3] [2,2] [5,87] [1,6] [5,33] [2,3] [5,33] [1,2] [5,87] [4,0] [0,4] [5,87] [1,2] [5,33] [1,0] [0,15] [5,87] [1,0] [2,1]
С использованием имен групп слов:
<keyword,13> <ident,52> <bracket,2> <keyword,13> <ident,87> <delimiter,2> <keyword,13> <ident,33> <bracket,3> <bracket,0> <keyword,7> <bracket,2> <ident,87> <operation,9> <ident,33> <bracket,3> <keyword,3> <bracket,2> <ident,87> <operation,6> <ident,33> <bracket,3> <ident,33> <operation,2> <ident,87> <delimiter,0> <keyword,4> <ident,87> <operation,2> <ident,33> <delimiter,0> <keyword,15> <ident,87> <delimiter,0> <bracket,1>
В исходных обозначениях:
int nod ( int first , int second ) { while ( first != second ) if ( first < second ) second -= first ; else first -= second ; return first ; }
ПФЗ (постфиксная запись):
nod int function first int argument second int argument – заголовок функции
label_0_0: first second != label_0_1 jmpOnFalse – заголовок оператора цикла
first second < label_1_0 jmpOnFalse second first -= label_1_1 jmp label_1_0: first second -= label_1_1: – условный оператор
label_0_0 jmp – завершение оператора цикла
label_0_1: first return – оператор возврата
ПТ (последовательность тетрад): Последовательность триад:
defineLabel |
label_0_0 |
||
!= |
second |
first |
push |
jmpOnFalse |
label_0_1 |
pop |
|
< |
second |
first |
push |
jmpOnFalse |
label_1_0 |
pop |
|
-= |
first |
second |
second |
jmp |
label_1_1 |
||
defineLabel |
label_1_0 |
||
-= |
second |
first |
first |
defineLabel |
label_1_1 |
||
jmp |
label_0_0 |
||
defineLabel |
label_0_1 |
||
return |
First |
defineLabel |
label_0_0 |
|
!= |
second |
first |
jmpOnFalse |
label_0_1 |
pop |
< |
second |
first |
jmpOnFalse |
label_1_0 |
pop |
-= |
first |
second |
= |
pop |
second |
jmp |
label_1_1 |
|
defineLabel |
label_1_0 |
|
-= |
second |
first |
= |
pop |
first |
defineLabel |
label_1_1 |
|
jmp |
label_0_0 |
|
defineLabel |
label_0_1 |
|
return |
First |
Последовательность пентад:
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.