Научная статья на тему 'О построении внутреннего процедурного языка программного комплекса обработки экспериментальных данных'

О построении внутреннего процедурного языка программного комплекса обработки экспериментальных данных Текст научной статьи по специальности «Компьютерные и информационные науки»

CC BY
74
12
i Надоели баннеры? Вы всегда можете отключить рекламу.
Ключевые слова
ПРОГРАММНЫЙ КОМПЛЕКС / ЭКСПЕРИМЕНТАЛЬНЫЕ ДАННЫЕ / ВНУТРЕННИЙ ЯЗЫК / ПРОГРАММНОЕ ОПИСАНИЕ ГРАММАТИКИ

Аннотация научной статьи по компьютерным и информационным наукам, автор научной работы — Костиков Юрий Александрович, Павлов Виталий Юрьевич, Романенков Александр Михайлович, Терновсков Владимир Борисович

В данной работе рассмотрена стратегия разработки внутреннего скриптового языка для программного комплекса обработки данных. Описаны алгоритмические задачи, возникающие при практической реализации языка и предложены подходы к их решению. Также описаны обязательные компоненты, требования к синтаксическим конструкциям и базовым наборам типов данных. Предлагается реализация универсального настраиваемого синтаксиса. В работе продемонстрирована стратегия разработки языка программирования для решения задач по обработке экспериментальных данных. Перечислены необходимые компоненты и средства их реализации. Указаны существенные аспекты, на которые нужно обращать внимание при разработке такого рода программных решений. Представлены конкретные реализации на языке C# .netframework внутренней грамматики встроенного языка программирования, бинарного дерева синтаксического анализа. Описано применение паттерна MVVM в контексте разработки графического редактора внутреннего языка программирования. Язык прост в освоении и удобен для автоматизации рутинных процессов обработки и визуализации экспериментальных данных.

i Надоели баннеры? Вы всегда можете отключить рекламу.

Похожие темы научных работ по компьютерным и информационным наукам , автор научной работы — Костиков Юрий Александрович, Павлов Виталий Юрьевич, Романенков Александр Михайлович, Терновсков Владимир Борисович

iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.
i Надоели баннеры? Вы всегда можете отключить рекламу.

Текст научной работы на тему «О построении внутреннего процедурного языка программного комплекса обработки экспериментальных данных»

О построении внутреннего процедурного языка программного комплекса обработки экспериментальных данных

Костиков Юрий Александрович

кандидат физико-математических наук, заведующий кафедрой 812, Московский авиационный институт (национальный исследовательский университет), jkostikov@mail.ru

Павлов Виталий Юрьевич

кандидат физико-математических наук, заведующий кафедрой 318, Московский авиационный институт (национальный исследовательский университет), vitally_pavlov@hotmail.ru

Романенков Александр Михайлович

кандидат технических наук, доцент кафедры 812, Московский авиационный институт (национальный исследовательский университет), romanaleks@gmail.com

Терновсков Владимир Борисович

кандидат технических наук, доцент кафедры 318, Московский авиационный институт (национальный исследовательский университет), vternik@mail.ru

В данной работе рассмотрена стратегия разработки внутреннего скриптового языка для программного комплекса обработки данных. Описаны алгоритмические задачи, возникающие при практической реализации языка и предложены подходы к их решению. Также описаны обязательные компоненты, требования к синтаксическим конструкциям и базовым наборам типов данных. Предлагается реализация универсального настраиваемого синтаксиса. В работе продемонстрирована стратегия разработки языка программирования для решения задач по обработке экспериментальных данных. Перечислены необходимые компоненты и средства их реализации. Указаны существенные аспекты, на которые нужно обращать внимание при разработке такого рода программных решений. Представлены конкретные реализации на языке C# .netframework внутренней грамматики встроенного языка программирования, бинарного дерева синтаксического анализа. Описано применение паттерна MVVM в контексте разработки графического редактора внутреннего языка программирования. Язык прост в освоении и удобен для автоматизации рутинных процессов обработки и визуализации экспериментальных данных.

