|
Программирование >> Структурное программирование
Рис. 15.20. Команды ЯП Наш компилятор с ЯП распознает только строчные буквы. Все символы в файлах, написанных на ЯП, должны быть строчными (прописные буквы приводят к синтаксической ошибке, если только они не появляются в операторе комментариев rem, в которых они просто игнорируются). Имя переменной состоит из одной буквы. В ЯП не допускаются описательные имена переменных, поэтому переменные следует объяснять в комментариях, чтобы указать на их назначение в программе. ЯП использует только целые переменные. В ЯП не используется никаких объявлений переменных; просто само упоминание имени переменной в программе соответствует объявлению переменной и заданию ей нулевого начального значения. Синтаксис ЯП не допускает операций со строками (чтение строки, запись строки, сравнение строк и т.д.). Если в программе на ЯП встречается строка (после любой команды, кроме команды rem), то компилятор генерирует синтаксическую ошибку. Первая версия нашего компилятора будет предполагать, что программы на ЯП введена корректно. В упражнении 15.29 мы попросим студента модифицировать компилятор так, чтобы он осуществлял контроль синтаксических ошибок. ЯП использует условный оператор if/goto и оператор безусловной передачи управ.ления goto для изменения потока управления программы. Если условие в операторе if/goto истинно, то управление передается заданной строке программы. В операторе if/goto допускаются следующие операции отношения и проверки равенства: <, >, <=, >=, == или 1=. Старшинство этих операций в ЯП такое же, как и в языке С++. Давайте теперь рассмотрим несколько программ, демонстрирующих возможности ЯП. Первая программа (рис. 15.21) читает два целых значения с клавиатуры, заносит эти значения в переменные а и Ь, вычисляет и печатает их сумму (сохраненную в переменной с). Программа, приведенная на рис. 15.22, определяет и печатает большее из двух целых чисел. Целые числа вводятся с клавиатуры и заносятся в переменные s и t. Условный оператор if/goto проверяет условие S >= t. Если условие истинно, то управление передается строке с номером 90 и на экран выводится s; в противном случае выводится t и управление передается оператору end в строке с номером 99, который завершает программу. 10 rem расчет и печать суммы двух целых чисел 15 rem 2 0 rem ввод двух целых чисел 30 input а 4 0 input b 45 rem 50 rem сложение целых чисел и занесение результата в с 60 let с = а + b 65 rem 70 rem печать результата 80 print с 90 rem завершение выполнения программы 99 end Рис. 15.21. Простая программа для определения суммы двух целых чисел 10 rem определение максимального из двух целых чисел 20 input S 30 input t 32 rem 35 rem проверка условия s >= t 40 if s >= t goto 90 4 5 rem 50 rem если t больше s , то печатается t 60 ptint t 70 goto 99 75 rem 80 rem если s больше или равно t , то печатается s 90 print s 99 end Рис. 15.22. Проаая программа определения максимального из двух целых чисел ЯП не имеет структур повторения, подобных структурам for, while или do/while в С-Н-. Однако ЯП может моделировать каждую из этих структур повторения, используя операторы условного перехода if/goto и безусловного перехода goto. На рис. 15.23 показано использование цикла, управляемого меткой, для вычисления квадратов целых чисел. Каждое целое число вводится с клавиатуры и сохраняется в переменной j. Если вводимое значение является сигнальной меткой -9999, то управление передается строке с номером 99 и программа завершается. В противном случае квадрат j присваивается переменной к, которая выводится на экран. Далее про- исходит передача управления строке с номером 20, в которой осуществляется ввод следующего целого числа. Используя примеры программ, приведенных на рис. 15.21, 15.22 и 15.23, как руководство к действию, напишите программу на ЯП для выполнения следующих заданий: a) Введите три целых числа, определите их среднее значение и напечатайте результат. b) Используйте цикл, управляемый меткой, для ввода 10 целых чисел; вычислите и напечатайте сумму этих чисел. c) Используйте цикл, управляемый счетчиком, для ввода 7 целых чисел (пусть некоторые из них будут положительными, а другие - отрицательными). Вычислите и напечатайте их среднее арифметическое значение. d) Введите ряд целых чисел, определите и напечатайте максимальное из них. При этом первое введенное значение должно показывать, сколько чисел следует обработать. e) Введите 10 целых чисел и напечатайте минимальное из них. f) Вычислите и напечатайте сумму четных чисел от 2 до 30. g) Вычислите и напечатайте результат умножения нечетных чисел от 1 до 9. 10 rem вычисление квадратов целых чисел 20 input j 23 rem 25 rem проверка значения метки 30 if j == -9999 goto 99 33 rem 35 rem вычисление квадрата j и присваивания результата к 40 let к = j * j 50 print к 53 rem 55 rem цикл для ввода следующего числа в переменную j 60 goto 20 99 end Рис. 15.23. Вычисление квадратов нескольких чисел 15.27. (Построение компилятора. Примечание: обязательным условием построения вашего компилятора является выполнение в полном объеме упражнений 5.18 и 5.19 главы 5 и упражнений 15.12, 15.13 и 15.26 главы 15). Теперь, когда у нас имеется описание языка ЯП (упражнение 15.26), мы можем обсудить способы построения компилятора для ЯП. Сначала рассмотрим процесс преобразования программы на ЯП в программу на ЯМП (см. специальный раздел главы 5) и выполнение ее с помощью моделирующей программы Простотрона (см. рис. 15.24). Файл, содержащий программу на ЯП, читается компилятором и преобразуется в код ЯМП. Это код выводится в файл на диске, содержащий инструкции на ЯМП по одной инструкции в строке. Затем этот файл с программой на ЯМП загружается в программу, моделирующую Простотрон, а результаты ее выполнения пересылаются в файл на диске и на экран. Заметим, что моделирующая программа Простотрона, созданная в
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0.001
При копировании материалов приветствуются ссылки. |