Проект транслятора из Kotlin в Java
Автор: goldsphere • Ноябрь 7, 2018 • Курсовая работа • 3,914 Слов (16 Страниц) • 611 Просмотры
Введение
Целью трансляции является преобразование исходного текста программы в текст на другом языке для аппаратного или программного средства. С развитием вычислительных систем и все большей распространенностью мобильных устройств (которые работают от аккумуляторов) разработка качественного транслятора становится все более актуальной темой.
Очевидной практической целью разработки трансляторов является построение программных систем специфического назначения – языковых процессоров.
Методы построения трансляторов являются областью знаний, которые актуальны не только для разработчиков языков программирования высокого уровня, но и для обычных программистов, т.к. позволяют лучше понять принцип работы компьютера, что должно вести к улучшению качества и производительности написанного ПО.
Цель курсового проекта: разработать проект транслятора, который преобразует программу, содержащую подмножество языка Kotlin, в программу, содержащую подмножество языка Java генерируя эквивалентный исходный код. Задать язык – значит указать множество цепочек, принадлежащих языку.
Задачи:
- Представить синтаксис языка Kotlin в виде грамматики;
- Создать проект лексического анализатора;
- Создать проект синтаксического анализатора;
- Создать проект семантического анализатора.
Неформальная постановка задачи
Разработать транслятор из подмножества языка Kotlin в эквивалентное подмножество языка Java.
Подмножество языка Kotlin включает:
1. Типы данных: Int, Float, Char, String, Boolean, Long, Double;
2. Операторы: +, -, *, /, %, =, +=, -=, /=, *=, %=, ++, --, &&, ||, !, !=, ==, >=, <=, var, val;
3. Управляющие конструкции: for, while, do while, when;
4. Условные операторы: if, if..else;
5. Стандартная библиотека: print, println, Math.abs.
Грамматика
<Аксиома> →
<список объявлений> <главная функция> |
<список объявлений> <главная функция> <список объявлений> |
<главная функция> <список объявлений> |
<главная функция>
<идентификатор> → <буква><конец идентификатора>
<конец идентификатора> → <буква><конец идентификатора> | <цифра><конец идентификатора> | lambda
<буква> → a | b | c | d | e | f | g | h | i | j | k | l | m | n | o | p | q | r | s | t | u | v | w | x | y | z | A | B | C | D | E | F | G | H | I | J | K | L | M | N | O | P | Q | R | S | T | U | V | W | X | Y | Z | _
<цифра> → 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9
<цифра без ноля> → 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9
<знак> → ! | " | # | $ | % | & | ' | ( | ) | * | + | , | - | . | / | : | |; | < | = | > | ? | @
<управляющий символ> → \\ | \’ | \” | \n | \t | \r
<символ> → <буква> | <цифра> | <знак> | <управляющий символ>
<строка> → <символ><конец строки>
<конец строки> → <символ><конец строки> | lambda
<число> → <цифра> <конец числа>
<конец числа> → <цифра><конец числа> | lambda
<целое число положительное> → <цифра без ноля><конец числа>
<целое число> → <целое число положительное> | -<целое число положительное>
<число с плавающей точкой> → <целая часть><дробная часть><метка> |
<целая часть><метка f>
<целая часть> → <целое число> | lambda
<дробная часть> → .<целое число положительное>
<метка> → f | F | lambda
<метка f> → f | F
<логическое значение> → true | false
<оператор объявления> → var | val
<список объявлений> → <объявление> <конец списка объявлений>
<конец списка объявлений>→ <список объявлений> | lambda
<объявление> → <оператор объявления><идентификатор>:<тип данных><правая часть объявления>
...