Ключевые слова: программный комплекс, экспериментальные данные, внутренний язык, программное описание грамматики

1. Введение

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

Одним из потенциальных решений является разработка и внедрение подсистемы микропрограмм, включающей детальное описание грамматики языка, синтаксического анализатора, компилятора, редактора исходного кода внутреннего языка. Для удобства пользователя предусматриваются следующие варианты записи программного алгоритма действий: написание исходного кода и визуальная работа с предоставляемым интерфейсом. Стоит отметить, что предлагаемое решение не является уникальным, конечно, всем известны средства обработки числовых данных Excel, Statistica и другие. При этом в этих пакетах обработки данных синтаксис языка не является гибким: невозможно подстраивать его под навыки и потребности конечного пользователя. Однако, современные лексикографические анализаторы позволяют достаточно эффективно обрабатывать синтаксические конструкции удобные для описания конкретных экспериментальных данных.

Предлагаемое в этой статье решение обладает достаточной гибкостью. А именно, жестко детерминированным является набор языковых конструкций, конкретный синтаксис той или иной конструкции является настраиваемым. Иными словами, есть возможность писать программы на внутреннем языке в стиле VBA, python, java script или других языках. Для данной статьи нами был выбран синтаксис языка Pascal.

Описание метода реализации проводится в контексте языка программирования C# .NET Framework 4.6.2.

2. Грамматика

Данный компонент предназначен для фиксирования алфавита, состава лексем, свода пра-

0 В

£

В

m ti H

о ы

а

вил и конструкций языка. На уровне грамматики определяется парадигма программирования и система типов.

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

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

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

Выполним формальное описание алфавита:

• Строчные и прописные латинские и русские буквы

• Арабские цифры

• Знаки операций: := + - * / = <><><= >=

• Ограничители: , : ; "" ( ) [ ] { } //

• Служебные (зарезервированные) слова:

and begin function return

array case if string then

begin div integer to

boolean do mod true

break downto not until

case else or

continue end procedure

3

«

а б

div false real

do for repeat

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

Именами (идентификаторами) называют элементы языка - типы, переменные, процедуры и функции. Идентификатор может включать в себя:

- буквы латинского алфавита

- цифры

- символ подчеркивания

Строчные и прописные буквы не различаются (например, NAME, Name и name будут означать одно и то же). Цифра не может стоять на первом месте в идентификаторе, а символ под-

черкивания может находиться в любой позиции (например, namel и name2item являются допустимыми идентификаторами, а 5name - нет; _name, name_, name_item - допустимые названия). В качестве имен не допускается использовать служебные слова.

Для отделения друг от друга идентификаторов, чисел, зарезервированных слов используются разделители. В качестве них можно использовать:

- пробел и табуляцию

- перевод строки

- комментарий

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

Комментарии делятся на строчные и блочные. Строчные занимаются одну строку и начинаются с "//". Блочные занимают неограниченное количество строк и заключаются в скобки "{...}".

Строго определенная структура микропрограмм облегчает синтаксический разбор в процессе компиляции и понимание кода пользователем. Возможный вариант:

1. Необязательный блок объявления глобальных переменных

2. Необязательный блок объявления функций

3. Обязательный блок инструкций микропрограммы

Структура функции:

1. Необязательный блок объявления локальных переменных

2. Обязательный блок инструкций функции.

Описание грамматики на программном уровне может быть выражено следующим образом:

