Введение 3
Постановка задачи 4
1. Общие сведения о компиляторах 5
1.1. Лексический анализ 5
1.2. Синтаксический анализ 6
1.3. Семантический анализ 7
2. Описание модельного языка 8
3. Использование Roslyn 9
3.1. Преобразование AST 10
3.2. Компиляция под .NET 11
4. Модификация Roslyn 14
4.1. Модификация текста ошибок 14
4.2. Удаление семантических проверок 16
4.3. Добавление семантических проверок 19
5. Стандартная библиотека языка 22
5.1. Класс для замера времени выполнения кода 23
5.2. Математические функции 24
5.3. Стандартный класс массивов 24
Заключение 26
Список литературы 27
Приложение А. GitHub-репозиторий 29
.NET Framework — программная платформа, включающая в себя общеязыковую среду исполнения программ (CLR). Ее главная особенность (и основная идея) заключается в совместимости программных частей, написанных на разных языках. Так, программа на C# может одновременно использовать библиотеки на Visual Basic.NET, C# и даже Visual C++, что дает гибкость при разработке.
Под платформу .NET Framework уже написано огромное количество ПО и библиотек, главным образом из-за популярности языка программирования C#. Но сейчас Microsoft начинает постепенно отказываться от нее. Заявлено, что .NET Framework 4.8 — последняя версия платформы. Ее поддержка (исправления ошибок и уязвимостей) будет продолжаться, но новых возможностей уже не добавится.
В качестве альтернативы Microsoft предлагает новую платформу .NET Core. Она также является общеязыковой, но одновременно с этим, в отличие от .NET Framework, еще и кроссплатформенной [13, с. 223]. Однако список языков программирования, на которых можно вести разработку под .NET Core, сильно ограничен: C#, Visual Basic и F# [3].
В данной работе будет продемонстрировано создание компилятора модельного языка программирования для платформы .NET Core с использованием компилятора C# Roslyn. Данная задача важна для создания полноценных языков программирования под .NET Core или портирования существующих, в частности, языка PascalABC.NET, который сейчас компилирует код для .NET Framework.
В рамках данной работы был разработан компилятор для модельного языка программирования, генерирующий код под платформу .NET Core. Был спроектирован модельный язык, позволяющий получить доступ ко всем ее возможностям. Компиляция выполняется с использованием open-source компилятора Roslyn. Были выполнены изменения семантических проверок Roslyn и генерация новых ошибок.
Для модельного языка была реализована стандартная библиотека. Был реализован механизм ее компиляции, позволяющий расширять библиотеку как на языке C#, так и на самом модельном языке.
Таким образом, было установлено, что создать компилятор произвольного языка программирования под .NET Core возможно с использованием Roslyn, но необходимо менять его семантические проверки. Стандартную библиотеку можно писать как на языке C#, так и на самом разрабатываемом языке. Такой язык будет работать так же быстро, как и C#.
Полученный результат позволяет утверждать, что перевод компилятора PascalABC.NET в инфраструктуру Roslyn также является возможным.
Исходный код разработанного компилятора размещен в GitHub- репозитории. Ссылка на него приведена в Приложении А.
1. Ахо А.В. Компиляторы: принципы, технологии и инструментарий / Альфед В. Ахо, Моника С. Лам, Рави Сети, Джеффри Д. Ульман. — М.: ООО «И. Д. Вильямс», 2008. — 1178 с.
2. Визиторы по синтаксическому дереву — Вики ИТ мехмата ЮФУ. [Электронный ресурс] — URL: http://itmmcs.sfedu.m/wiki/Визи- торы_по_синтаксическому_дереву (дата обращения 29.05.2020).
3. Обзор .NET Core. [Электронный ресурс] — URL: https://docs.mi- crosoft.com/m-ru/dotnet/core/about (дата обращения 25.05.2020).
4. Albahari J. C# 7.0 in a Nutshell: The Definitive Reference / J. Albahari, E. Johannsen. — Sebastopol: O’Reilly, 2018. — 1070 p.
5. Albahari J. C# 8.0 in a Nutshell: The Definitive Reference / J. Albahari, B. Albahari. — Sebastopol: O’Reilly, 2020. — 2228 p.
6. Bansal A. K. Introduction to programming languages / A. K. Bansal. — Boca Raton, Florida: CRC Press, 2014. — 566 p.
7. Compiling and Executing Code in a C# App. [Электронный ресурс] — URL: https://www.damirscorner.com/blog/posts/20190802-Compiling- AndExecutingCodeInACsApp.html (дата обращения 29.05.2020).
8. Ezhil Selvi A. S. Compiler design concepts, Worked out Examples / A.
S. Ezhil Selvi, J. J. Persis // ResearchGate. — 2017. [Электронный ресурс] — URL: https://www.researchgate.net/publication/316560026 (дата обращения 06.06.2020)
9. GPLEX - CodePLEX Archive. [Электронный ресурс] — URL: https://archive.codeplex.com/?p=gplex (дата обращения 26.05.2020).
10. GPPG - CodePLEX Archive. [Электронный ресурс] — URL: https://archive.codeplex.com/?p=gppg (дата обращения 26.05.2020).
11. Harrison N. Code Generation with Roslyn / N. Harrison — Lexington: Apress, 2017. — 104 p.
12. Mogensen T. Ж. Basics of Compiler Design / T. Ж. Mogensen — Anniversary edition. — Lulu.com, 2010. — 307 p.
13. Price M. J. C# 8.0 and .NET Core 3.0 - Modern Cross-Platform Development. / M. J. Price — 4th edition. — Birmingham: Packt, 2019. — 784 p.
14. Roslyn — GitHub. [Электронный ресурс] — URL: https://git- hub.com/dotnet/roslyn (дата обращения 27.05.2020).
15. Waite W. M. Compiler Construction / W. M. Waite, G. Goos — Karlsruhe, 1996. — 360 p.
16. Wirth N. Compiler Construction / N. Wirth. — Zurich: Addison-Wesley,
2017. — 44 p.