imho.ws |
![]() |
![]() |
![]() |
# 1 |
Guest
Сообщения: n/a
|
![]()
Подскажите плизз, как сделать сабжевый калькулятор! Должно вводиться уравнение в 17-ной системетипа: 1g-5*d*(h1-8e/e)+4-ga. Скобок может быть сколько угодно
![]() |
![]() |
# 2 |
Guest
Сообщения: n/a
|
Система счисления - не важна сама по себе, ибо перевод из одной в другую - задача элементарная. А насчет калькулятора - необходимо идти стандартным путем:
Пишешь 3 компонента - лексический анализатор, выделяющий числа и знаки операций, синтаксический анализатор, который использует рез-ты лексического, чтобы сформировать дерево вычислений и решатель, который по дереву вычислений возвращает результат. Я для написания лексического и синтаксического анализатора пользуюсь связкой flex - bison (или lex - yacc). Если что - можно и поподробнее. |
![]() |
# 5 |
Guest
Сообщения: n/a
|
Разумеется можно и просто в "с"... Конечно будет просто супер если Вы опишите подробно компоненты - лексический анализатор, синтаксический анализатор и связку flex - bison...
Лично я в том, что Вы написали практически ничего не понимаю... Ведь сами посудите - задавать такое задание студенту первого курса - это просто издевательство или переоценка сил этого самого студента... Если есть время и мысли то я буду крайне признателен за помощь.... |
![]() |
# 6 |
Guest
Сообщения: n/a
|
НУ если писать более детально - то это должно выглядеть примерно так.
1. Лексический анализатор. Находится в одном из трех состояний: - начальное (оно же рабочее) - состояние считывания начала очередной лексемы (интерпретируемой конструкции). Из этого сотояния происходят переходы в другие при следующих условиях: - - При чтении знака операции - сообщается о прочитаном знаке операции и переход в это же состояние - - При чтении n-ричной цифры - переход в состояние считывания n-ричного числа - - При чтении любого другого символа - переход в состояние ошибки. - считывание n-ричного числа - состояние считывания значения n-ричного числа. Переход из этого состояния происходит по следующим правилам. - - Считывание очередного символа n-ричного числа - возврат в текущее состояние - - Считывание знака операции - оповещение о считанном числе и переход в начальное состояние - - Считывание другого символа - переход в состояние ошибки. - состояние ошибки - состояние сообщения об ошибке и возможный отказ в интерпретации данных. В зависимости от типа интерпретатора, это состояние может вести себя по разному - или выходить из интерпретатора, или отменять часть интерпретируемых данных и продолжать интерпретацию. 2. Синтаксический анализатор - получает информацию от лексического о наборе входных лексем и строит в соответствии с ними конструкции языка. Его состояния расписывать долго, но тоже можно. Проще взять инфу по bison. Там, кстати, и есть пример построения простейшего калькулятора. Результат синтаксического анализа - дерево исполнения выражения, которое выдается на исполнитель. 3. Исполнитель дерева выражения - производит обход дерева и исполнения выражения закодированного тим деревом. Насчет flex-bison - это - GNU-тые утилиты для построения лексического и синтаксического анализаторов. Они пошли еще из UNIX, где имели название lex и yacc, соответственно. Про бизона см. http://www.gnu.org/directory/devel/specific/bison.html Ну а про flex - надо искать отдельно. Но не думаю, что это будет сложно. |