norma-r (1158383)
Текст из файла
54
НОРМА
Описание языка
Версия 2.0
Институт прикладной математики им. М.В.Келдыша
Российской Акадумии Наук
Содержание
Введение
1. Предпосылки разработки
2. Цели разработки
3. Что дает использование языка Норма?
Спецификация языка Норма
1. Область применения и основные свойства
2. Нотация синтаксиса
3. Основные элементы языка
3.1. Лексические правила
3.1.1.Основные символы
3.1.2. Комментарии
3.1.3. Лексемы
3.1.4. Идентификаторы
3.1.5. Ключевые слова
3.1.6. Константы
3.1.7. Знаки операций
3.1.8. Разделители
3.2. Имена
3.3. Базовые типы данных
3.4. Выражения
3.4.1. Арифметические выражения
3.4.2. Условные выражения
4. Структура программы
5. Конструкции языка Норма
5.1. Описания
5.1.1. Описание областей
5.1.1.1. Описание безусловной области
5.1.1.2. Описание условной области
5.1.2. Описание индексов областей
5.1.3. Описание величин
5.1.4. Описание параметров области
5.1.5. Описание входных и выходных величин
5.1.6. Описание внешних имен
5.1.7. Описание индексов распределения
5.2. Операторы в языке Норма
5.2.1. Скалярный оператор
5.2.2. Оператор ASSUME
5.2.3. Обращение к функциям в языке Норма
5.2.3.1. Cтандартные арифметические функции
5.2.3.2. Функции редукции
5.2.3.3. Внешние функции пользователя
5.2.4. Вызов раздела
5.2.5. Интерфейс с программами, написанными на Фортране
5.2.6. Задание режима последовательного вычисления
5.3. Итерация
Приложение 1. Представление исходной программы
Приложение 2. Синтаксические правила
Литература
Введение
Язык Норма является декларативным (непроцедурным) языком и предназначен для спецификации задач вычислительного характера. В процессе трансляции, помимо традиционных задач, например, синтаксического, семантического анализа, решается задача синтеза выходной программы, то есть определения порядка вычислений и способа вычислений с учетом возможностей выходного языка и архитектуры компьютера.
Идеи, позволяющие автоматически строить программу по спецификации задачи, были сформулированы И.Б.Задыхайло в работе [1] еще в 1963 году. Дальнейшее их развитие и привело к появлению языка Норма и нескольких версий транслятора для него [2-4]. Некоторые результаты практического использования языка Норма описаны в [5].
Авторы считают, что общий подход, использованный при разработке и реализации языка Норма, может быть применен для создания языков нового поколения, а значение этого подхода возрастает в связи с быстрым развитием параллельной вычислительной техники.
1. Предпосылки разработки
Основная идея языка Норма весьма проста: была сделана попытка автоматизировать разработку программ на основе тех заданий, которые подготавливались прикладными математиками ИПМ им.М.В.Келдыша РАН для последующего программирования (задания отражали применение численных методов для решения физических задач).
Еще в 1960 году в нашем институте появились первые работы на эту тему, в которых способ написания заданий получил название “параметрической записи”. В дальнейшем такие способы называли “непроцедурными описаниями”, а в последнее время обычно - “декларативными описаниями”. Соответствующие языки описаний носят характер спецификаций, в которых можно описывать правила вычисления значений, а порядок вычисления может быть любой (в частности, в последовательном или параллельном режиме), лишь бы удовлетворялись указанные правила.
Многочисленные исследования по теории программирования и практика программирования позволяют утверждать, что намеченный подход был правильным. Ниже мы кратко рассмотрим некоторые аспекты, подтверждающие это утверждение.
2. Цели разработки
Практическая ценность методов разработки прикладного программного обеспечения определяется в первую очередь тем, в какой степени они:
1) автоматизируют процесс разработки прикладных программ,
2) поддерживают создание надежныхи мобильных прикладных программ,
3) удобны для специалиста в {\it предметной области}, в которой ведется разработка.
Проблемы, связанные с обеспечением этих характеристик, так или иначе решались в течение всего периода использования ЭВМ, однако до сих пор достаточно полных и универсальных способов их решения нет. Это объясняется сложностью этих проблем и, кроме этого, высокой динамичностью программирования как области знания: новые области применения, а также новые аппаратурные решения появляются довольно быстро.
Новые технологические достижения и разработки в области архитектуры ЭВМ дают очень большие потенциальные вычислительные возможности, однако их полное использование на практике связано с трудностями, если учитывать необходимость выполнения требований (1)-(3). Так, с появлением высокопроизводительных многопроцессорных ЭВМ, возник вопрос о том, каким образом для них разрабатывать прикладные программы?
Разработчик прикладных программ, скорее всего, хотел бы знать как можно меньше об устройстве конкретной ЭВМ (но при этом использовать ее мощности полностью), не иметь проблем при переходе с одной машины на другую, иметь удобные средства тестирования и отладки, а также работать в рамках единого подхода, термины которого ему более или менее понятны (знание вопросов, не относящихся к прикладной области - особенностей компиляторов, языков программирования, организации системных библиотек, вопросов эффективного их использования и т.п. не должно быть обязательным).
Язык Норма и подход к разработке прикладных программ, основанный на его применении, является попыткой учесть требования (1)-(3). Конечно, авторы этого подхода отдают себе отчет в том, какие трудности возникают при решении этой фундаментальной задачи, и что, скорее всего, достаточно полного и универсального способа ее решения сразу получить не удастся. Однако некоторые достоинства предлагаемого подхода можно отметить уже сейчас.
3. Что дает использование языка Норма?
Высокая автоматизация процесса разработки прикладных программ.
Фактически отсутствует фаза программирования: расчетные формулы, полученные прикладным специалистом, приводятся к такой форме, которая удобна для ввода информации с клавиатуры вычислительной машины. Существенно, что изменения касаются только формы представления расчетных формул, а не их содержания. Порождение выходной программы происходит автоматически.
Надежность программирования и мобильность.
При правильном, с содержательной точки зрения, описании, то есть правильном методе решения задачи и правильной записи расчетных формул, гарантируется получение правильной выходной программы, (процесс программирования автоматический).
Еще раз подчеркнем важность строгого описания процесса решения задачи на уровне предметной области. Этот уровень является наиболее устойчивым, так как отражает только схему возможных вычислений и не зависит от оптимизаций, которые возможно будут воплощены в программной реализации. Очевидно, что если мы предложим язык для строгого описания процесса решения задачи в терминах предметной области, то вариант программы, который будет построен по такому описанию автоматически, будет иметь уровень надежности, который соответствует надежности транслятора, а также уровень оптимизации, который заложен в транслятор, порождающий целевую программу.
Усилия авторов языка Норма были направлены на разработку языка, который фактически использует лишь термины из предметной области, связанной с решением задач математической физики сеточными методами. Простота и надежность “программ” обеспечивается фактически отсутствием программирования, а требует лишь знания терминов предметной области и правильного их применения.
Учет особенностей архитектуры вычислительной системы осуществляется синтезирующим транслятором с языка Норма, что обеспечивает мобильность прикладных программ.
Метод создания параллельных программ.
Обычная математическая запись, которая нашла свое отражение в языке Норма, открывает большие возможности для оптимизации проблемы для любых условий, в том числе и для реализации в условиях параллельного выполнения.
Описание решения задачи сохраняет свой естественный параллелизм. В этом описании не содержится никаких ограничений, связанных с желанием приспособить решение к той или иной архитектуре ЭВМ, особенностям языка программирования или другим требованиям. Это ``чистое" описание решения задачи, которое накладывает ограничения только на порядок вычислений, которые вытекают из существа счетной схемы (информационных зависимостей между величинами). Отсутствие понятия ``памяти" для хранения разных значений в разные моменты времени значительно упрощает построение алгоритмов выявления естественного параллелизма и построения параллельной целевой программы.
В ситуациях, когда порядок вычислений оказывается существенным с точки зрения прикладного математика (например, он влияет на точность вычислений, скорость сходимости и т.п.), могут быть использованы дополнительные понятия, введенные в язык Норма и интерпретируемые специальным образом.
Спецификация языка Норма
1. Область применения и основные свойства
Язык Норма является специализированным языком и предназначен для спецификации численных методов решения задач математической физики. Изначально он был ориентирован на решение задач математической физики разностными методами, однако, как показала практика, может быть использован для решения более широкого класса вычислительных задач.
Первоначально термин Норма расшифровывался следующим образом: Непроцедурное Описание Разностных Моделей Алгоритмов. Сейчас мы считаем уместной и другую трактовку -- это Нормальный уровень общения прикладного математика с ЭВМ: расчетные формулы, полученные им в процессе решения прикладной задачи, почти непосредственно используются для ввода в вычислительную систему и проведения счета.
В записи на Норме не требуется никакой информации о порядке счета, способах организации вычислительных (циклических) процессов. Порядок предложений языка может быть произвольным -- информационные взаимосвязи выявляются и учитываются транслятором при организации вычислительного процесса.
Выбор уровня языка Норма определяет характерную его черту - это язык с однократным присваиванием, то есть каждая переменная может принимать значение только один раз. Такие понятия, как память, побочный эффект, оператор присваивания, управляющие операторы в языке Норма отсутствуют по определению.
Эти свойства, и некоторые другие ограничения (в первую очередь, на вид индексных выражений и способы описания индексных пространств), позволяют строго обосновать разрешимость задачи синтеза выходной программы [2,3], так как в достаточно общей постановке решение этой задачи приводит к значительным математическим трудностям -- она может оказаться NP-полной либо вообще неразрешимой. С другой стороны, исследования, связанные с разработкой и применением языка Норма показывают, что имеющиеся ограничения приемлемы с практической точки зрения [5].
2. Нотация синтаксиса
В нотации синтаксиса, используемой в данном описании, применяется расширенная форма Бэкуса--Наура.
Обозначения {A}*, {A}+, {A1, . . . , A n }, [A] означают
| {A}* [A] | :: = :: = :: = :: = | A A A ... A A A ... A1... A n A |
где A - некоторый объект языка,
- пусто,
- выбор одной из альтернатив,
... и так далее.
В дальнейшем, при определении правил языка синтаксические понятия набираются курсивом, а слова и литеры, воспринимаемые буквально, прямым шрифтом. Альтернативные конструкции перечисляются, как правило, в столбик, каждая альтернатива на отдельной строке. Иногда используются частично подчеркнутые обозначения синтаксических конструкций, например, name-set. Синтаксически это обозначение идентично обозначению name, а подчеркнутая часть конструкции несет дополнительную семантическую информацию.
Обозначение list-element заменяет непустой список элементов, перечисленных через запятую:
list-element :
element { , element }*
В каждом конкретном случае определение элемента приводится.
Обычно сначала приводятся синтаксические правила, а затем комментарии к ним, семантические разъяснения, примеры и т.п.
3. Основные элементы языка
3.1. Лексические правила
Первичными элементами языка, из которых строятся все его конструкции, являются символы. Набор основных символов фиксирован и используется для образования любых конструкций языка. Набор дополнительных символов не фиксирован, определяется составом оборудования компьютера и используется для образования символьных констант, представления данных на носителях информации.
3.1.1.Основные символы
principal-symbol :
letter
Характеристики
Тип файла документ
Документы такого типа открываются такими программами, как Microsoft Office Word на компьютерах Windows, Apple Pages на компьютерах Mac, Open Office - бесплатная альтернатива на различных платформах, в том числе Linux. Наиболее простым и современным решением будут Google документы, так как открываются онлайн без скачивания прямо в браузере на любой платформе. Существуют российские качественные аналоги, например от Яндекса.
Будьте внимательны на мобильных устройствах, так как там используются упрощённый функционал даже в официальном приложении от Microsoft, поэтому для просмотра скачивайте PDF-версию. А если нужно редактировать файл, то используйте оригинальный файл.
Файлы такого типа обычно разбиты на страницы, а текст может быть форматированным (жирный, курсив, выбор шрифта, таблицы и т.п.), а также в него можно добавлять изображения. Формат идеально подходит для рефератов, докладов и РПЗ курсовых проектов, которые необходимо распечатать. Кстати перед печатью также сохраняйте файл в PDF, так как принтер может начудить со шрифтами.















