git @ Cat's Eye Technologies SixtyPical / 0.2 bin / sixtypical
0.2

Tree @0.2 (Download .tar.gz)

sixtypical @0.2raw · history · blame

#!/usr/bin/env python

"""Usage: sixtypical [OPTIONS] FILES

Analyzes and/or executes and/or compiles a Sixtypical program.
"""

from os.path import realpath, dirname, join
import sys

sys.path.insert(0, join(dirname(realpath(sys.argv[0])), '..', 'src'))

# ----------------------------------------------------------------- #

import codecs
from optparse import OptionParser
import sys
import traceback

from sixtypical.parser import Parser
from sixtypical.evaluator import eval_program
from sixtypical.analyzer import analyze_program


if __name__ == '__main__':
    optparser = OptionParser(__doc__.strip())

    optparser.add_option("--analyze",
                         action="store_true", dest="analyze", default=False,
                         help="")
    optparser.add_option("--compile",
                         action="store_true", dest="compile", default=False,
                         help="")
    optparser.add_option("--traceback",
                         action="store_true", dest="traceback", default=False,
                         help="")
    optparser.add_option("--execute",
                         action="store_true", dest="execute", default=False,
                         help="")

    (options, args) = optparser.parse_args(sys.argv[1:])

    for filename in args:
        text = open(filename).read()
        p = Parser(text)
        program = p.program()

        if options.analyze:
            try:
                analyze_program(program)
            except Exception as e:
                if options.traceback:
                    raise
                else:
                    traceback.print_exception(e.__class__, e, None)
                    sys.exit(1)
            print 'ok'

        if options.execute:
            context = eval_program(program)
            print str(context)