В качестве альтернативы грамматика для арифметических выражений довольно проста, и вы можете легко реализовать синтаксический анализатор с рекурсивным спуском, который вычисляет выражение для вас.
Грамматика будет выглядеть примерно так:
<expression> ::= <term> <add_sub> <expression>
<term> ::= <factor> <mul_div> <term>
<factor> ::= '(' <expression> ')' | <number>
<add_sub> ::= '+' | '-'
<mul_div> ::= '*' | '/'
(вы должны определить целые числа, значения с плавающей запятой, дроби и т. Д. В зависимости от ваших потребностей)
Приведенная выше грамматика учитывает скобки и приоритет оператора