ВУЗ:
Составители:
Рубрика:
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 —
Страницы
- « первая
- ‹ предыдущая
- …
- 90
- 91
- 92
- 93
- 94
- …
- следующая ›
- последняя »