annotate src/converter.py @ 20:de33e445fcc7

add contact & description to Repository.
author Ryoma SHINYA <shinya@firefly.cr.ie.u-ryukyu.ac.jp>
date Mon, 05 Jul 2010 18:42:11 +0900
parents d40b248a526b
children a24acddedf89
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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
18
ec36e784df2e add LLVMTranslator(Translator) (and remove reg2llvm.py), add --LLVM option to converter.py.
Ryoma SHINYA <shinya@firefly.cr.ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
7 from dotTranslator import DotTranslator
ec36e784df2e add LLVMTranslator(Translator) (and remove reg2llvm.py), add --LLVM option to converter.py.
Ryoma SHINYA <shinya@firefly.cr.ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
8 from llvm_translator import LLVMTranslator
5
11fba907c0af add Translater(object), that can translate C/CbC source code
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
9 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
10
11fba907c0af add Translater(object), that can translate C/CbC source code
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
11 def main(argv):
11fba907c0af add Translater(object), that can translate C/CbC source code
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
12 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
13 psr = OptionParser(usage=myusage)
18
ec36e784df2e add LLVMTranslator(Translator) (and remove reg2llvm.py), add --LLVM option to converter.py.
Ryoma SHINYA <shinya@firefly.cr.ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
14 psr.add_option("--CbC", action="store_true", dest="emit_cbc", default=False, help="emit CbC-source")
ec36e784df2e add LLVMTranslator(Translator) (and remove reg2llvm.py), add --LLVM option to converter.py.
Ryoma SHINYA <shinya@firefly.cr.ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
15 psr.add_option("--LLVM", action="store_true", dest="emit_llvm", default=False, help="emit LLVM-source")
ec36e784df2e add LLVMTranslator(Translator) (and remove reg2llvm.py), add --LLVM option to converter.py.
Ryoma SHINYA <shinya@firefly.cr.ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
16 psr.add_option("--Dot", action="store_true", dest="emit_dot", default=False, help="emit Dot-source")
5
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("--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
18 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
19 psr.add_option("-o", action="store", type="string", dest="output", default=False, help="output file", metavar="FILE")
18
ec36e784df2e add LLVMTranslator(Translator) (and remove reg2llvm.py), add --LLVM option to converter.py.
Ryoma SHINYA <shinya@firefly.cr.ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
20 psr.add_option("-O", action="store", type="string", dest="optimize", default=False, help="do optimization (only in llvm).", metavar="FILE")
ec36e784df2e add LLVMTranslator(Translator) (and remove reg2llvm.py), add --LLVM option to converter.py.
Ryoma SHINYA <shinya@firefly.cr.ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
21 psr.add_option("-L", action="store_true", dest="label", default=False, help="implement with label&goto. (only in llvm).")
5
11fba907c0af add Translater(object), that can translate C/CbC source code
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
22 psr.add_option("-g", action="store_true", dest="debug", default=False, help="embed debug info")
19
d40b248a526b add star/union/concat rule's graph (graph/*.png).
Ryoma SHINYA <shinya@firefly.cr.ie.u-ryukyu.ac.jp>
parents: 18
diff changeset
23 psr.add_option("-D", action="store_true", dest="emit_dot", default=False, help="emit Dot file")
5
11fba907c0af add Translater(object), that can translate C/CbC source code
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
24 (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
25 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
26 psr.print_help()
11fba907c0af add Translater(object), that can translate C/CbC source code
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
27 exit()
11fba907c0af add Translater(object), that can translate C/CbC source code
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
28 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
29 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
30 output = sys.stdout
11fba907c0af add Translater(object), that can translate C/CbC source code
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
31 else:
11fba907c0af add Translater(object), that can translate C/CbC source code
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
32 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
33
11fba907c0af add Translater(object), that can translate C/CbC source code
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
34 if opts.nfa:
11fba907c0af add Translater(object), that can translate C/CbC source code
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
35 fa = reg.nfa
11fba907c0af add Translater(object), that can translate C/CbC source code
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
36 else:
11fba907c0af add Translater(object), that can translate C/CbC source code
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
37 fa = reg.dfa
11fba907c0af add Translater(object), that can translate C/CbC source code
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
38
18
ec36e784df2e add LLVMTranslator(Translator) (and remove reg2llvm.py), add --LLVM option to converter.py.
Ryoma SHINYA <shinya@firefly.cr.ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
39 if opts.emit_dot:
ec36e784df2e add LLVMTranslator(Translator) (and remove reg2llvm.py), add --LLVM option to converter.py.
Ryoma SHINYA <shinya@firefly.cr.ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
40 translator = DotTranslator(reg.regexp, CallGraph(fa))
ec36e784df2e add LLVMTranslator(Translator) (and remove reg2llvm.py), add --LLVM option to converter.py.
Ryoma SHINYA <shinya@firefly.cr.ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
41 translator.debug = opts.debug
ec36e784df2e add LLVMTranslator(Translator) (and remove reg2llvm.py), add --LLVM option to converter.py.
Ryoma SHINYA <shinya@firefly.cr.ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
42 elif opts.emit_llvm:
ec36e784df2e add LLVMTranslator(Translator) (and remove reg2llvm.py), add --LLVM option to converter.py.
Ryoma SHINYA <shinya@firefly.cr.ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
43 translator = LLVMTranslator(reg.regexp, CallGraph(fa))
ec36e784df2e add LLVMTranslator(Translator) (and remove reg2llvm.py), add --LLVM option to converter.py.
Ryoma SHINYA <shinya@firefly.cr.ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
44 translator.debug = opts.debug
ec36e784df2e add LLVMTranslator(Translator) (and remove reg2llvm.py), add --LLVM option to converter.py.
Ryoma SHINYA <shinya@firefly.cr.ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
45 translator.optimize = opts.optimize
ec36e784df2e add LLVMTranslator(Translator) (and remove reg2llvm.py), add --LLVM option to converter.py.
Ryoma SHINYA <shinya@firefly.cr.ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
46 translator.impl_label = opts.label
ec36e784df2e add LLVMTranslator(Translator) (and remove reg2llvm.py), add --LLVM option to converter.py.
Ryoma SHINYA <shinya@firefly.cr.ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
47 elif opts.emit_cbc:
ec36e784df2e add LLVMTranslator(Translator) (and remove reg2llvm.py), add --LLVM option to converter.py.
Ryoma SHINYA <shinya@firefly.cr.ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
48 translator = CbCTranslator(reg.regexp, CallGraph(fa))
5
11fba907c0af add Translater(object), that can translate C/CbC source code
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
49 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
50 else:
18
ec36e784df2e add LLVMTranslator(Translator) (and remove reg2llvm.py), add --LLVM option to converter.py.
Ryoma SHINYA <shinya@firefly.cr.ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
51 translator = CTranslator(reg.regexp, CallGraph(fa))
5
11fba907c0af add Translater(object), that can translate C/CbC source code
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
52 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
53
11fba907c0af add Translater(object), that can translate C/CbC source code
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
54 translator.translate(output)
11fba907c0af add Translater(object), that can translate C/CbC source code
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
55
11fba907c0af add Translater(object), that can translate C/CbC source code
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
diff changeset
56 if __name__ == '__main__' : main(sys.argv)