Главная

Популярная публикация

Научная публикация

Случайная публикация

Обратная связь

ТОР 5 статей:

Методические подходы к анализу финансового состояния предприятия

Проблема периодизации русской литературы ХХ века. Краткая характеристика второй половины ХХ века

Ценовые и неценовые факторы

Характеристика шлифовальных кругов и ее маркировка

Служебные части речи. Предлог. Союз. Частицы

КАТЕГОРИИ:






Учет составных переменных и вывод функции.




Составные переменные - элементы массива, поля записей. Адрес делится на три части. Например, адрес А[ i, j ]- элемента двухмерного массива А [1.. m,1.. n ], содержит:

1) базу - адрес начала размещения всего массива;

2) смещение начала строки с номером i = (i -1)* n * size;

3) (j -1)* size смещение элемента внутри строки, где size = количество байт под один элемент.

Значение базы определяется при загрузке модуля, а величина I =[(i -1)* n + j -1]* size – при трансляции, если – константы. Поэтому база хранится в базовом регистре, а I – в индексном. Для работы с массивами заводится специальный трансдуктор вычисления базового и индексного регистров. Имена? регистров записываются в стек.

Для вызова функций используются индексные регистры и промежуточные переменные. Они нумеруются. Вводится ранг функции для экономии числа переменных и регистров: ранг= r, если она использует функции не выше (r -1) ранга. Ранг делается атрибутом и вычисляется при контекстном анализе. Все выражение получает максимальный ранг функций, которые в нем используются. Сначала вычисляются функции с высшим рангом: r 1 sin (x) + r 2 cos (r 1 ln (x)).

6.3. Генерация условий и условных операторов.

Специфика условных операторов в том, что они используют вложенные конструкции.

а) if a then b; MF б) if a then b else g; MF    
a¢, b¢-фрагменты конструкции, реализующей вычисление a, b УП - условный переход по лжи адрес во втором операторе.
УП, nil, MF, nil УП, nil, МВ, nil
МТ: b¢ МТ: b¢
  БП, nil, МF,nil
  МВ: g
MF: MF:

Трансдуктор условного перехода состоит из четырех трансдукторов:

1) Трансдуктор if вызывает метатрансдуктор для генерации условия .

2) then записывает выходную строку, соответствующую then.

3) else генерирует строку, метки МВ и МF берутся из магазина.

Если разбору подвергается выражение вида: if (a<b) & (x = y) then x:= a+b*c else y:= a+b*c,

то получается следующее дерево разбора.


6.4. Генерация оператора перехода.

Безусловный переход: БП 0, Метка, 0. Нет проблем, если Метка=const.

С любым блоком программы связаны действия по инициализации и выходу.

Переход с возвратом: ВП 0, М1, М2

(по адресу М2 генерируется команда возврата). Фрагменты статически нумеруются еще в контекстном анализе, и все метки получат номер фрагмента. При переходе на метку из другого фрагмента вызывается процедура завершения блока.

Генерация операторов цикла. For i:=A to C step B do S;

Оператор цикла м.б. записан с помощью условного оператора.

Требуется 4 трансдуктора: начала цикла, элементов заголовка цикла, начала тела Ц, конца тела Ц.

Трансдуктор начала цикла запускается при встрече с for, заводит магазин, метки, связанные с циклом, параметр цикла.

Трансдуктор элементов заголовка цикла занимается выражениями.

Трансдуктор начала тела: запускается при встрече с началом тела цикла.

Трансдуктор конца цикла: вызывается при встрече конца цикла.

Реально фактически всегда В=const, тогда генерировать код операции в зависимости от знака В, не вычисляя sign и *. Универсальный трансдуктор.?

Пусть в теле цикла есть переменная с индексом а[i, j], расположенная в памяти: а[1,1],...,а[1,n],а[2,1],...,а[n,n] и нужно найти сумму диагональных элементов: S=S+а[i,i]. Тогда делаем цикл по памяти с шагом (n +1)´ количество байт. Для переиндексации нужно:

1) индексные параметры зависят только от параметров цикла,

2) значения самих параметров цикла в теле цикла не менялись. Если индексов регистров не хватает, то быстрая память используется для самых внутренних циклов.






Не нашли, что искали? Воспользуйтесь поиском:

vikidalka.ru - 2015-2024 год. Все права принадлежат их авторам! Нарушение авторских прав | Нарушение персональных данных