git @ Cat's Eye Technologies Samovar / immutable-envs-in-match bin / samovar
immutable-envs-in-match

Tree @immutable-envs-in-match (Download .tar.gz)

samovar @immutable-envs-in-matchraw · history · blame

#!/usr/bin/env python
# encoding: UTF-8

"""\
samovar {option} input.samovar

Driver script for Samovar assertion-retraction engine.
"""

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 random

from samovar.parser import Parser
from samovar.generator import Generator


if __name__ == '__main__':

    optparser = OptionParser(__doc__)
    optparser.add_option("--debug",
                         action="store_true",
                         help="Show state before and after each move")
    optparser.add_option("--dump-ast",
                         action="store_true",
                         help="Just show the AST and stop")
    optparser.add_option("--length",
                         type=int, default=0,
                         help="If given, generate this many events for each situation")
    optparser.add_option("--line-per-sentence",
                         action="store_true")
    optparser.add_option("--seed",
                         type=int, default=None,
                         help="Set random seed (to select moves deterministically)")
    optparser.add_option("--words",
                         type=int, default=0,
                         help="If given, generate each situation til this many words")
    (options, args) = optparser.parse_args(sys.argv[1:])

    text = ''
    for arg in args:
        with codecs.open(arg, 'r', encoding='UTF-8') as f:
            text += f.read()

    p = Parser(text)
    ast = p.world()
    if options.dump_ast:
        print ast
        sys.exit(0)
    if options.seed is not None:
        random.seed(options.seed)
    g = Generator(ast, debug=options.debug)
    if options.length > 0:
        events = g.generate_events(options.length)
    elif options.words > 0:
        events = g.generate_words(options.words)
    for e in events:
        if options.line_per_sentence:
            sys.stdout.write("%s\n" % e)
        else:
            sys.stdout.write("%s  " % e)
    sys.stdout.write("\n")