1 Введение

Зачем это нужно?

Иногда целесообразно предоставить пользователю не только возможность нажимать на кнопки, но и вводить информацию в более удобном текстовом формате. Например, в системе MS Excel кнопочный интерфейс сочетается с текстовыми выражениями. В таких программах, как 1С, Gimp, Atom имеется возможность вводить пользовательские скрипты для более тонкой настройки, чем позволяют простые "кнопки". Отметим также язык Lua, предназначенный для встраивания скриптов в другие приложения.

Всё множество допустимых текстов образует формальный язык. Этот язык может служить не только для написания программ (сценариев), но и для описания какого-либо объекта в формате, наиболее подходящем для данной предметной области. К примеру, геоданные, информация о городских объектах и описание кампуса ДВФУ будут представлены в любой программе в виде некоторой структуры данных. Однако для удобства пользователя имеет смысл сначала построить текстовое описание на формальном языке, а затем перевести это описание в структуру данных. Формальный язык может быть также использован, наряду с графическими элементами, для формирования запросов для получения требуемой выборки геоданных. Точно так же на специальном языке может быть записана постановка вычислительной задачи (вместо аналогичной записи на языке программирования); пример -- конечноэлементный солвер FreeFem++.

То же самое с языками программирования -- текстовый формат служит для описания древовидной структуры данных, для построения которой необходимо провести процедуру синтаксического анализа. Затем к синтаксической структуре нужно добавить дополнительную информацию о типах данных и транслировать готовую структуру в нужное представление (исполняемый файл, язык типа ассемблера или внутреннее представление интерпретатора).

Методология разработки

Одним из базовых в разработке ПО является принцип модульности. Приведем общие рекомендации из [Ахо, Хопкрофт, Ульман «Структуры данных и алгоритмы», 2001].

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

  2. Используйте и модифицируйте уже существующие программы. Один из неэффективных подходов к процессу программирования заключается в том, что каждый новый проект рассматривается «с нуля», без учета уже существующих программ. Обычно среди программ, реализованных на момент начала проекта, можно найти такие, которые если решают не всю исходную задачу, то хотя бы ее часть. После создания законченной программы полезно оглянуться вокруг и посмотреть, где еще ее можно применить (возможно, вариант ее применения окажется совсем непредвиденным).

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

Выводы

Перед разработкой транслятора потребуется потратить некоторое время на обсуждение проекта программы. Необходимо:

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

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

results matching ""

    No results matching ""