def read(self): """Match the grammar for a read.""" self.match("READ") self.stack.append("Designator") location = self.designator() if not isinstance(location, Location) or location.type != self.integer_type: # Not an integer variable. try: raise InvalidRead(location.type, self.last) except InvalidRead as e: self.invalid_token(e) r = Read(location) r.token = self.last return r