def genpython(self): return trim(''' self.closureplus( lambda: ( {exp} ) )''').format(exp=indent(self.exp.genpython(), 2))
def genpython(self): options = ',\n'.join(f'lambda: {o.genpython()}' for o in self.options) return trim(''' self.oneof( {options}, ) ''').format(options=indent(options))
def __repr__(self): return trim(r''' @@grammar :: Python @@whitespace :: /(?:(?!\n)\s)+/ @@left_recursion :: False @@parseinfo :: True {rules} ''').format(rules='\n\n'.join(repr(r) for r in self.rules))
def __repr__(self): return trim(r''' {name} = {exp} ; ''').format( name=self.name, exp=indent(repr(self.exp)), )
def genpython(self): return trim(''' def parse_{name}(self): print('{name}', '>>>', '"%s"' % self.text[self.pos: self.pos + 20]) self.spaces() {exp} print('{name}', result, '"%s"' % self.text[self.pos: self.pos + 20]) return result ''').format(name=self.name, exp=indent(f'result = {self.exp.genpython()}'))
def genpython(self): rules = '\n\n'.join(trim(r.genpython()) for r in self.rules) result = trim(''' import argparse from pygl.context import ParseContext class PythonParser(ParseContext): {rules} if __name__ == '__main__': argp = argparse.ArgumentParser(description="Simple parser for Python") addarg = argp.add_argument addarg('file', metavar="FILE", help="the input file to parse or '-' for standard input", nargs='?', # default='-', ) addarg('startrule', metavar="STARTRULE", nargs='?', help="the start rule for parsing", default=None, ) args = argp.parse_args() if args.file: with open(args.file) as f: text = f.read() parser = PythonParser(text) ast = parser.parse(args.startrule) print(type(ast), ast) ''').format(rules=indent(rules)) # compile(result, '<text>', mode='exec') return result
def genpython(self): return trim(f'{self.exp.genpython()} or self.void()')
def genpython(self): return trim(f'({self.exp.genpython()})')
def genpython(self): seq = ',\n'.join(f'lambda: {e.genpython()}' for e in self.seq) return trim(''' self.allof( {seq} )''').format(seq=indent(seq))