Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Информатика и ВТ Брукшир.doc
Скачиваний:
4
Добавлен:
01.07.2025
Размер:
5 Мб
Скачать
☆

11.3 Универсальные языки программирования

В главе 5 мы изучили множество возможностей языков программирования высокого уровня. В этом разделе мы применим наши знания о вычислимости для определения, какие же из этих возможностей действительно нужны. Мы увидим, что большинство функций современных высокоуровневых языков просто делают программирование более удобным для людей, а не увеличивают мощь и возможности этого языка.

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

Возможно, вас удивит тот факт, что универсальный язык программирования вовсе не должен быть сложным. Язык, с которым мы собираемся познакомиться, достаточно прост. Мы назовем его скелетным языком, потому что в нем будет собран минимальный набор требований универсального языка программирования.

11.3.1Скелетный язык

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

Скелетный язык следует этому подходу в целях упрощения. Все переменные в нем принадлежат типу «битовая последовательность произвольной длины». В программе на скелетном языке операторы описания, с помощью которых можно описать имена переменных и их свойства, не потребуются; программист при необходимости может просто начать использовать новое имя переменной, понимая, что оно относится к шаблону битов произвольной длины.

Конечно же, транслятор нашего скелетного языка должен уметь отличать имена переменных от других элементов. Это делается за счет разработки синтаксиса скелетного языка таким образом, чтобы роль любого терма определялась исключительно синтаксисом. Для этой цели мы принимаем, что имена переменных должны начинаться с буквы английского алфавита, за которой может следовать любая комбинация букв и цифр (от 0 до 9). Следовательно, в качестве имен переменных можно использовать строки XYZ, B747, abcdefghi и X5Y, тогда как имена 2G5,1о и х.у недопустимы.

Что же до императивных операторов, в скелетном языке есть три оператора присваивания и одна циклическая структура. Это язык со свободным форматом, поэтому каждый оператор должен завершаться точкой с запятой, чтобы транслятору было легко отделять операторы друг от друга, если они записаны на одной строке. Мы, тем не менее, будем записывать только один оператор на строке, чтобы программа была легко читаемой.