Формула парсер с кронштейнами - PullRequest
2 голосов
/ 05 июля 2010

Мне нужно реализовать простой синтаксический анализатор формул. Сначала я создаю постфиксную нотацию , а затем , оценивая строку постфикса . К сожалению, этот алгоритм не допускает скобки, т.е. (2 + 3) * a. Кто-нибудь знает, как расширить алгоритм, чтобы разрешить скобки?

Заранее спасибо,
Frank

Ответы [ 3 ]

6 голосов
/ 05 июля 2010

Смысл постфиксной нотации состоит в том, чтобы исключить скобки в инфиксной нотации, чтобы вы могли легче оценить выражение.Если ваш текущий алгоритм не допускает скобки в выражении инфикса, то вы используете неверный алгоритм.

Алгоритм маневрового двора позволит вам конвертировать из инфикса в постфикс, даже еслиинфиксная версия имеет скобки.

1 голос
/ 05 июля 2010

Может быть, эта статья может помочь?

http://www.go4expert.com/forums/showthread.php?t=1693

/ Fridden

0 голосов
/ 05 июля 2010

В качестве альтернативы грамматика для арифметических выражений довольно проста, и вы можете легко реализовать синтаксический анализатор с рекурсивным спуском, который вычисляет выражение для вас.

Грамматика будет выглядеть примерно так:

<expression> ::= <term> <add_sub> <expression>
<term> ::= <factor> <mul_div> <term>
<factor> ::= '(' <expression> ')' | <number>
<add_sub> ::= '+' | '-'
<mul_div> ::= '*' | '/'

(вы должны определить целые числа, значения с плавающей запятой, дроби и т. Д. В зависимости от ваших потребностей)

Приведенная выше грамматика учитывает скобки и приоритет оператора

...