2010-07-05 2 views
2

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

Спасибо заранее,
Frank

ответ

6

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

shunting yard algorithm позволит вам конвертировать из infix в постфикс, даже если версия инфикс имеет скобки.

+0

Привет, Влад, я обнаружил, что используемый мною алгоритм является «урезанным» шунтирующим двором. С информацией из википедии я смог ее правильно адаптировать. Большое спасибо! – Aaginor

0

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

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

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

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

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

Смежные вопросы