ВВЕДЕНИЕ 4
1 Описание предметной области 6
1.1 Язык программирования Oberon-07 6
1.2 Процедурно-параметрическое программирование 7
1.3 Трансляторы 8
1.4 Выводы 9
2 Выбор методов реализации 9
2.1 Выбор метода реализации лексического и синтаксического
анализа 10
2.1.1 Регулярные выражения 10
2.1.2 Генераторы лексических и синтаксических анализаторов 11
2.1.3 Комбинаторные синтаксические анализаторы 11
2.2 Выбор метода реализации генератора промежуточного представления 12
2.3 Выбор языка реализации 12
2.3.1 Язык программирования C 13
2.3.2 Язык программирования C++ 13
2.4 Выводы 13
3 Описание разработанного приложения 14
3.1 Лексический и синтаксический анализаторы 14
3.2 Генератор промежуточного представления 18
3.2.1 Expression 19
3.2.2 Value 19
3.2.3 Type 20
3.2.4 Statement 20
3.2.5 Section 21
3.2.6 Таблицы символов 21
3.3 Формат промежуточного представления 23
3.4 Интерфейс приложения 24
3.5 Выводы 25
ЗАКЛЮЧЕНИЕ 26
СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ 27
ПРИЛОЖЕНИЕ А 28
ПРИЛОЖЕНИЕ Б
В современном мире программная инженерия и разработка прикладного программного обеспечения, в частности, является одной из самых бурно развивающихся областей. При этом с каждым годом растут требования к надежности и расширяемости создаваемых программных систем. Это, в свою очередь, подталкивает развитие языков программирования, так как именно язык программирования выбранный для разработки того или иного прикладного ПО задает базис надежности, расширяемости и других характеристик ПО.
Существует множество экспериментальных языков программирования. В них происходит проверка новых возможностей которые теоретически могут повысить те или иные характеристики ПО. При этом некоторые из этих возможностей удачно прошедших проверку временем в экспериментальных языках активно заимствуются языками общего пользования. Например, анонимные функции (лямбда-функции), некогда присутствовавшие только в функциональных языках программирования, сейчас доступны в Java, C#, C++ и во множестве других популярных языков.
Язык программирования Oberon это императивный язык программирования, родственный языку Pascal, первая версия которого была разработана 1986 шведским ученым Никлаусом Виртом. При разработке языка Oberon его создатель следовал принципу: «Сделай все настолько простым, насколько возможно, но не проще» (A. Эйнштейн). Поэтому язык содержит небольшое количество встроенных конструкций и типов, что делает его сравнительно более простым по сравнению с другими современными языками программирования. Oberon-07 — это развитие классического языка Oberon, из него были убраны некоторые конструкции, что еще сильнее упростило язык.
Целью данной выпускной квалификационной работы является создание базовой части транслятора для экспериментального императивного языка программирования семейства Oberon-07 c процедурно-параметрическими расширениями.
Для достижения поставленной цели необходимо решить следующие задачи:
- Реализация лексического анализатора;
- Реализация синтаксического анализатора;
- Реализация генератора промежуточного представления.
В результате выполнения выпускной квалификационной работы была разработана базовая часть транслятора экспериментального языка программирования на основе языка Oberon-07 c процедурно-параметрическими рас-ширениями.
В процессе выполнения работы были реализованы наборы классов для реализации лексического анализатора, синтаксического анализатора и генератора промежуточного представления. На их основе была реализована базовая часть транслятора языка программирования Oberon-07 с расширениями. В пояснительной записке приведен анализ методов реализации компонентов транслятора и описание основных частей разработанного приложения.
Разработанное приложение соответствует цели работы. Перспективами данной работы является использование промежуточного представления для генерации машинного кода или интерпретации.
1. Wirth N. The Programming Language Oberon-07 : тех. отч. / ETH Zurich. — 2016. — C. 16—17.
2. Wirth N. The Programming Language Oberon-07 : тех. отч. / ETH Zurich. — 2016.
3. Легалов А. И. Процедурно-параметрическое программирование. — 2001. — URL: www.softcraft.ru/paradigm/ppp.
4. Легалов А. И., Швец Д. А. Язык программирования 02М. — 2013-2014. — URL: www.softcraft.ru/ppp/o2m/o2mref.
5. Компиляторы: принципы, технологии и инструментарий : Введение в компиляцию : пер. с англ. / А. В. Ахо [и др.] //. — ООО «И.Д. Вильямс», 2018. — С. 29. — ISBN 978-5-8459-1932-8.
6. MIASAP : Type compatibility in Oberon. — 2018. — URL:http : / /miasap.se/obnc/type-compatibility.html.
7. POSIX Programmer’s Manual: LEX. — 2017. — URL:https://man7.org/linux/man-pages/man1/lex.1p.html.
8. JLex: A Lexical Analyzer Generator for Java(TM). — URL:https : / /www.cs.princeton.edu/~appel/modern/java/JLex/.
9. ANTLR (ANother Tool for Language Recognition). — URL:https : / /www.antlr.org/.
10. POSIXProgrammer’s Manual: YACC.—2017.—URL:https://man7.org/linux/man-pages/man1/yacc.1p.html.
11. Компиляторы: принципы, технологии и инструментарий : Введение в компиляцию : пер. с англ. / А. В. Ахо [и др.] //. — ООО «И.Д. Вильямс», 2018. — С. 450. — ISBN 978-5-8459-1932-8.