Mercurial > hg > Members > shinya > pyrect
annotate src/converter.py @ 5:11fba907c0af
add Translater(object), that can translate C/CbC source code
from NFA or DFA(CbC can translate from DFA).
and refactoring, refactoring, refactoring...
not implimented translation-DotFile.
author | ryoma <e075725@ie.u-ryukyu.ac.jp> |
---|---|
date | Thu, 01 Jul 2010 00:40:51 +0900 |
parents | |
children | ec36e784df2e |
rev | line source |
---|---|
5
11fba907c0af
add Translater(object), that can translate C/CbC source code
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
1 #!/usr/bin/env python |
11fba907c0af
add Translater(object), that can translate C/CbC source code
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
2 |
11fba907c0af
add Translater(object), that can translate C/CbC source code
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
3 import sys |
11fba907c0af
add Translater(object), that can translate C/CbC source code
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
4 from dfareg import Regexp, CallGraph |
11fba907c0af
add Translater(object), that can translate C/CbC source code
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
5 from cTranslator import CTranslator |
11fba907c0af
add Translater(object), that can translate C/CbC source code
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
6 from cbcTranslator import CbCTranslator |
11fba907c0af
add Translater(object), that can translate C/CbC source code
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
7 from optparse import OptionParser |
11fba907c0af
add Translater(object), that can translate C/CbC source code
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
8 |
11fba907c0af
add Translater(object), that can translate C/CbC source code
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
9 def main(argv): |
11fba907c0af
add Translater(object), that can translate C/CbC source code
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
10 myusage = "%prog [-C] regexp" |
11fba907c0af
add Translater(object), that can translate C/CbC source code
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
11 psr = OptionParser(usage=myusage) |
11fba907c0af
add Translater(object), that can translate C/CbC source code
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
12 psr.add_option("-C", action="store_true", dest="emitC", default=False, help="emit C-source") |
11fba907c0af
add Translater(object), that can translate C/CbC source code
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
13 psr.add_option("--from-dfa", action="store_true", dest="dfa", default=True, help="translate from DFA") |
11fba907c0af
add Translater(object), that can translate C/CbC source code
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
14 psr.add_option("--from-nfa", action="store_true", dest="nfa", default=False, help="translate from NFA") |
11fba907c0af
add Translater(object), that can translate C/CbC source code
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
15 psr.add_option("-o", action="store", type="string", dest="output", default=False, help="output file", metavar="FILE") |
11fba907c0af
add Translater(object), that can translate C/CbC source code
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
16 psr.add_option("-g", action="store_true", dest="debug", default=False, help="embed debug info") |
11fba907c0af
add Translater(object), that can translate C/CbC source code
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
17 psr.add_option("-D", action="store_true", dest="emitDot", default=False, help="emit Dot file") |
11fba907c0af
add Translater(object), that can translate C/CbC source code
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
18 (opts, args) = psr.parse_args(sys.argv) |
11fba907c0af
add Translater(object), that can translate C/CbC source code
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
19 if len(args) == 1: |
11fba907c0af
add Translater(object), that can translate C/CbC source code
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
20 psr.print_help() |
11fba907c0af
add Translater(object), that can translate C/CbC source code
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
21 exit() |
11fba907c0af
add Translater(object), that can translate C/CbC source code
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
22 reg = Regexp(args[1]) |
11fba907c0af
add Translater(object), that can translate C/CbC source code
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
23 if not opts.output: |
11fba907c0af
add Translater(object), that can translate C/CbC source code
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
24 output = sys.stdout |
11fba907c0af
add Translater(object), that can translate C/CbC source code
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
25 else: |
11fba907c0af
add Translater(object), that can translate C/CbC source code
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
26 output = open(opts.output,"w") |
11fba907c0af
add Translater(object), that can translate C/CbC source code
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
27 |
11fba907c0af
add Translater(object), that can translate C/CbC source code
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
28 if opts.nfa: |
11fba907c0af
add Translater(object), that can translate C/CbC source code
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
29 fa = reg.nfa |
11fba907c0af
add Translater(object), that can translate C/CbC source code
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
30 else: |
11fba907c0af
add Translater(object), that can translate C/CbC source code
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
31 fa = reg.dfa |
11fba907c0af
add Translater(object), that can translate C/CbC source code
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
32 |
11fba907c0af
add Translater(object), that can translate C/CbC source code
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
33 if opts.emitDot: |
11fba907c0af
add Translater(object), that can translate C/CbC source code
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
34 r.emitDot() |
11fba907c0af
add Translater(object), that can translate C/CbC source code
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
35 elif opts.emitC: |
11fba907c0af
add Translater(object), that can translate C/CbC source code
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
36 translator = CTranslator(reg.regexp, CallGraph(fa)) |
11fba907c0af
add Translater(object), that can translate C/CbC source code
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
37 translator.debug = opts.debug |
11fba907c0af
add Translater(object), that can translate C/CbC source code
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
38 else: |
11fba907c0af
add Translater(object), that can translate C/CbC source code
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
39 translator = CbCTranslator(reg.regexp, CallGraph(fa)) |
11fba907c0af
add Translater(object), that can translate C/CbC source code
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
40 translator.debug = opts.debug |
11fba907c0af
add Translater(object), that can translate C/CbC source code
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
41 |
11fba907c0af
add Translater(object), that can translate C/CbC source code
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
42 translator.translate(output) |
11fba907c0af
add Translater(object), that can translate C/CbC source code
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
43 |
11fba907c0af
add Translater(object), that can translate C/CbC source code
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
44 if __name__ == '__main__' : main(sys.argv) |