Mercurial > hg > Members > shinya > pyrect
view pyrect/converter.py @ 87:d23f12ce0369
add suffix-dfa, it's used to be parallel-matching-algorithm (not implement, yet).
author | Ryoma SHINYA <shinya@firefly.cr.ie.u-ryukyu.ac.jp> |
---|---|
date | Sun, 14 Nov 2010 04:16:12 +0900 |
parents | 701beabd7d97 |
children | 933d422f21f0 |
line wrap: on
line source
#!/usr/bin/env python import sys from pyrect.regexp import Regexp, CallGraph, 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("-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 = "NFA" reg.nfa = SuffixNFA(reg.nfa) reg.nfacg = CallGraph(reg.nfa) elif opts.sdfa: fa = "DFA" sdfa = SuffixDFATranslator().translate(reg.dfa) reg.dfa = sdfa reg.dfacg = CallGraph(sdfa) 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)