Синтаксис языка программирования виртуальной реальности Open Code Effects

УДК 519.682.1 ББК 32.973.26-018.1

П.В. ЖЕЛТОВ, Я.В. ШЕВЧЕНКО

СИНТАКСИС ЯЗЫКА ПРОГРАММИРОВАНИЯ ВИРТУАЛЬНОЙ РЕАЛЬНОСТИ OPEN CODE EFFECTS

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

Язык программирования виртуальных миров ОСЕ (Open Code Effects) представляет собой интерпретируемый язык программирования, синтаксис которого описывается регулярной грамматикой. Созданный язык и библиотека отличаются более глубокой проработанностью по сравнению с имеющимися (DirectX, OpenGL). Грамматика ориентирована таким образом, чтобы поддерживать такие инновационные особенности функционирования языка OCE, как альтернативный способ организации имен объектов, специальные механизмы работы с иерархией объектов/переменных и т.д.

P. ZHELTOV, Ya. SHEVCHENKO SYNTAX OF VIRTUAL REALITY PROGRAMMING LANGUAGE OPEN CODE EFFECTS Key words: an interpreted programming language, virtual worlds, syntax, LR-grammar.

Virtual worlds programming language OCE (Open Code Effects) represents an interpreted programming language, the syntax of which is described by a regular grammar. The created language and library differ from existing ones (DirectX, OpenGL) by being more elaborated. The grammar is oriented to support such innovative peculiarities of OCE-language functioning as an alternative method of arranging object names, special methods dealing with objects, or variables hierarchy and etc.

В настоящее время используется большое количество программных продуктов для решения задачи построения виртуальной реальности: UDK, Uni-ty3D, Ogre, DarkBasic, Blitz3D и т.п. Все они позволяют решать широкий круг задач, связанных с реализацией сцен виртуальной реальности, однако обладают рядом существенных недостатков: сценарии исполняются интерпретатором целиком - отсутствует возможность управлять нагрузкой и исполнять команды сценария асинхронно, не теряя при этом гибкости взаимодействия с иерархией объектов на сцене. Для выполнения этой задачи разработан ряд инновационных решений, реализованных на базе нового языка программирования сцен виртуальной реальности Open Code Effects (OCE).

Язык программирования виртуальных сцен Open Code Effects представляет собой интерпретируемый язык программирования для разработки интерактивных содержащий в своей архитектуре ряд инновационных авторских методов, таких, как альтернативная система работы с именами объектов, система асинхронного выполнения сценариев на языке OCE и оптимизированное взаимодействие команд языка с объектами в виртуальной реальности.

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

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

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

Напомним, что грамматика Хомского называется регулярной, если ее продукции имеют вид A ^ a или A ^ bB, где А и В - переменные, а и b -терминальные символы. Регулярная грамматика, продукции которой имеют вид A ^ bB, называется регулярной слева, а грамматика, продукции которой имеют вид A ^ bB, называется регулярной справа.

Алфавит языка ОСЕ и специфика использования символов. Алфавит языка ОСЕ образуют:

1. Символы, используемые для составления идентификаторов: латинские строчные и прописные буквы; арабские цифры от 0 до 9 (в идентификаторах цифры могут использоваться наряду с буквами, начиная со второй позиции); символ подчеркивания (Л8СП-код=95).

2. Символы-разделители: символ пробела (Л8СП-код=32), основное назначение которого - разделение ключевых слов и имен; управляющие символы, замыкающие строку (ASCII-коды 10 и 13), используются в качестве разделителей при написании программ на ОСЕ.

3. Специальные символы - символы, выполняющие определенные функции при построении различных конструкций языка: + - * / \ ( ) . : @ # $.

Символы +, -, *, /, ( ,) используются в арифметических выражениях. Синтаксис их построения был заимствован из языка Blitz Basic и является общим для языков программирования семейства Basic ('+' - обозначает операцию арифметического сложения; '-' - обозначает операцию арифметического вычитания; '*' - обозначает операцию арифметического умножения; '/' - обозначает операцию арифметического деления).