public dass MyGrammar : Grammar {

public MyGrammar()

{

#region Déclaration Terminais //объявление лексического состава var variable = new IdentifierTerminal("variable"); var riumber = new NumberLiteral("number");

var lineComment = new CommentTerminal("lineCornnent"p "//", , "\n")j //...

NonGrammarTerminals.Add(lineComment);

#endregion

tregion Déclaration NonTerminals //объявление конструкций языка var program = new MonTerminal("program"); var declarationBlock = new Nonïerminal("declarationBlock"); var functionBlock = new NonTerminal("functionBlock"); var statementBlock = new NonTerminal("statementBlock"); i ; //...

#endregion

#region Rule Descriptions //объявление синтаксических правил Root = program;

program.Rule = declarationBlock + functionBlock + statementBlock | declarationBlock + statementBlock | functionBlock + statementBlock | statementBlock; statementBlock.Rule = ToTerm("begin") + statementSet + "end";

statementSet.Rule = MakePlusRule(statementSet, statement); //содержит одно и более statement statement.Rule = assign | ifBlock | switchBlock | whileBlock | forBlock | functionCall

//...;

assign.Rule = variable -i //■■•

fendregion

:= + expression

Синтаксис и семантика встроенного языка

Типы данных

Тип определяет:

• возможные значения переменных, функций, выражений, принадлежащих к данному типу

• внутреннюю форму представления данных

• операции и функции, которые могут выполняться над величинами, принадлежащими к данному типу

Во встроенном языке тип величины задают заранее. Все переменные, используемые в программе, должны быть объявлены в разделе описания с указанием их типа.

Во встроенном языке присутствует следующая иерархия типов:

1. Простые

1.1. Порядковые

1.2. Целые (integer)

1.3. Логические (boolean)

1.4. Вещественные (real)

1.5. Строки (string)

2. Структурированные

2.1. Массивы (array[...] of ...)

В таблице приведены простые типы данных, объем памяти, необходимый для хранения одной переменной указанного типа, множество допустимых значений и применимые операции.

Идентификатор Длина (байт) Диапазон значешш Операции

iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.

integer 2 -32768,,32 767 -.-,/.* Div. Mod, >=, <=. =. о. >

real 6 2.9х]0'3М,7х1038 >", <-, о, <, >

boolean I mis. false N0!, And, Dr. Xor. >=, <=, =, O, C, >

Помимо стандартных арифметических операций внутренний язык поддерживает логические операции, которые определены над логическими значениями:

• NOT - логическое отрицание ("НЕ")

• AND - логическое умножение ("И")

• OR - логическое сложение ("ИЛИ")

• XOR - логическое "Исключающее ИЛИ"

Приоритет операций

Порядок вычисления выражения определяется приоритетом содержащихся в нем операций. Во встроенном языке принят следующий приоритет операций:

• унарная операция not, унарный минус -

• операции типа умножения: *, /, div, mod, and

• операции типа сложения: +, -, or, xor

• операции отношения: =, <, >, <>,<=, >=

Порядок выполнения операций переопределить можно с помощью скобок.

Математические функции

Abs(x)- возвращает абсолютное значение числа х.

Cos(x), Sin(x), Tg(x), Ctg(x) - возвращают косинус, синус, тангенс, котангенс числа х, где х - угол в радианах.

Pow(x, y) - возвращает число, равное х в степени у.

Exp(x) - возвращает число, равное e в степени х.

Log(x, y) - возвращает число, равное логарифму по основанию у числа х.

Функции ввода и вывода данных

Load(testing) - загружает экспериментальные данные испытания.

Save(data) - сохраняет полученные результаты.

Draw(data) - обращается к модулю Uniskad.Graphing для построения графика на основе полученных результатов.

Структура программы

Программа на встроенном языке состоит из заголовка, разделов описаний и раздела операторов.

Описания могут включать в себя:

• раздел описания переменных;

• раздел описания процедур и функций.

В разделе описания переменных необходимо указать все переменные, используемые в программе, и определить их тип. Раздел начинается со служебного слова var.

var

х, у: real; flag: boolean;

Описание процедур и функций будет рассмотрено ниже.

Раздел операторов представляет собой составной оператор, который содержит между служебными словами begin и end.

begin

х:=0.35; у:=cos(х); flag:=у>х;

end

Оператор условного перехода

Оператор условного перехода во встроенном языке имеет вид:

If условие then оператор 1; else оператор 2;

условие - это логическое выражение, в зависимости от которого выбирается одна из двух альтернативных ветвей алгоритма. Если значение условия истинно (true), то будет выполняться оператор 1, записанный после ключевого слова then. В противном случае будет выполнен оператор 2, следующий за словом else, при этом оператор 1 пропускается. После выполнения указанных операторов программа переходит к выполнению команды, стоящей непосредственно после оператора if.

В операторе if может отсутствовать блок else:

if условие then оператор 1;

Тогда в случае невыполнения логического условия управление сразу передается оператору, стоящему в программе после конструкции if.

Циклы

О R

£

55 т П

о ы

а

s

«

а б

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

Если заранее известно количество необходимых повторений, то цикл называется арифметическим. Если же количество повторений заранее неизвестно, то говорят об итерационном цикле.

В итерационных циклах производится проверка некоторого условия, и в зависимости от результата этой проверки происходит либо выход из цикла, либо повторение выполнения тела цикла. Если проверка условия производится перед выполнением блока операторов, то такой итерационный цикл называется циклом с предусловием (цикл "пока"), а если проверка производится после выполнения тела цикла, то это цикл с постусловием (цикл "до").

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

Циклы со счетчиком.

for переменная := значение 1 to значение 2 do оператор;

или

for переменная := значение 1 downto значение 2 do оператор;

Оператор for вызывает оператор, находящийся после слова do, по одному разу для каждого значения в диапазоне от значения 1 до значения 2.Переменная цикла, начальное и конечное значения должны быть целочисленными. Со словом to, значение переменной цикла увеличивается на 1 при каждой итерации цикла. Со словом downto, значение переменной цикла уменьшается на 1 при каждой итерации цикла. Не следует самостоятельно изменять значение управляющей переменной внутри цикла.

Итерационные циклы с предусловием

while выражение do оператор;

Оператор после do будет выполняться до тех пор, пока логическое выражение принимает истинное значение (true). Логическое выражение является условием возобновления цикла. Его истинность проверяется каждый раз перед очередным повторением оператора цикла, который будет выполняться лишь до тех пор, пока логическое выражение истинно. Как только логическое выражение принимает значение ложь (false), осуществляется переход к оператору, следующему за while.

Выражение оценивается до выполнения оператора, так что если оно с самого начала было ложным (false), то оператор не будет выполнен ни разу.

Операторы завершения цикла Для всех операторов цикла выход из цикла осуществляется как вследствие естественного окончания оператора цикла, так и с помощью операторов перехода и выхода:

• break

• continue

Оператор break выполняет безусловный выход из цикла. Оператор continue обеспечивает переход к началу новой итерации цикла. Процедуры и функции Встроенный язык является процедурным и предусматривает средства, позволяющие оформлять алгоритмы в виде подпрограмм, что повышает читаемость и лаконичность кода. Язык включает два вида подпрограмм: процедуры и функции.

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

Описание и вызов процедур и функций Структура описания процедур и функций:

1. заголовок

2. раздел описаний переменных

3. исполняемая часть - составной оператор Формат описания процедуры имеет вид:

procedure имя процедуры (формальные параметры);

раздел описаний переменных begin

исполняемая часть процедуры end;

Формат описания функции: function имя функции (формальные параметры): тип результата; раздел описаний переменных begin

исполняемая часть функции end;

Формальные параметры в заголовке процедур и функций записываются в виде: имя параметра: имя типа и отделяются друг от друга запятой. Список формальных параметров может отсутствовать.

Вызов процедуры / функции производится оператором, имеющим следующий формат:

имя процедуры {список фактических параметров);

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

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

return результат;

При вызове процедур и функций необходимо соблюдать следующие правила:

• количество фактических параметров должно совпадать с количеством формальных;

• соответствующие фактические и формальные параметры должны совпадать по порядку следования и по типу.

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

Локальные и глобальные идентификаторы Использование процедур и функций тесно связано с некоторыми особенностями работы с идентификаторами (именами) в программе. В частности, не все имена всегда доступны для использования. Доступ к идентификатору в конкретный момент времени определяется тем, в каком блоке он описан.

3. Синтаксический анализатор

Данный компонент предназначен для построения объектной модели абстрактного синтаксического дерева пользовательской микропрограммы. Построение производится на основе грамматики языка. Дерево состоит из следующих элементов: корень (точка входа в микропрограмму), внутренняя вершина (инструкция), лист (операнд). Используется при компиляции решения и в редакторе для анализа кода в процессе его непосредственного написания пользователем (обеспечение работы в реальном времени системы уведомлений о некорректных конструкциях).

Логика работы с данным компонентом выражается следующим алгоритмом:

1. Создаётся объект класса Parser (Синтаксический анализатор). В качестве параметра инициализации выступает объект грамматики языка.

2. Вызывается метод Parse, который принимает код пользователя. В результате возвраща-

ется объект абстрактного синтаксического дерева микропрограммы.

В качестве средства разработки была выбрана библиотека Irony, которая поставляется через пакетный менеджер Nuget и имеет лицензию MIT. Irony представляет собой готовое решение для описания грамматики и создания абстрактного синтаксического дерева. 4. Компилятор

iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.

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

В простейшем варианте реализации методы перевода абстрактного синтаксического дерева (АСД) в дерево выражений принимают аргументом объект узла АСД и посредством оператора множественного выбора (switch) определяют соответствующее выражение. Каждый метод переводит определенный вид конструкций, например, операции, условия.

Перевод операций может быть выражен следующим образом:

Dictionary<string, Func<Expression, Expression, Expression» binaryExpressions = new Dictionary

<string, Func<Expression, Expression, Expression» {

{"*", Expression.Multiply},

{"/", Expression.Divide},

{"mod", Expression.Modulo},

{"+", BuildAdd},

{"-", Expression.Subtract},

{"=", Expression.Equal},

{">", Expression.GreaterThan},

{"<", Expression.LessThan},

{">=", Expression.GreaterThanOrEqual},

{"<=", Expression.LessThanOrEqual},

{"and", Expression.And},

{"or", Expression.Or}

};

Dictionary<string, Func<Expression, Expression» unaryExpressions = new Dictionary

<string, Func<Expression, Expression» {

{"not", Expression.Not}, {"-", Expression.Negate}

>;

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

3 3

О В

£

гчэ

о ы

а

s

«

а б

ботка ведется в объектно-ориентированном стиле, файл будет хранить класс (Script), содержащий метод (Run), выполняющий действия, закодированные пользователем.

Создание библиотеки может быть выражено следующим образом:

var «SMifrlyBuilder = a ppDoaain. №fineoyna«!сА&«еяЫу( asseiblyVane,

Assenbl yBii ilderAccesi. Save, _»ssenblyD irec tcry);

var noduleSuildiP ■ assentilyBuildtr.OifineDyrtanicAwtuletappiiaee, _appNa*««ithExt»nsion);

vir typt&uilder « nodul«8uildir,0efii«Type("Script", TypeittributL ■..Public);

v»r «thodeui]c(»r ■ typrtiiiW»r,l>ifiiHH«th«iCeon",

MethodActributei,Public | HetfedAttrihutM.Static);

