#!/usr/bin/env python

# Copyright 2005, W. Borgert <debacle@debian.org>
# GPL v2
# Complete BNF: http://people.debian.org/~debacle/ttcn-bnf.html

try:
    import psyco
    psyco.full()
except:
    pass

import getopt, sys, time
import pyparsing
import ttcn3parser

options = {}
version = "20050130"

def process_opts(argv):
    # options not implemented - only for compatibility w/ older versions
    global options
    options = {'help':                0,
               'no-flattening':       0,
               'pretty-print':        0,
               'print-symbol-tables': 0,
               'print-tree':          0,
               'read-stdin':          0,
               'version':             0}
    try:
        opts, args = getopt.getopt(argv[1:], "hfpTtsv",
                                   ["help",
                                    "no-flattening",
                                    "pretty-print",
                                    "print-symbol-tables",
                                    "print-tree'",
                                    "read-stdin",
                                    "version"])
    except getopt.GetoptError:
        usage(argv[0])
        sys.exit(1)
    for o, a in opts:
        if o in ("-h", "--help"):
            options['help'] = 1
        if o in ("-f", "--no-flattening"):
            options['no-flattening'] = 1
        if o in ("-p", "--pretty-print"):
            options['pretty-print'] = 1
        if o in ("-T", "--print-symbol-tables"):
            options['print-symbol-tables'] = 1
        if o in ("-t", "--print-tree"):
            options['print-tree'] = 1
        if o in ("-s", "--read-stdin"):
            options['read-stdin'] = 1
        if o in ("-v", "--version"):
            options['version'] = 1
    return args

def usage(name):
    print "Usage: " + name + " [options] files(s)\n"

if __name__ == "__main__":
    files = process_opts(sys.argv)
    if options['help']:
        usage(sys.argv[0])
        sys.exit(0)
    if options['version']:
        print version
        sys.exit(0)
    bnf = ttcn3parser.BNF()
    for f in files:
        start = 0
        try:
            start = time.time()
            tokens = bnf.parseFile(f)
        except pyparsing.ParseException, err:
            print "File:", f
            print err.line
            print " "*(err.column-1) + "^"
            print err
        end = time.time()
        if options['print-tree']:
            print tokens.asXML()
        print "Parsed file %s in %.2f seconds" % (f, end - start)

