def test_escape_sequences(self): self.assertEqual(u'\n', eval_escapes(r'\n')) self.assertEqual(u'this \xeds a test', eval_escapes(r'this \xeds a test')) self.assertEqual(u'this ís a test', eval_escapes(r'this \xeds a test')) self.assertEqual(u'\nañez', eval_escapes(r'\na\xf1ez')) self.assertEqual(u'\nañez', eval_escapes(r'\nañez'))
def main(codegen=pythoncg): args = parse_args() if args.whitespace: args.whitespace = eval_escapes(args.whitespace) outfile = args.outfile prepare_for_output(outfile) prepare_for_output(args.object_model_outfile) grammar = codecs.open(args.filename, 'r', encoding='utf-8').read() try: model = compile(grammar, args.name, trace=args.trace, filename=args.filename, colorize=args.color) model.whitespace = args.whitespace model.nameguard = args.nameguard model.left_recursion = args.left_recursion if args.draw: from grako import diagrams diagrams.draw(outfile, model) else: if args.pretty: result = model.pretty() elif args.pretty_lean: result = model.pretty_lean() elif args.object_model: result = objectmodel.codegen(model) else: result = codegen(model) if outfile: save(outfile, result) else: print(result) # if requested, always save it if args.object_model_outfile: save(args.object_model_outfile, objectmodel.codegen(model)) print('-' * 72, file=sys.stderr) print('{:12,d} lines in grammar'.format(len(grammar.split())), file=sys.stderr) print('{:12,d} rules in grammar'.format(len(model.rules)), file=sys.stderr) print('{:12,d} nodes in AST'.format(model.nodecount()), file=sys.stderr) except ParseException as e: print(e, file=sys.stderr) sys.exit(1)
def main(): try: args = argparser.parse_args() except Exception as e: _error(str(e)) sys.exit(2) filename = args.filename name = args.name nameguard = args.nameguard outfile = args.output trace = args.trace whitespace = args.whitespace statetype = args.statetype if whitespace: whitespace = eval_escapes(args.whitespace) if name is None: name = os.path.splitext(os.path.basename(filename))[0] if outfile and os.path.isfile(outfile): os.unlink(outfile) grammar = codecs.open(filename, 'r', encoding='utf-8').read() if outfile: dirname = os.path.dirname(outfile) if dirname and not os.path.isdir(dirname): os.makedirs(dirname) try: model = genmodel(name, grammar, trace=trace, filename=filename) model.whitespace = whitespace model.nameguard = nameguard model.statetype = statetype renderer = args.format result = codegen[renderer](model) if outfile: with codecs.open(outfile, 'w', encoding='utf-8') as f: f.write(result) else: print(result) except GrakoException as e: _error(e) sys.exit(1)
def main(codegen=pythoncg, outer_version=''): argparser.add_argument( '-v', '--version', help='provide version information and exit', action='version', version=outer_version + __version__ ) try: args = argparser.parse_args() except Exception as e: _error(str(e)) sys.exit(2) colorize = args.color filename = args.filename name = args.name nameguard = args.nameguard draw = args.draw outfile = args.output pretty = args.pretty trace = args.trace whitespace = args.whitespace left_recursion = args.left_recursion if whitespace: whitespace = eval_escapes(args.whitespace) if draw and not outfile: _error('--draw requires --outfile') sys.exit(2) if sum([draw, pretty]) > 1: _error('either --draw or --pretty, not both') sys.exit(2) if name is None: name = os.path.splitext(os.path.basename(filename))[0] if outfile and os.path.isfile(outfile): os.unlink(outfile) grammar = codecs.open(filename, 'r', encoding='utf-8').read() if outfile: dirname = os.path.dirname(outfile) if dirname and not os.path.isdir(dirname): os.makedirs(dirname) try: model = genmodel(name, grammar, trace=trace, filename=filename, colorize=colorize) model.whitespace = whitespace model.nameguard = False if not nameguard else None # None allows grammar specified or the default of True model.left_recursion = left_recursion if pretty: result = str(model) else: result = codegen(model) if draw: from grako import diagrams diagrams.draw(outfile, model) elif outfile: with codecs.open(outfile, 'w', encoding='utf-8') as f: f.write(result) else: print(result) print('-' * 72, file=sys.stderr) print('{:12,d} lines in grammar'.format(len(grammar.split())), file=sys.stderr) print('{:12,d} rules in grammar'.format(len(model.rules)), file=sys.stderr) print('{:12,d} nodes in AST'.format(model.nodecount()), file=sys.stderr) except GrakoException as e: _error(e) sys.exit(1)
def main(codegen=pythoncg, outer_version=''): argparser.add_argument('-v', '--version', help='provide version information and exit', action='version', version=outer_version + __version__) try: args = argparser.parse_args() except Exception as e: _error(str(e)) sys.exit(2) colorize = args.color filename = args.filename name = args.name nameguard = args.nameguard draw = args.draw outfile = args.output pretty = args.pretty object_model = args.object_model trace = args.trace whitespace = args.whitespace left_recursion = args.left_recursion if whitespace: whitespace = eval_escapes(args.whitespace) if draw and not outfile: _error('--draw requires --outfile') sys.exit(2) if sum([draw, pretty, object_model]) > 1: _error('only one of --draw, --pretty, --object_model allowed') sys.exit(2) # if name is None: # name = os.path.splitext(os.path.basename(filename))[0] if outfile and os.path.isfile(outfile): os.unlink(outfile) grammar = codecs.open(filename, 'r', encoding='utf-8').read() if outfile: dirname = os.path.dirname(outfile) if dirname and not os.path.isdir(dirname): os.makedirs(dirname) try: model = genmodel(name, grammar, trace=trace, filename=filename, colorize=colorize) model.whitespace = whitespace model.nameguard = False if not nameguard else None # None allows grammar specified or the default of True model.left_recursion = left_recursion if pretty: result = str(model) elif object_model: result = objectmodel.codegen(model) else: result = codegen(model) if draw: from grako import diagrams diagrams.draw(outfile, model) elif outfile: with codecs.open(outfile, 'w', encoding='utf-8') as f: f.write(result) else: print(result) print('-' * 72, file=sys.stderr) print('{:12,d} lines in grammar'.format(len(grammar.split())), file=sys.stderr) print('{:12,d} rules in grammar'.format(len(model.rules)), file=sys.stderr) print('{:12,d} nodes in AST'.format(model.nodecount()), file=sys.stderr) except GrakoException as e: _error(e) sys.exit(1)
def token(self, ast, *args): token = eval_escapes(ast) if not token: raise FailedSemantics('empty token') return grammars.Token(token)
def string(self, ast): return eval_escapes(ast)
def token(self, ast, *args): token = eval_escapes(ast) return grammars.Token(token)