view pyrect/pyrect/converter.py @ 9:493c96d030c0

add pyrect
author nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
date Tue, 14 Jun 2011 17:24:03 +0900
parents
children
line wrap: on
line source

#!/usr/bin/env python

import sys
from pyrect.regexp import Regexp, DFATranslator, SuffixDFATranslator, SuffixTrieTranslator
from pyrect.regexp.nfa import SuffixNFA
from pyrect.translator import *
from optparse import OptionParser

def main(argv):
    myusage = "%prog [-C] regexp"
    psr = OptionParser(usage=myusage)
    psr.add_option("--C", action="store_true", dest="emit_cbc", default=False, help="emit C-source (as default)")
    psr.add_option("--CbC", action="store_true", dest="emit_cbc", default=False, help="emit CbC-source")
    psr.add_option("--LLVM", action="store_true", dest="emit_llvm", default=False, help="emit LLVM-source")
    psr.add_option("--Dot", action="store_true", dest="emit_dot", default=False, help="emit Dot-source")
    psr.add_option("--from-dfa", action="store_true", dest="dfa", default=True, help="translate from DFA")
    psr.add_option("--from-nfa", action="store_true", dest="nfa", default=False, help="translate from NFA")
    psr.add_option("--from-snfa", action="store_true", dest="snfa", default=False, help="translate from SuffixNFA")
    psr.add_option("--from-sdfa", action="store_true", dest="sdfa", default=False, help="translate from SuffixDFA")
    psr.add_option("--from-trie", action="store_true", dest="trie", default=False, help="translate from Trie")
    psr.add_option("--regex", action="store", type="string", dest="regex", default=False, help="regexp file", metavar="FILE")
    psr.add_option("-o", action="store", type="string", dest="output", default=False, help="output file", metavar="FILE")
    psr.add_option("-O", action="store_true", dest="optimize", default=False, help="do optimization (only in llvm).")
    psr.add_option("-g", action="store_true", dest="debug", default=False, help="embed debug info")
    (opts, args) = psr.parse_args(sys.argv)
    if len(args) == 1:
        if opts.regex:
            file = open(opts.regex, 'r')
            reg = Regexp(file.read().rstrip())
            file.close()
        else:
            psr.print_help()
            exit()
    else:
        reg = Regexp(args[1])
    if not opts.output:
        output = sys.stdout
    else:
        output = open(opts.output,"w")

    if opts.nfa:
        fa = "NFA"
    elif opts.snfa:
        fa = "SDFA"
        reg.nfa = SuffixNFA(reg.nfa)
    elif opts.sdfa:
        fa = "DFA"
        sdfa = SuffixDFATranslator().translate(reg.dfa)
        reg.dfa = sdfa
    elif opts.trie:
        fa = "DFA"
        trie = SuffixTrieTranslator().translate(reg.dfa)
        reg.dfa = trie
    else:
        fa = "DFA"

    if opts.emit_dot:
        translator = DotTranslator(reg, fa)
        translator.debug = opts.debug
    elif opts.emit_llvm:
        translator = LLVMTranslator(reg)
        translator.debug = opts.debug
        translator.optimize = opts.optimize
    elif opts.emit_cbc:
        translator = CbCTranslator(reg)
        translator.debug = opts.debug
    else:
        translator = CTranslator(reg)
        translator.debug = opts.debug


    translator.translate(output)
    output.close()

if __name__ == '__main__' : main(sys.argv)