Научная статья на тему 'Исследование вопросов построения систем преобразования кода'

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

CC BY
248
47
i Надоели баннеры? Вы всегда можете отключить рекламу.
Ключевые слова
ПРЕОБРАЗОВАНИЕ КОДА / ПРЕПРОЦЕССОР / МАКЕТ СИСТЕМЫ / СТРУКТУРНАЯ СХЕМА / ТЕХНОЛОГИИ И ИНСТРУМЕНТЫ / CODE CONVERSION / SYSTEM MOCKUP / STRUCTURAL SCHEME / TOOLS AND TECHNOLOGIES

Аннотация научной статьи по компьютерным и информационным наукам, автор научной работы — Галанин Дмитрий Николаевич, Георгиев Виктор Олегович, Горбунов Владислав Маратович, Прокопьев Николай Аркадиевич, Поликашин Денис Станиславович

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

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

Похожие темы научных работ по компьютерным и информационным наукам , автор научной работы — Галанин Дмитрий Николаевич, Георгиев Виктор Олегович, Горбунов Владислав Маратович, Прокопьев Николай Аркадиевич, Поликашин Денис Станиславович

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

ANALYSIS OF CODE CONVERSION SYSTEM DEVELOPMENT PROBLEMS

This paper presents an analysis of actual at present time problems of program code conversion and their practical solutions with usage of software development tools. Main problems of that domain are revealed and systemized, some ways of solving these problems are given. A structural mock-up of “Code converter” system is developed and presented. This system features source code translation from one language to another with usage of abstract syntax trees and several utility templates for emulation of language constructs, programming paradigms and standard library functions, which are non-existent in target languages.

Текст научной работы на тему «Исследование вопросов построения систем преобразования кода»

ISSN 0321-2653 IZVESTIYA VUZOV. SEVERO-KAVKAZSKIYREGION. TECHNICAL SCIENCE. 2018. No 1

ИНФОРМАТИКА, ВЫЧИСЛИТЕЛЬНАЯ ТЕХНИКА И УПРАВЛЕНИЕ INFORMATICS, COMPUTER ENGINEERING AND CONTROL

УДК 004.4'427 DOI: 10.17213/0321-2653-2018-1-5-9

ИССЛЕДОВАНИЕ ВОПРОСОВ ПОСТРОЕНИЯ СИСТЕМ ПРЕОБРАЗОВАНИЯ КОДА

© 2018 г. Д.Н. Галанин, В.О. Георгиев, В.М. Горбунов, Н.А. Прокопьев, Д.С. Поликашин

Казанский федеральный университет (КФУ), г. Казань, Россия

ANALYSIS OF CODE CONVERSION SYSTEM DEVELOPMENT PROBLEMS

D.N. Galanin, V.O. Georgiev, V.M. Gorbunov, N.A. Prokopyev, D.S. Polikashin

Kazan Federal University (KFU), Kazan, Russia

Галанин Дмитрий Николаевич - магистрант, кафедра Galanin Dmitrij Nikolaevich - undergraduate, department

«Системный анализ и информационные технологии», «System Analysis and Information Technologies», Kazan

Казанский федеральный университет (КФУ), г. Казань, Federal University (KFU), Kazan, Russia. Россия.

Георгиев Виктор Олегович - канд. техн. наук, ст. препода- Georgiev Victor Olegovich - Candidate of Technical Sciences,

ватель, кафедра «Технологии программирования», Казан- Senior lecturer, department «Programming Technologies»,

ский федеральный университет (КФУ), г. Казань, Россия. Kazan Federal University (KFU), Kazan, Russia. E-mail: VO-

E-mail: [email protected] [email protected]

Горбунов Владислав Маратович - магистрант, кафедра Gorbunov Vladislav Maratovich - undergraduate, department

«Системный анализ и информационные технологии», «System Analysis and Information Technologies», Kazan Federal

Казанский федеральный университет (КФУ), г. Казань, University (KFU), Kazan, Russia. Россия.

Прокопьев Николай Аркадиевич - магистр, ассистент, ка- Prokopyev Nikolai Arkadievich - master of technical sciences,

федра «Технологии программирования», Казанский феде- assistant lecturer, department «Programming Technologies»,

ральный университет (КФУ), г. Казань, Россия. E-mail: Kazan Federal University (KFU), Kazan, Russia. E-mail:

[email protected] [email protected]

Поликашин Денис Станиславович - аспирант, кафедра Polikashin Denis Stanislavovich - doctoral student, department

«Технологии программирования», Казанский федеральный «Programming Technologies», Kazan Federal University (KFU),

университет (КФУ), г. Казань, Россия. Kazan, Russia.

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

Ключевые слова: преобразование кода; препроцессор; макет системы; структурная схема; технологии и инструменты.

