view pyrect/converter.py @ 99:e327e93aeb3a

remove callgraph and use Transition.
author Ryoma SHINYA <shinya@firefly.cr.ie.u-ryukyu.ac.jp>
date Sun, 12 Dec 2010 23:09:19 +0900
parents 933d422f21f0
children 492daa4d7fa5
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("-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:
        psr.print_help()
        exit()
    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)