Задание курсовой работы
Разработать интерпретатор математических выражений (калькулятор).
Минимальный набор операторов:
- Умножение
*
- Деление
/
- Сложение
+
- Вычитание
-
- Возведение в степень
^
- Унарные операторы
+
/-
Минимальный набор типов данных:
- Число с плавающей запятой (
double
)
Интерпретатор должен корректно разбирать выражения произвольной вложенности скобок.
Интерпретатор должен корректно разбирать числа, заданные в формате {S}{I}{.F}{e{PS}P}
, где
S
– необязательный знак,+
или-
I
– необязательная целая частьF
– необязательная дробная часть, если указана, перед ней всегда ставится символ.
PS
– необязательный знак показателя десятичного порядка,+
или-
P
– необязательный десятичный порядок, если указан, перед ним (или перед знаком), всегда ставится символe
илиE
.
Как минимум, задана либо целая, либо дробная часть.
Интерпретатор должен поддерживать определение переменных при помощи оператора =
и их использование в выражениях. Названия переменных состоят из строчных латинских букв.
Интерпретатор должен быть реализован в форме программы командной строки, принимающей на стандартный ввод одно или несколько выражений, разделенных символом ;
или переносом строки. Для каждого выражения, интерпретатор должен вывести соответствующее ему значение (если есть), или ошибку (если произошла ошибка разбора или интерпретации).
Для разбора строк настоятельно рекомендуется использовать генератор лексических и синтаксических анализаторов Antlr4.
Примеры:
Ввод: 42
Вывод: 42.0
Ввод: +42
Вывод: 42.0
Ввод: -42
Вывод: -42.0
Ввод: -42.42
Вывод: -42.42
Ввод: -42e3
Вывод: -42000.0
Ввод: 1e-1
Вывод: 0.1
Ввод: 3*7
Вывод: 21
Ввод: x=5; x*5
Вывод: 25.0
Ввод: x=10/2
x*5
Вывод: 25.0
Ввод: 6*7
42/2
Вывод: 42
21
Ввод: (3*5)+(6-(4/3))^(14-(5+7))
Вывод: 36.7777778
Ввод: e3
Вывод: Ошибка лексического разбора
Ввод: 3e
Вывод: Ошибка лексического разбора
Ввод: 3+
Вывод: Ошибка синтаксического разбора
Ввод: z
Вывод: Неопределенная переменная z
В отчете по курсовой работе обязательно должны присутствовать:
- Определение единиц лексического анализатора (лексем) в форме регулярных выражений
- Определение грамматики синтаксического анализатора в (расширенной) форме Бэкуса-Наура
- Примеры разбора выражений в синтаксические деревья
- Описание действий интерпретатора на каждом узле синтаксического дерева
- (При наличии рабочей программы) примеры сессий работы с программой