Существуют трансляторы, в которых трансляция и исполнение совмещены во времени, их называют интерпретаторами. В состав интерпретатора входит блок анализа, распознающий операторы входного языка, набор подпрограмм, соответствующих различным операторам, и блок, управляющий всей работой интерпретатора.
По указаниям управляющего блока, блок анализа просматривает операторы входной программы, распознает их тип и определяет возможность немедленного выполнения. Информация о возможности выполнения оператора передается управляющему блоку, который вызывает соответствующую подпрограмму, исполняющие действия, предписанные оператором.
Интерпретаторы часто применяются в качестве отладочных и диалоговых трансляторов, обеспечивающих работу пользователя с машиной в диалоговом режиме с дистанционного терминала. Кроме того, интерпретаторы используют для исполнения (интерпретации) на ЭВМ программ, составленных для другой ЭВМ, а иногда в качестве последнего блока транслятора компилирующего типа. В последнем случае транслятор состоит из двух частей: первой – компилятора, переводящего программу на промежуточный язык, являющимся входным языком интерпретатора; второй – интерпретатора, исполняющего программу на промежуточном языке.
В такой схеме компилятор можно сделать очень простым. Интерпретатор несколько проще компилятора, поскольку немедленное выполнение распознанных операторов входного языка делает ненужным действия, связанные с компоновкой объектной программы, оформлением её в единый модуль загрузки или в виде нескольких модулей, если она велика.
Недостаток интерпретатора заключается в неэффективном использовании машинного времени. Например, при выполнении циклических программ, один и тот же оператор приходится интерпретировать многократно. При повторном выполнении программы, интерпретацию приходится выполнять заново, в то время как транслятор компилирующего типа позволяет выполнить трансляцию один раз, а затем хранить программу в машинных кодах. По указанной причине интерпретаторы применяются относительно редко.
В настоящее время огромное распространение получила тенденция к визуализации процесса программирования. Таким образом, создание транслятора с языка блок-схем является логическим продолжением развития технологии программирования. Кроме того, язык блок-схем незаменим в начальной стадии обучения программированию.
Такой язык является неформальным описанием алгоритма, он обладает повышенной наглядностью и обозримостью. Язык блок-схем используется при разработке системного математического и информационного обеспечения, а также при описании процессов функционирования отдельных блоков или устройств.
“Схемой алгоритма называется такое графическое представление алгоритма, в котором этапы процесса обработки информации и носители информации представлены в виде геометрических символов из заданного ограниченного набора, а последовательность процесса отражена направлением линий ” [1].
Приведенная в данной работе система трансляции с языка блок-схем включает следующие подзадачи:
Во-первых, несмотря на достаточно большое количество графических и текстовых редакторов (например: Page Maker, Corel Draw, Word и т.д.) нужны:
1. Свой графический редактор, так как настройка на внутренние форматы файлов этих систем приводит к неэффективному использованию ресурсов ЭВМ, Поэтому необходим эффективный, графический редактор, ориентированный только на объекты типа блоков.
2. Текстовый редактор, работающий в графическом режиме для редактирования текста внутри блоков.
Во-вторых, кроме редакторов (графического и текстового) необходимо создать интерпретатор, так как на его основе можно легко создать систему отладки алгоритмов.
Как уже говорилось выше у любого транслятора существует свой входной язык. В данной системе входной язык транслятора состоит из двух языков:
1. Язык блок-схем (“Графический” язык),
2. Язык функционального наполнения блок-схем.
Ниже приводится пример блок-схемы, реализующей выбор наибольшего числа из двух чисел. На рисунке 1 приводится пример блок схемы поиска максимального из двух значений.
Блок-схема алгоритма описывает какой-то процесс или, точнее будет сказано, последовательность действий. Отсюда следует, что она должна иметь начало и конец. Особо следует отметить, что начало (блок начала программы) может быть только один, а выходов (блок конца программы) несколько.
У каждого символа, из которого строится блок-схема (далее будем называть блоки), своя функциональная нагрузка. В соответствии с ней блоки должны заполняться текстом.
Блоки в блок-схеме алгоритма соединяются стрелками в соответствии с последовательностью действий, которые реализуют этот алгоритм.
Необходимо придерживаться последовательности блоков в таких связках, как мультиветвление и безусловный переход. Об этих особенностях мы поговорим в параграфе 3.3.
max=x; |
Графический символ действия | Идентификатор | Наименование действия |
блок начала программы | ||
END | блок конца программы | |
AD | блок автоматических действий | |
|
PP | Блок вызова подпрограммы |
IF | блок условного перехода | |
INPUT | блок ввода данных | |
| OUTPUT | блок вывода данных |
| блок ветвь | |
|
SWITCH | блок мультиветвления |
LABEL | метка | |
GOTO | Безусловный переход на метку |
Рассмотрим функциональное назначение каждого блока.