PDF-версия статьи |
Проектирование программ до последнего момента может вестись независимо от языка и лишь на последнем этапе осуществляется переход к нужному языку. Разнообразие текстовых правил (то есть возможность выбора любого текстового синтаксиса) определяет гибкость ДРАКОНа и лёгкую настройку на различные предметные и иные области.
Построение схемы всегда начинается со «свободного» элемента, он исполняет роль тела функции, остальные элементы добавляются к нему. Нужно считать, что все элементы, находящиеся в свободном элементе после трансляции будут находиться в одной функции.
Таких элементов всего два: «примитив» и «силуэт» в формальной грамматике они представлены соответствующими нетерминалами. «Зависимые» элементы представлены терминалами.[2] При создании схемы происходит комбинирование «свободных» и «зависимых» элементов.
Сопоставив формальные грамматики графического языка программирования (моделирования) и текстового языка программирования получим алгоритм трансляции ДРАКОН-схем в программный код С++. [3]
Схему не всегда можно транслировать на язык высокого уровня, т.к. возможны случаи, когда формальная грамматика нотации более свободна, нежели формальная грамматика языка программирования. Поэтому полное транслирование схемы, верной с точки зрения нотации, возможно только на низкоуровневый язык.
Трансляция схемы, так же как и построение, начинается со «свободного» элемента. Метод принимает указатель на элемент, после чего идёт часть общая для всех «свободных» элементов. Каждый из них, имеет заголовок, текст которого выводится в файл, за заголовком идёт открывающая круглая скобка. Если к заголовку присоединён «опциональный» элемент «список формальных параметров, то транслируется и он, в любом случае в конце идёт закрывающая скобка. Затем алгоритм трансляции отличается в зависимости от такого, какой тип «свободного» элемента использовал пользователь. Для трансляции каждого из них существует своя процедура, результаты выполнения этой процедуры заключаются в фигурные скобки.
Рассматривать трансляцию свободных элементов будем от простого к сложному, поэтому начнём с «примитива». Поскольку «примитив» может содержать указатели на «зависимые» элементы» то мы можем получить указатель на первый элемент, и последовательно перебрать все элементы списка для каждого из них вызывая процедуру трансляции.
«Силуэт» не имеет указателей на список «зависимых» элементов, зато он имеет указатели на список «веток», а те в свою очередь, на список зависимых элементов. Поэтому при трансляции «силуэта» обходятся все «ветки», при обходе каждой из них, обходятся зависимые элементы
При трансляции следует учитывать необходимо ли для текущей ветки использовать метку и если существует обращение к «ветке» с нарушением последовательности, то для ветки используется метка. В свою очередь «ветка» сама может ссылаться на другую «ветку» с помощью иконы «адрес» если ссылка происходит с нарушением порядка, то используется оператор “goto”.
К каждому зависимому элементу можно присоединить «опциональный» элемент – «синхронизатор», именно трансляция синхронизатора является общей для всех «зависимых» элементов. После, в зависимости от типа транслируемого элемента, вызываются процедуры трансляции для следующих типов: действие, ввод, вывод, вставка, полка, вопрос, метка, начало цикла ДЛЯ, конец цикла ДЛЯ, выбор, пауза, таймер.
Полученные правила, и алгоритм трансляции позволяют создать транслятор с языка ДРАКОН на язык Си, независимо от среды разработки.
Список литературы:
1. Описание визуального синтаксиса языка ДРАКОН [Электронный ресурс] // Сайт про язык ДРАКОН URL: http://drakon.su/jazyk/vizualnyj_sintaksis. (Дата обращения: 02.06.2013).
2. Гладкий А. В. Формальные грамматики и языки. — М.: Наука, 1973
3. Бьерн Страуструп. Язык программирования С++. – Издательства: Бином, Невский Диалект, 2008 г. – 1104 с.:ил. ISBN 5-7989-0226-2
ОПУБЛИКОВАНО
Григорьев М.В., Ткаченко И.Н. Трансляция ДРАКОН-схем в программный код С++. // Современные проблемы науки и образования - 2014.-№6. (приложение "Технические науки"). - C. 7