Операции применимы как к вещественным, так и целочисленным типам. Операция деления '/' всегда дает вещественный результат.

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

Символ '.' используется в ОСЕ, так же как и в других языках семейства Basic, для отделения целой части от дробной в вещественных числах:

1,2 = 1-2-.

10

Он также используется в качестве разделителя при обращении к иерархии объектов/переменных: zwindow.class.script. В данном примере происходит обращение к полю script структуры class, принадлежащей, в свою очередь, структуре zwindow.

Так же, как и в других языках, '.' используется в качестве разделителя между именем файла и его расширением при указании имени файла: cameta.b3d.

Символ ':' используется для доступа к переменным какого-либо объекта, например, в строке Box05:z происходит обращение к переменной z объекта Box05.

Символ '@' используется для доступа ко всему объекту, например, в строке man@hand происходит обращение к дочернему объекту hand родительского объекта man, а в строке Interface@Interface происходит обращение к дочернему объекту Interface родительского одноименного объекта Interface. Как видно из множества примеров, в архитектуре языка OCE заложено разрешение на использование одинаковых имен объектов на разных уровнях иерархии объектов, что позволяет снизить затраты времени программиста на контроль конфликтов имен и заострить внимание на решаемой задаче.

Символ '#' служит для указания числового типа, например строка Volume# содержит указание на то, что тип переменной Volume является числовым.

Символ 'ф' в синтаксисе не используется, используется лишь в комментариях для указания на числовой тип переменной.

Символ '$' указывает на текстовый тип и служит преобразователем числа в текст в программе.

Так, в строке Grate$2 происходит объединение текстового значения, содержащегося в идентификаторе Grate, с преобразованным к текстовому типу символом '2'. То есть если в Grate содержалось текстовое значение LeftGrate, то в результате выполнения операции Grate$2 будет содержаться LeftGrate2.

