(self, stack, tokens, key)
Handles a let expression by recurring on the expression and
        updating the cache
Handles a let expression by recurring on the expression and
        updating the cache
Handles a let expression by recurring on the expression and updating the cache
def _enter_let(self, stack, tokens, key):
        """Handles a let expression by recurring on the expression and
        updating the cache
        """
        #pylint: disable=unused-argument
        self.consume_opening(tokens, "expression")
        newvals = {}
        current = "("
        self.consume_opening(tokens, "expression")
        while current != ")":
            if current != "(":
                raise PysmtSyntaxError("Expected '(' in let binding",
                                       tokens.pos_info)
            vname = self.parse_atom(tokens, "expression")
            expr = self.get_expression(tokens)
            newvals[vname] = expr
            self.cache.bind(vname, expr)
            self.consume_closing(tokens, "expression")
            current = tokens.consume()

        stack[-1].append(self._exit_let)
        stack[-1].append(newvals.keys())
def _enter_let ( self , stack , tokens , key ) : #pylint: disable=unused-argument self . consume_opening ( tokens , "expression" ) newvals = { } current = "(" self . consume_opening ( tokens , "expression" ) while current != ")" : if current != "(" : raise PysmtSyntaxError ( "Expected '(' in let binding" , tokens . pos_info ) vname = self . parse_atom ( tokens , "expression" ) expr = self . get_expression ( tokens ) newvals [ vname ] = expr self . cache . bind ( vname , expr ) self . consume_closing ( tokens , "expression" ) current = tokens . consume ( ) stack [ - 1 ] . append ( self . _exit_let ) stack [ - 1 ] . append ( newvals . keys ( ) )