Если у вас просто есть базовые c арифметические c операторы, тогда я предлагаю вам , а не использовать infixNotation, но вместо этого определить свой собственный рекурсивный парсер, что-то вроде:
import pyparsing as pp
ppc = pp.pyparsing_common
operand = ppc.integer()
multop = pp.oneOf("* /")
addop = pp.oneOf("+ -")
expr = pp.Forward()
# here is where to extend the grouping symbols to include (), [], and {}
LPAR, RPAR, LBRACK, RBRACK, LBRACE, RBRACE = map(pp.Suppress, "()[]{}")
atom = operand | LPAR + expr + RPAR | LBRACK + expr + RBRACK | LBRACE + expr + RBRACE
factor = pp.Group('-' + atom) | atom
term = pp.Group(factor + (multop + factor)[1, ...]) | factor
sum = pp.Group(term + (addop + term)[1, ...]) | term
expr <<= sum
Несколько простых тестов:
expr.runTests("""
1+7
1+2+4
-(1+2)*4
3*[11+14]
""", fullDump=False)
Дает:
1+7
[[1, '+', 7]]
1+2+4
[[1, '+', 2, '+', 4]]
-(1+2)*4
[[['-', [1, '+', 2]], '*', 4]]
3*[11+14]
[[3, '*', [11, '+', 14]]]