Символ ';' указывает, что весь текст, следующий за ним до конца строки или до символа переноса (коды #13 и #10), является комментарием.

Присвоение значения какой-либо переменной осуществляется следующим образом:

a = 0,1.

В данном примере переменной a присваивается вещественное значение 0,1.

Таким образом, для присвоения значения переменной требуется, как и в Basic, записать значение через '='.

LR - грамматика OCE

A ^ FA\PA\ЩАIЦАI';'АI ЭА^А\ПА\УАи;А\ ^ FA\PA\ЩА\ЦАI ';' А\ЭА^А\ПА\УАи ;

t ^ 26; признак конца файла (# 26);

LR - грамматика имен файлов: F ^ nrL\irL\r; Е ^ nEI0; r ^ #13#10; K^ '.'IMI0 L ^ '$'nEK M^ nM IlM I0.

LR - грамматика пути к файлу и имени файла: P ^ WPIF.

LR - грамматика описания событий: Щ ^ БШ; Ш ^ ПШ in'END'; Б ^ еБ^10; LR - грамматика описания процедур: Ц ^ QB ; В ^ ПВin'END'; Q ^ Б'' Й; Й ^ ' ' Н;

H ^ RpHiNpHi ФpWl 0;

p ^' '; Б ^ еБ|е0|0; Q ^ nQi0;

e ^ '__iA'iFiCiD'iEiFiGiHiTiJiKiLiMiNiO'iPiQiRiSiTiU

yiViWiXiYiZ'; Ф ^ ''TRUE'i''FALSE';

LR - грамматика вызовов процедур: П ^ ИД; Д^ sW;

W^ R' 'WiN' 'WiU' 'WiO' 'WiT' 'Wir; O ^ XQ; Q OXQI0; X^ NiRiU;

T^ V'$'iM"A"''; A ^ aAi0;

a ^ { ASCII - символ}; U ^ V@'UiV IV ':'U; LR - грамматика вещественных чисел; R ^ snRinDi0; D ^ '-'C; C ^ nCini'e''-'C; s ^ '-'I0;

n ^ '1'i'2l'3'l'4'l'5'l'6'l'7'l'8'l'9'l'0';

LR - грамматика целых чисел: N ^ snr; Г ^ пГ10; s ^ '-'I0;

n ^ '1'i'2l'3'l'4'l'5'l'6'l'7'l'8'l'9'l'0'

LR - грамматика имен (переменных): V ^ lVilQi0; Q ^ nQi0;

1 ^ ''I'A'I 'a'i 'B'i 'b'i 'C'i 'c'i 'D'i 'd'i 'E'i 'e'i 'F'i'fi 'G'i 'g'i 'H'i 'h'i 'I'i 'i'i 'J'i'j'i 'K'i 'k'

I 'L'i 'l'i 'M'i 'm'i 'N'i 'n'i 'O'i 'o'i 'P'i 'p'i 'Q'i 'q' I 'R'i 'r'i 'S'i 's'i 'T'i 't'i 'U'i 'u'i 'V'i 'v'i 'W'i 'w 'I 'X'i 'x'i 'Y'i 'y'i 'Z'i 'z';

LR - грамматика 3D-моделей: G ^GRrJlGNrJ;

J ^RrJ IN rJ IR IN 10;

LR - грамматика иерархии объектов:

э ^v:3iv.

На основе данной грамматики создан оптимизированный для интерпретации и удобный в использовании язык программирования виртуальной реальности OCE. Выбор наиболее подходящей грамматики для синтаксиса является важным этапом при разработке среды программирования. В данном случае наиболее подходящей является LR-грамматика. Разработанный язык ОСЕ и соответствующая библиотека графических эффектов и примитивов позволяют упростить создание SD-сцен и интерактивных сцен виртуальной реальности за счет более глубокой проработанности по сравнению с имеющимися библиотеками (DirectX, OpenGL). Фактически создан язык программирования виртуальной реальности, в котором программисту нет необходимости задумываться над реализацией каких-либо эффектов. Он просто задает нужные ему параметры, а их реализация осуществляется функциями и процедурами встроенной библиотеки. Возможно создание новых эффектов на основе шаблонов или путем их комбинации.

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

Главным результатом решения задачи разработки синтаксиса языка OCE являются полученные грамматики, позволяющие реализовать все обозначенные нестандартные решения, запланированные на этапе проектирования, способные обеспечить жизнеспособность языка Open Code Effects.

Литература

1. Ахо А., Ульман Д. Теория синтаксического анализа, перевода и компиляции: в 2 т. / пер. с англ. В.Н. Агафонова, под ред. В.М. Курочкина. М.: Мир, 1978.

References

1. Aho A.V., Ullman J.D. The teory of parsing translation and compling. Prentice-Hall, Inc.: Engleuwood Cliffs, N.Y., 1972 (Russ. ed.: Aho A.V., Ullman J.D. Teoriya sintaksicheskogo analiza, perevoda i kompilyatsii. Moscow, Mir Publ., 1978).

ЖЕЛТОВ ПАВЕЛ ВАЛЕРИАНОВИЧ - кандидат технических наук, доцент кафедры компьютерных технологий, Чувашский государственный университет, Россия, Чебоксары (tchouvachie@narod.ru).

ZHELTOV PAVEL - tandiilate of technical sciences, assistant professor of Computer Technology Chair, Chuvash State University, Russia, Cheboksary.

ШЕВЧЕНКО ЯН ВЛАДИМИРОВИЧ - аспирант кафедры компьютерных технологий, Чувашский государственный университет, Россия, Чебоксары (tchouvachie@narod.ru).

SHEVCHENKO YAN - post-graduate student of Computer Technologies Chair, Chuvash State University, Russia, Cheboksary.