code: def atom(self):
          
          token = self.token
          if token.nature == Nature.PLUS:
              self._process(Nature.PLUS)
              return UnaryOperation(op=token, right=self.atom())
          elif token.nature == Nature.MINUS:
              self._process(Nature.MINUS)
              return UnaryOperation(op=token, right=self.atom())
          elif token.nature in (Nature.MUT, Nature.ID):
              return self.call()
          elif token.nature == Nature.INT_NUMBER:
              self._process(Nature.INT_NUMBER)
              return Integer(token)
          elif token.nature == Nature.FLOAT_NUMBER:
              self._process(Nature.FLOAT_NUMBER)
              return FloatingPoint(token)
          elif token.nature == Nature.LPAREN:
              self._process(Nature.LPAREN)
              node = self.logical_or_expr()
              self._process(Nature.RPAREN)
              return node
          elif token.nature == Nature.TRUE:
              self._process(Nature.TRUE)
              return Boolean(token)
          elif token.nature == Nature.FALSE:
              self._process(Nature.FALSE)
              return Boolean(token)
          else:
              self._error()
docs: atom: '+' atom
              | '-' atom
              | call
              | INT_NUMBER
              | FLOAT_NUMBER
              | '(' logical_or_expr ')'
              | TRUE
              | FALSE