code: def p_numerical_expr(self, p):
          '''numerical_expr : expr PLUS expr
                            | expr MINUS expr
                            | expr TIMES expr
                            | expr DIV expr
                            | MINUS expr %prec UMINUS
                            | PLUS expr %prec UMINUS
                            | INTEGER
                            | DOUBLE'''
          if len(p) == 4:
              p[0] = (p[2], (p[1], p[3]))
          elif len(p) == 3:
              p[0] = (p[1], (p[2],))
          elif len(p) == 2:
              p[0] = ('number', p[1]f p_numerical_expr(self, p):
          '''numerical_expr : expr PLUS expr
                            | expr MINUS expr
                            | expr TIMES expr
                            | expr DIV expr
                            | MINUS expr %prec UMINUS
                            | PLUS expr %prec UMINUS
                            | INTEGER
                            | DOUBLE'''
          if len(p) == 4:
              p[0] = (p[2], (p[1], p[3]))
          elif len(p) == 3:
              p[0] = (p[1], (p[2],))
          elif len(p) == 2:
              p[0] = ('number', p[1])
docs: numerical_expr : expr PLUS expr
                            | expr MINUS expr
                            | expr TIMES expr
                            | expr DIV expr
                            | MINUS expr %prec UMINUS
                            | PLUS expr %prec UMINUS
                            | INTEGER
                            | DOUBLE