course_work

Задание курсовой работы

Разработать интерпретатор математических выражений (калькулятор).

Минимальный набор операторов:

  • Умножение *
  • Деление /
  • Сложение +
  • Вычитание -
  • Возведение в степень ^
  • Унарные операторы +/-

Минимальный набор типов данных:

  • Число с плавающей запятой (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

В отчете по курсовой работе обязательно должны присутствовать:

  • Определение единиц лексического анализатора (лексем) в форме регулярных выражений
  • Определение грамматики синтаксического анализатора в (расширенной) форме Бэкуса-Наура
  • Примеры разбора выражений в синтаксические деревья
  • Описание действий интерпретатора на каждом узле синтаксического дерева
  • (При наличии рабочей программы) примеры сессий работы с программой