Example #1
0
 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'))
Example #2
0
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)
Example #3
0
File: tool.py Project: tony/grakopp
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)
Example #4
0
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)
Example #5
0
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)
Example #6
0
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)
Example #7
0
 def token(self, ast, *args):
     token = eval_escapes(ast)
     if not token:
         raise FailedSemantics('empty token')
     return grammars.Token(token)
Example #8
0
 def string(self, ast):
     return eval_escapes(ast)
Example #9
0
 def token(self, ast, *args):
     token = eval_escapes(ast)
     return grammars.Token(token)
Example #10
0
 def token(self, ast, *args):
     token = eval_escapes(ast)
     if not token:
         raise FailedSemantics('empty token')
     return grammars.Token(token)
Example #11
0
 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'))
Example #12
0
 def string(self, ast):
     return eval_escapes(ast)