ISSN 0321-2653 IZVESTIYA VUZOV. SEVERO-KAVKAZSKIYREGION. TECHNICAL SCIENCE. 2018. No 1

This paper presents an analysis of actual at present time problems of program code conversion and their practical solutions with usage of software development tools. Main problems of that domain are revealed and systemized, some ways of solving these problems are given. A structural mock-up of "Code converter" system is developed and presented. This system features source code translation from one language to another with usage of abstract syntax trees and several utility templates for emulation of language constructs, programming paradigms and standard library functions, which are non-existent in target languages.

Keywords: code conversion; system mockup; structural scheme; tools and technologies.

Введение

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

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

1. Актуальность и научная значимость темы

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

В настоящее время существует сравнительно немного аналогов нашей системы. Среди прочих можно выделить JLCA, Convert.Net, Janett. Их особенность состоит в узкой направленности только на один язык при преобразовании кода (например, только C# в JAVA или толь-

ко JAVA в C#). Предлагаемая нами система является масштабируемой до поддержки преобразования кода для множества языков. Разработанное приложение позволит выполнять преобразование текста той или иной программы, по максимуму сохраняя функционал.

2. Возникающие вопросы

и пути их решения

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

Для этого рассмотрим понятие абстрактного синтаксического дерева.

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

Таким образом, AST представляет собой структурное представление исходной программы, очищенное от элементов конкретного синтаксиса. Абстрактные синтаксические деревья в том или ином виде используются практически во всех современных компиляторах и интерпретаторах, их теория достаточно хорошо разработана. Одним из примеров практической кодовой реализации теоретических концепций AST может служить «Преобразователь кода TCJ» [1].

3. Вопросы выбора структуры

и инструментальных средств реализации «преобразователя кода TCJ»

3.1. Структура «Преобразователя кода TCJ»

Структурно «Преобразователь» состоит из двух категорий компонентов.

1. Лексические анализаторы, преобразующие программу на исходном языке в AST.

2. Генераторы кода, преобразующие AST в программу на целевом языке.

Для каждого языка предполагается свой анализатор и генератор.

Подобной архитектурой обладают многие современные компиляторы, которые таким образом генерируют машинный код для различных архитектур (х86, х86_64, ARM).

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

3.2. Технологии и инструменты реализации

Для реализации «Преобразователя» был выбран язык программирования Kotlin, работающий на платформе JVM. Это связано с тем, что:

1. Платформа JVM предоставляет готовые средства для многих «рутинных» задач, что избавляет от необходимости как написания их собственных реализаций, так и подключения сторонних библиотек.

2. JVM доступна на всех основных платформах и архитектурах (Linux, Windows, macOS, BSD и др.). Реализация OpenJDK доступна под свободной лицензией.

3. Системы сборки для JVM, такие как используемая в данной системе Gradle, предоставляют удобные средства управления зависимостями проектов, в том числе загрузку их из сети, что значительно облегчает сборку проекта из исходных текстов и его развертывание на машине пользователя.

4. Язык Kotlin, разрабатываемый компанией JetBrains, не только полностью совместим с Java, но и значительно проще по синтаксису.

5. JVM является основной платформой для библиотеки ANTLR4.

ANTLR4 - библиотека для генерации синтаксических и лексических анализаторов непосредственно из описания грамматики в формате расширенной формы Бэкуса-Наура. Эти описания для многих языков доступны в сети Интернет под свободными лицензиями, что позволяет адаптировать их для проекта, не создавая с нуля.

В качестве системы сборки в проекте используется Gradle. Каждый компонент «Преобразователя» оформлен в виде отдельного Gradle-модуля.

На момент написания данной работы в качестве сторонних библиотек к проекту подключены только Kotlin и ANTLR4, в связи с чем задача развертывания проекта сводится лишь к наличию JDK 1.8 на целевой машине и последующей сборке проекта из исходных кодов.

3.3. Вопросы, связанные с процессом разработки системы

Разработка проекта ведется в IDE IntelliJ IDEA Community Edition, разрабатываемой компанией JetBrains. Среда имеет инструменты, облегчающие работу на Kotlin. Также среда поддерживает разнообразные подключаемые модули, в частности, поддержку системы Gradle, что позволяет производить сборку прямо из IDE и сильно упрощает процесс разработки.

Контроль версий осуществляется с помощью хостинга Gitlab, использующий систему контроля версий Git. Использование VCS позволяет вести разработку совместно силами нескольких разработчиков.

4. Возникающие проблемы и пути их решения

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

4.1. Проблемы, связанные со стандартными библиотеками языков

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

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

4.2. Проблемы, связанные с «идеологией» языков

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

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

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

4.3. Совместимость со стандартами

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

Кроме того, компиляторы и другие средства могут предоставлять расширения, не являющиеся частью стандарта. Примерами для языка C++ могут служить расширения GCC (GNUEx-tensions) и специфичные для Windows расширения VisualC++.

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

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

Заключение

Разработка имеет сравнительно небольшой временной интервал своего существования и проводится практически в инициативном порядке. Некоторые достигнутые результаты описаны в [5 - 7].

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

Литература

1. Георгиев В.О., Поликашин Д.С., Рафиков Д.С., Бурнашев Р.А., Прокопьев Н.А. Учебно-макетный вариант инструментальной системы «Преобразователь кода TCJ» // Языки программирования и компиляторы (PLC-2017): тр. конф., Ростов н/Д., 2017. С. 75 - 78.

2. Георгиев В.О. Учебно-модельный вариант интерактивной системы генерации ПО сложных систем с предварительной предынтерпретацией программных модулей // Информационные системы и технологии (ИСТ-2016): материалы междунар. науч.-техн. конф., Н. Новгород, 2016. С. 248 - 249.

3. Георгиев В.О. Программная инженерия: технологические принципы разработки программного обеспечения на уровне формализованного описания на примере абстрагированной диалоговой системы // Языковая семантика: модели и технологии (TEL'2014): материалы междунар. конф., Казань, 2014. С. 40 - 41.

4. Georgiev V.O., Prokopiev N.A. Model Approach To Interactive System Software Development // International Journal of Applied Engineering Research (IJAER). 2015. Vol. 10, № 24. P. 45208 - 45213.

5. Поликашин Д.С., Еникеев А.И., Георгиев В.О. Исследование проблем автоматизации решения задачи совместимости программных систем // Информационные системы и технологии (ИСТ-2016): материалы междунар. науч.-техн. конф., Н. Новгород, 2016. С. 251.

6. Polikashin D.S., Enikeev A.I., Georgiev V.O. Researching of the problem of solution automation of software systems // Europe and MENA Cooperation Advances in Information and Communication Technologies, 2016. P. 159 - 166.

7. Polikashin D.S., Georgiev V.O. Research and options of practical solution of software systems compatibility problem // International Journal of Pharmacy & Technology IJPT. 2016. Vol. 8, № 4 P. 24309 - 24316.

References

1. Georgiev V.O., Polikashin D.S., Rafikov D.S., Burnashev R.A., Prokop'ev N.A. [Educational mock-up of software development system "TCJ Code converter"]. Yazyki programmirovaniya i kompilyatory (PLC-2017): trudy konferentsii [Programming languages and compilers (PLC-2017): conference proceedings]. Rostov-on-Don, 2017. pp. 75-78. (In Russ.)

ISSN 0321-2653 IZVESTIYA VUZOV. SEVERO-KAVKAZSKIYREGION. TECHNICAL SCIENCE. 2018. No 1

2. Georgiev V.O. [Educational model of interactive system for generation of complex software systems with premilinary interpretation of software modules]. Informatsionnye sistemy i tekhnologii (IST-2016): materialy mezhdunarodnoi nauchno-tekhnicheskoi konferentsii [Information systems and technologies (IST-2016): international scientific and technical conference proceedings]. Nizhny Novgorod, 2016. pp. 248-249. (In Russ.)

3. Georgiev V.O. [Software engineering: technological principles of software development on level of formal description using an abstract dialog system as example]. Yazykovaya semantika: modeli i tekhnologii (TEL'2014): materialy mezhdunarodnoi konferentsii [Language semantics: models and technologies (TEL'2014): international conference proceedings]. Kazan, 2014. pp. 4041. (In Russ.)

4. Georgiev V.O., Prokopiev N.A. Model Approach To Interactive System Software Development // International Journal of Applied Engineering Research (IJAER). 2015. Vol. 10. № 24. pp. 45208-45213.

5. Polikashin D.S., Enikeev A.I., Georgiev V.O. [Researching of the problem of solution automation of software systems]. Informatsionnye sistemy i tekhnologii (IST-2016): materialy mezhdunarodnoi nauchno-tekhnicheskoi konferentsii [Information systems and technologies (IST-2016): international scientific and technical conference proceedings]. Nizhny Novgorod, 2016. pp. 251. (In Russ.)

6. Polikashin D.S., Enikeev A.I., Georgiev V.O. Researching of the problem of solution automation of software systems // Europe and MENA Cooperation Advances in Information and Communication Technologies, 2016. pp 159-166.

7. Polikashin D.S., Georgiev V.O. Research and options of practical solution of software systems compatibility problem // International Journal of Pharmacy & Technology IJPT. 2016. Vol. 8. № 4 pp. 24309-24316.

Поступила в редакцию /Receive 04 августа 2017 г. /August 04, 2017

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