разбор арифметического выражения в схеме - PullRequest
0 голосов
/ 23 сентября 2011

Я знаю, как использовать stack для обработки строки арифметического выражения типа `(1 + 2) * 3 '.Существует ли типовое решение Схемы для этой проблемы?

Ответы [ 2 ]

1 голос
/ 23 сентября 2011

Сложно сказать, какой вопрос вы задаете. В Scheme (или Racket) вы почти наверняка написали бы такой «оценщик» напрямую, например:

  • для E1 * E2, возврат (eval E1) раз (eval E2)
  • для E1 + E2, возврат (eval E1) плюс (eval E2)

... так что оценщик будет буквально трехстрочным.

Обратите внимание, что в этом определении нет необходимости явно отслеживать стек (конечно, вы может делать то же самое на любом другом языке - вы бы использовали явный стек, только если бы вы хотели написать оценщик в виде цикла, и не хотел отделить шаг синтаксического анализа).

Чтобы разобрать выражение, вам нужно ... ну, вы, вероятно, хотите парсер. Если вы используете ракетку, Вы можете взглянуть на пример калькулятора, который поставляется с Racket в collects/parser-tools/examples/calck.rkt. Он обрабатывает все, что вы описываете. Я мог бы вставить все это сюда, но это, вероятно, излишне.

0 голосов
/ 23 сентября 2011

Да, решение Scheme состоит в том, чтобы проанализировать выражение, а затем использовать стек, как вы уже знаете, как это сделать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...