Один из способов думать об этом - вместо того, чтобы пытаться различить цель +
в лексизме, - это ждать анализа (где мы определяем значение). Так что держите:
t_PLUS = r'\+'
t_MINUS = r'\-'
def t_INTEGER(token):
r'\d+'
return int(token)
И определить грамматику:
number -> number PLUS number #sum, binary operator
number -> number MINUS number
number -> PLUS number #signed integer, unary operator
number -> MINUS number
number -> INTEGER
#By writing each as a parse functions like...
def p_number_ADD(p):
"number : number PLUS number"
p[0] = p[1]+p[2]
Примечание: это допускает следующее поведение +-+2 = +(-(+2)) = -2
(как видно на Python) .