def __init__(self, **kw): """ Abstract representation of parser Keyword arguments: - read - a callable accepting an int arg (nbytes) and returning a string, default is this class' read() method - file - a file object, or string of a pathname to open as a file, defaults to sys.stdin. Note that you can leave this blank, and pass a file keyword argument to the .run() method. - verbose - set to 1 to enable verbose output messages, default 0 - keepfiles - if non-zero, keeps any files generated in the course of building the parser engine; by default, all these files get deleted upon a successful engine build - defaultNodeClass - the class to use for creating parse nodes, default is self.defaultNodeClass (in this base class, BisonNode) """ # setup read = kw.get('read', None) if read: self.read = read fileobj = kw.get('file', None) if fileobj: if isinstance(fileobj, str): try: fileobj = open(fileobj, 'rb') except: raise Exception('Cannot open input file %s' % fileobj) self.file = fileobj else: self.file = sys.stdin nodeClass = kw.get('defaultNodeClass', None) if nodeClass: self.defaultNodeClass = nodeClass self.verbose = kw.get('verbose', 0) if 'keepfiles' in kw: self.keepfiles = kw['keepfiles'] # if engine lib name not declared, invent ont if not self.bisonEngineLibName: self.bisonEngineLibName = self.__class__.__module__ + '-parser' # get an engine self.engine = ParserEngine(self)