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, 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) binary = args.binary 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 binary and not outfile: _error('--binary requires --outfile') sys.exit(2) if draw and not outfile: _error('--draw requires --outfile') sys.exit(2) if sum((binary, draw, pretty)) > 1: _error('either --binary or --draw or --pretty') 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) 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 binary: result = pickle.dumps(model, protocol=2) elif 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)