Специальная математика. Соловьев А.Е. - 92 стр.

UptoLike

Составители: 

Рубрика: 

B[2]:=1; x:=x+2;
I:=1; B[I]:=10;
(*) P(B[I]); I:=2;
x:=x+2;
Фрагмент
вызывающей
программы.
Процедура вызывается в точке (*).
А поражает то, что при пяти основных способах передачи параметров получаются разные
результаты вычислений:
Способ передачи B[1] B[2]
1 1 1
2 - -
3 5 1
4 12 1
5 10 3
7.20. Генерация выходного текста.
Польская инверсная запись
При рассмотрении вопросов генерации выходного текста надо иметь в виду то, что реально
выходной текст программы после трансляции - это, как правило, не выполняемый код, а
некоторая промежуточная форма, поскольку программа в дальнейшем может быть
загружена для выполнения в разные места памяти и т.д. С другой стороны, выполняемая
программа (или программа в близком к такой форме виде) машинно-зависима, то есть
использует конкретную систему команд и другие конкретные архитектурные особенности.
Так что процесс генерации - трудоемкий процесс, требующий большой и весьма
кропотливой работ. Это в значительной степени ремесло, а не наука, хотя есть и
теоретические работы по этому вопросу. Интересно, что здесь заметный вклад внесли
ученые женщины-программисты.
Поэтому рассмотрим лишь основную идею генерации и остановимся на использовании в
вычислениях постфиксных представлений.
Генерация.
Здесь, лишь из соображений наглядной демонстрации идеи, в качестве выходной формы
программы возьмем блок-схему.
Пусть транслируется условный оператор входного языка, имеющий вид:
IF (A - B) 10, 15, 20
Для данного входного языка определено, что
IF - служебное слово оператора условия.
A - B - арифметическое выражение.
10, 15, 20 - метки.
Работа оператора состоит в вычислении арифметического выражения
И сравнение полученного результата с нулем на больше, равно или меньше нуля.
В зависимости от трех возможных исходов сравнения осуществляется переход на
соответствующую программную метку.
"Смыслу" оператора заранее поставлена в соответствие заготовка выходного кода - в
данном случае - заготовка блок-схемы. При анализе содержания оператора извлекается
— 92 —
  B[2]:=1;        x:=x+2;
  I:=1;           B[I]:=10;
  (*) P(B[I]);    I:=2;
                  x:=x+2;
  Фрагмент
  вызывающей
  программы.

Процедура вызывается в точке (*).

А поражает то, что при пяти основных способах передачи параметров получаются разные
результаты вычислений:

Способ передачи    B[1]    B[2]
        1            1      1
        2            -      -
        3            5      1
        4           12      1
        5           10      3


                          7.20. Генерация выходного текста.
                              Польская инверсная запись

При рассмотрении вопросов генерации выходного текста надо иметь в виду то, что реально
выходной текст программы после трансляции - это, как правило, не выполняемый код, а
некоторая промежуточная форма, поскольку программа в дальнейшем может быть
загружена для выполнения в разные места памяти и т.д. С другой стороны, выполняемая
программа (или программа в близком к такой форме виде) машинно-зависима, то есть
использует конкретную систему команд и другие конкретные архитектурные особенности.
Так что процесс генерации - трудоемкий процесс, требующий большой и весьма
кропотливой работ. Это в значительной степени ремесло, а не наука, хотя есть и
теоретические работы по этому вопросу. Интересно, что здесь заметный вклад внесли
ученые женщины-программисты.
Поэтому рассмотрим лишь основную идею генерации и остановимся на использовании в
вычислениях постфиксных представлений.

Генерация.
Здесь, лишь из соображений наглядной демонстрации идеи, в качестве выходной формы
программы возьмем блок-схему.
Пусть транслируется условный оператор входного языка, имеющий вид:
IF (A - B) 10, 15, 20
Для данного входного языка определено, что
IF - служебное слово оператора условия.
A - B - арифметическое выражение.
10, 15, 20 - метки.
Работа оператора состоит в вычислении арифметического выражения
И сравнение полученного результата с нулем на больше, равно или меньше нуля.
В зависимости от трех возможных исходов сравнения осуществляется переход на
соответствующую программную метку.
"Смыслу" оператора заранее поставлена в соответствие заготовка выходного кода - в
данном случае - заготовка блок-схемы. При анализе содержания оператора извлекается
                                       — 92 —