Синтаксический анализатор должен распознавать следующие лексеммы:

Написать программу-аналог калькулятора (с некоторыми вариациями, в зависимости от желаемой оценки).

Входные данные: произвольная строка символов.

Выходные данные: заключение о корректности входной строки как арифметического выражения, вычисленное значение этого выражения, в случае некорректной входной строки информацию о типе ошибки (например, «Несоответствие количества ( и )»). Выходные данные зависят от сложности задания.

Синтаксический анализатор должен распознавать следующие лексеммы:

1.      Знаки арифметических операций: ‘+’, ‘-‘, ‘*’, ‘/’

2.      Скобки ‘(‘ и ‘)’

3.      Действительные числа (т.е. дробные). Например: 12, 66.6, .54, 221.

4.      Имя встроенной функции (см. задание максимум)

Задание минимум (на 3): считать строку символов, дать заключение о её соответствии арифметическому выражению, в случае несоответствия указать причину.

Задание максимум (на 5): вычислить значение введённого выражения с учётом приоритета операций. При этом необходимо обрабатывать исключительные ситуации (например, деление на 0). Кроме того, нужно реализовать поддержку одной встроенной функции от двух переменных (например, log(a, b)). При этом аргументы функции сами являются выражениями (в том числе содержат эту функцию). Должна быть реализована возможность сравнительно простого изменения встроенной функции по требованию преподавателя (например, заменить log(a, b) на pow(a, b)). Встроенная функция имеет наивысший приоритет. Скобки служат для изменения порядка действий (обычная математика).

Вне зависимости от сложности, программная реализация должна соответствовать требованиям, изложенным в файле Преамбула.doc

Ссылка на основную публикацию
Adblock detector