Changeset 20885
- Timestamp:
- 10/07/08 12:51:33 (6 weeks ago)
- Files:
-
- 1 modified
Legend:
- Unmodified
- Added
- Removed
-
lang/python/dfareg/branches/codezine200809/dfareg/nfabuilder.py
r20867 r20885 2 2 # -*- coding: utf-8 -*- 3 3 import nfa 4 import copy 4 5 5 6 class NFAFragment(object): … … 31 32 def __init__(self, context): 32 33 self.context = context 33 self.accepts = set()34 34 self.map = dict() 35 self.accepts = None # should be set later 35 36 self.start = None # should be set later 36 37 … … 48 49 49 50 new_frag = self.context.new_fragment() 50 new_frag.accepts = self.accepts.union(frag.accepts) 51 51 52 new_frag.map = dict() 52 53 for k, v in self.map.iteritems(): 53 new_frag.map[k] = v54 new_frag.map[k] = copy.copy(v) 54 55 for k, v in frag.map.iteritems(): 55 new_frag.map[k] = v56 new_frag.map[k] = copy.copy(v) 56 57 58 return new_frag 59 60 def new_skelton(self): 61 # コピーして返す 62 new_frag = self.context.new_fragment() 63 new_frag.map = copy.deepcopy(self.map) 57 64 return new_frag 58 65 … … 93 100 frag.connect(a, "", frag1.start) 94 101 frag.connect(a, "", frag2.start) 102 95 103 frag.start = a 104 frag.accepts = frag1.accepts | frag2.accepts 96 105 97 106 return frag … … 110 119 for state in frag1.accepts: 111 120 frag.connect(state, "", frag2.start) 112 frag.accepts.remove(state)113 121 114 frag.start = frag1.start 122 frag.start = frag1.start 123 frag.accepts = frag2.accepts 115 124 116 125 return frag … … 121 130 122 131 def assemble(self, context): 123 frag = self.operand.assemble(context) 124 for state in frag.accepts: 125 frag.connect(state, "", frag.start) 132 frag_orig = self.operand.assemble(context) 133 frag = frag_orig.new_skelton() 134 135 for state in frag_orig.accepts: 136 frag.connect(state, "", frag_orig.start) 126 137 127 138 a = frag.new_state() 128 frag.accepts.add(a) 129 frag.connect(a, "", frag.start) 139 frag.connect(a, "", frag_orig.start) 130 140 131 141 frag.start = a 142 frag.accepts = frag_orig.accepts | set([a]) 132 143 133 144 return frag … … 142 153 b = frag.new_state() 143 154 frag.connect(a, self.char, b) 144 frag.accepts.add(b) 155 145 156 frag.start = a 157 frag.accepts = set([b]) 158 146 159 return frag 147 160
![(please configure the [header_logo] section in trac.ini)](/share/chrome/site/your_project_logo.png)