acriptE*presiion.coepileToHettod(iiet(xxlSuilder); //кдапилиремние дерева вьфменкй в метод Run

В качестве средства построения дерева выражения используется стандартное API платформы, определённое в пространстве System.Linq.Expressions. Оно предоставляет механизмы динамического компилирования и выполнения лямбда-выражений. Формирование библиотеки производится средствами пространства System.Reflection.Emit.

5. Графический редактор

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

- интерфейс для открытия и создания исходных файлов, запуска компиляции

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

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

Реализацию среды выполнена с применением шаблона проектирования Model-ViewViewModel (MVVM). Шаблон MVVM делится на три части:

• Модель (Model). Представляет собой бизнес логику и фундаментальные данные, необходимые для работы приложения.

• Представление (View). Является подписчиком на событие изменения значений свойств или команд, предоставляемых Моделью Представления. В случае, если в Модели Представления изменилось какое-либо свойство, то она оповещает всех подписчиков об этом, и Представление, в свою очередь, запрашивает обновленное значение свойства из Модели Представления. В случае, если пользователь воздействует на какой-либо элемент интерфейса, Представление вызывает соответствующую команду, предоставленную Моделью Представления.

• Модель Представления (ViewModel). Является, с одной стороны, абстракцией Представления, а с другой, предоставляет обёртку данных из Модели, которые подлежат связыванию. То есть, она содержит Модель, которая преоб-

разована к Представлению, а также содержит в себе команды, которыми может пользоваться Представление, чтобы влиять на Модель.

Presentation ¿ltd PrnetttJtion Logic

Buunrulogic jrtdDjtj

6. Заключение

В работе продемонстрирована стратегия разработки языка программирования для решения задач по обработке экспериментальных данных. Перечислены необходимые компоненты и средства их реализации. Указаны существенные аспекты, на которые нужно обращать внимание при разработке такого рода программных решений. Представлены конкретные реализации на языке C# .netframework внутренней грамматики встроенного языка программирования, бинарного дерева синтаксического анализа. Описано применение паттерна MVVM в контексте разработки графического редактора внутреннего языка программирования. Язык прост в освоении и удобен для автоматизации рутинных процессов обработки и визуализации экспериментальных данных.

Литература

1. Aho A. V., Lam M. S., Sethi R., Ullman J. D. Compilers: Principles, Techniques, and Tools, Second Edition. Addison-Wesley, 2007. ISBN 9780-321-48681-3.

2. Gamma E., Helm R., Johnson R., Vlissides J. Design Patterns: Elements of Reusable Object-Oriented Software. Publisher: Addison-Wesley Professional, 416 p., Year: 1994. ISBN: 0201633612.

3. MacDonald M. Pro WPF 4.5 in C#: Windows Presentation Foundation 1n .NET 4.5. 4-th ed. Edition. Apress, 2012. ISBN 978-1430243656 .

On the design of an internal procedural language of a

software complex for processing experimental data Kostikov Yu.A., Pavlov V.Yu., Romanenkov A.M. ,

Ternovskov V.B. Moscow aviation institute (national research university) In this operation the strategy of development of internal scripting language for a program complex of data handling is considered. The algorithmic tasks arising in case of implementation of language are described and approaches to their decision are offered. Mandatory components, requirements to syntax constructions and basic sets of data types are also described. Implementation of the universal set-up syntax is offered. In operation the strategy of development of a programming language for the decision of tasks on processing of the experimental data is shown. Necessary components and funds of their implementation are transferred. Essential aspects to which it is necessary to pay attention by development of such software solutions are specified. Specific implementations in the C# .netframework

language of internal grammar of the built-in programming language, a binary parse tree are provided. Application of a pattern of MVVM in the context of development of the graphics editor of an internal programming language is described. Language is simple in mastering and is convenient for automation of routine processing and visualization of the experimental data.

Key words: program complex, experimental data, internal language, program description of grammar

References

1. Aho A. V., Lam M. S., Sethi R., Ullman J. D. Compilers: Principles, Techniques, and Tools, Second Edition. Addison-Wesley, 2007. ISBN 978-0-321-48681-3.

2. Gamma E., Helm R., Johnson R., Vlissides J. Design Patterns: Elements of Reusable Object-Oriented Software. Publisher: Addison-Wesley Professional, 416 p., Year: 1994. ISBN: 0201633612.

3. MacDonald M. Pro WPF 4.5 in C#: Windows Presentation Foundation 1n .NET 4.5. 4-th ed. Edition. Apress, 2012. ISBN 978-1430243656.

i Надоели баннеры? Вы всегда можете отключить рекламу.