Реферат: Проектирование трансляторов
С1 - номер имвола, с которого начинается <инстр.2>.
С2 - номер символа,следующего за <инстр.2>.
Операторы BZ и BR не порождают результирующего значения.
Часть их работы состоит в исключении из стека двух верхних эле-
ментов (значения <выр> и <С1>) для BZ и соответственно одного
<С2> для BR. Оператор безусловного перехода <С2>BR - использует-
ся метка <С2> для внутренних генерируемых переходов. В то время
как оператор <метка> BRL в качестве значения <метка> использует
адрес эл-та таблицы символов.
5) Описание массива. ARRAY A[Li:Ui,...,Ln:Un]
можно представить в виде:
LiUi...LnUn A ADEC, где ADEC - оператор, имеющий переменное
число операндов, зависящее от числа индексов. Операнд А - оче-
видно, адрес элемента таблицы символов для А -> При вычислении
ADEC, следовательно, из этого элемента таблицы извлекается ин-
формация о размерности массива А (т.е. и о числе операндов ADEC)
- с этой целью изменен порядок записи операндов.
6) Переменная с индексами A[<выр.i>,...,<выр.n>] преставляется
в виде <выр.1>...<выр.2> A SUBS
Оператор SUBS используя элемент А таблицы символов и ин-
дексные выражения, вычисляет адрес элемента массива. Затем опе-
ранды исключаются из стека и на их место заносится новый опе-
ранд, определяемый адресом элемента массива и его типом.
Использование для индексирования специального оператора
SUBS - более удобный способ для польской записи.
Пример: BEGIN INTEGER K; ARRAY[1:I-j]; K:=0;
L:IF I>j THEN K:=K+A[I-j]*6 ELSE
BEGIN I:=I+1;I:=I+1;COTOL END
END
(1) BLOCK 1 IJ - A ADEC K0 := Польская запись
(11) IJ - 29 BMZ
(16) K KIJ - A SUBS 6*+:= 41 BR Для каждого символа отво-
(29) II1 + := II1 + := L BRL дится одна строка (место)
(41) BLCEND
Как видно, описание INTEGER K (не требующее генерации ко-
манд) отсутствует во внутреннем представлении. Оно нужно для
формирования элемента таблицы символов для К.
Введены два оператора без операндов BLOCK (начало блока) и
BLCKEND (конец блока).
N содерж. N содерж. таблица
слова слова символ слова слова символ символов
┌────┬────┬────┬───────┬────┬────┬────┬────────┬───┬─────┐
│ 1 │ 11 │ │ BLOCK │ 36 │ 6 │ │ SUBS │ 1 │ I │
├────┼────┼────┼───────┼────┼────┼────┼────────┼───┼─────┤
│ 2 │ 1 │ 1 │ 1 │ 37 │ 1 │ 6 │ 6 │ 2 │ Y │
├────┼────┼────┼───────┼────┼────┼────┼────────┼───┼─────┤
│ 4 │ 2 │ 1 │ I │ 39 │ 15 │ │ * │ 3 │ A │
├────┼────┼────┼───────┼────┼────┼────┼────────┼───┼─────┤
│ 6 │ 2 │ 2 │ Y │ 40 │ 14 │ │ + │ 4 │ K │
├────┼────┼────┼───────┼────┼────┼────┼────────┼───┼─────┤
│ 8 │ 16 │ │ - │ 41 │ 7 │ │ := │ 5 │ L25 │
├────┼────┼────┼───────┼────┼────┼────┼────────┼───┴─────┘
│ 9 │ 2 │ 3 │ A │ 42 │ 1 │ 64 │ 64 │
├────┼────┼────┼───────┼────┼────┼────┼────────┤
│ 11 │ 13 │ │ ADEC │ 44 │ 9 │ │ BR │
├────┼────┼────┼───────┼────┼────┼────┼────────┤
│ 12 │ 2 │ 4 │ K │ 45 │ 2 │ 1 │ I │
├────┼────┼────┼───────┼────┼────┼────┼────────┤
│ 14 │ 1 │ 0 │ 0 │ 47 │ 2 │ 1 │ I │
├────┼────┼────┼───────┼────┼────┼────┼────────┤
│ 16 │ 7 │ │ := │ 49 │ 1 │ 1 │ 1 │
├────┼────┼────┼───────┼────┼────┼────┼────────┤
│ 17 │ 2 │ 1 │ I │ 51 │ 14 │ │ + │
├────┼────┼────┼───────┼────┼────┼────┼────────┤
│ 19 │ 2 │ 2 │ Y │ 52 │ 7 │ │ := │
├────┼────┼────┼───────┼────┼────┼────┼────────┤
│ 21 │ 16 │ │ - │ 53 │ 2 │ 1 │ I │
├────┼────┼────┼───────┼────┼────┼────┼────────┤
│ 22 │ 1 │ 45 │ 45 │ 55 │ 2 │ 1 │ I │
├────┼────┼────┼───────┼────┼────┼────┼────────┤
│ 24 │ 8 │ │ BMZ │ 57 │ 1 │ 1 │ 1 │
Страницы: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40