Changeset 33810
- Timestamp:
- 06/06/09 01:33:39 (4 years ago)
- Files:
-
- 1 modified
-
lang/python/retrograde/cpp_en_decoder.py (modified) (12 diffs)
Legend:
- Unmodified
- Added
- Removed
-
lang/python/retrograde/cpp_en_decoder.py
r33809 r33810 9 9 name = self.node_name + suffix 10 10 vname = self.var_name + suffix 11 return ["%s = %s " % (name, vname)]11 return ["%s = %s;" % (name, vname)] 12 12 13 13 @staticmethod … … 16 16 name = self.node_name + suffix 17 17 vname = self.var_name + suffix 18 return ["%s = %s " % (vname, name)]18 return ["%s = %s;" % (vname, name)] 19 19 20 20 class Take(object): … … 24 24 name = self.node_name + suffix 25 25 vname = self.var_name + suffix 26 result = ["%s = %s " % (name, vname)]26 result = ["%s = %s;" % (name, vname)] 27 27 for c in context[self.res.name]: 28 result.append("if %s < %s: %s -= 1" % (c, vname, name))28 result.append("if(%s < %s) %s--;" % (c, vname, name)) 29 29 context[self.res.name].append(vname) 30 30 return result … … 35 35 name = self.node_name + suffix 36 36 vname = self.var_name + suffix 37 result = ["%s = %s " % (vname, name)]37 result = ["%s = %s;" % (vname, name)] 38 38 for c in context[self.res.name]: 39 result.append("if %s <= %s: %s += 1" % (c, vname, vname))39 result.append("if(%s <= %s) %s++;" % (c, vname, vname)) 40 40 context[self.res.name].append(vname) 41 41 return result … … 50 50 c1 = deepcopy(context) 51 51 c1["suffix"] = suffix + "_1" 52 result = self.rule.get_ python_encoder(c0) + self.rule.get_python_encoder(c1)52 result = self.rule.get_cpp_encoder(c0) + self.rule.get_cpp_encoder(c1) 53 53 name = self.get_node_name(context) 54 54 rname0 = self.rule.get_node_name(c0) 55 55 rname1 = self.rule.get_node_name(c1) 56 56 57 result += ["if %(rname0)s > %(rname1)s: " 58 "%(rname0)s, %(rname1)s = %(rname1)s, %(rname0)s" 57 result += ["if(%(rname0)s > %(rname1)s) swap(%(rname0)s, %(rname1));" 59 58 % locals()] 60 59 … … 62 61 if self.is_repeatable(): 63 62 result += [ 64 "%(ret)s = %(n)d * %(x)s - %(x)s * (%(x)s - 1) / 2 + %(y)s - %(x)s "63 "%(ret)s = %(n)d * %(x)s - %(x)s * (%(x)s - 1) / 2 + %(y)s - %(x)s;" 65 64 % dict(ret=name, x=rname0, y=rname1, n=n)] 66 65 else: 67 66 result += [ 68 "%(ret)s = %(n)d * %(x)s - %(x)s * (%(x)s + 1) / 2 + %(y)s - %(x)s "67 "%(ret)s = %(n)d * %(x)s - %(x)s * (%(x)s + 1) / 2 + %(y)s - %(x)s;" 69 68 % dict(ret=name, x=rname0, y=rname1, n=n)] 70 69 … … 87 86 if self.is_repeatable(): 88 87 result += [ 89 "n = %d" % n, 90 "%s = 0" % rname0, 91 "while %s >= n:" % name, 92 " %s -= n" % name, 93 " n -= 1", 94 " %s += 1" % rname0, 95 "%s = %s + %s" % (rname1, name, rname0),] 88 "n = %d;" % n, 89 "%s = 0;" % rname0, 90 "while(%s >= n){" % name, 91 " %s -= n;" % name, 92 " n--;", 93 " %s++;" % rname0, 94 "}", 95 "%s = %s + %s;" % (rname1, name, rname0),] 96 96 else: 97 97 result += [ 98 "n = %d" % (n - 1), 99 "%s = 0" % rname0, 100 "while %s >= n:" % name, 101 " %s -= n" % name, 102 " n -= 1", 103 " %s += 1" % rname0, 104 "%s = %s + %s" % (rname1, name, rname0),] 105 106 result += self.rule.get_python_decoder(c0) 107 result += self.rule.get_python_decoder(c1) 98 "n = %d;" % (n - 1), 99 "%s = 0;" % rname0, 100 "while(%s >= n){" % name, 101 " %s -= n;" % name, 102 " n--;", 103 " %s++;" % rname0, 104 "}", 105 "%s = %s + %s;" % (rname1, name, rname0),] 106 107 result += self.rule.get_cpp_decoder(c0) 108 result += self.rule.get_cpp_decoder(c1) 108 109 return result 109 110 … … 119 120 if self.unorder_info: 120 121 orig_flag = self.unorder_info 121 result += ["%s = not(%s_0 ^ %s_1)" % (vname, orig_flag, orig_flag)]122 123 result += ["if %s:" % vname]124 result += utils.indent(self.r2.get_ python_encoder(deepcopy(context)))125 result += [" %s = %s " % (name, self.r2.get_node_name(context))]126 result += [" else:"]127 result += utils.indent(self.r1.get_ python_encoder(deepcopy(context)))128 result += [" %s = %s + %s " % (122 result += ["%s = !(%s_0 ^ %s_1);" % (vname, orig_flag, orig_flag)] 123 124 result += ["if(%s){" % vname] 125 result += utils.indent(self.r2.get_cpp_encoder(deepcopy(context))) 126 result += [" %s = %s;" % (name, self.r2.get_node_name(context))] 127 result += ["}else{"] 128 result += utils.indent(self.r1.get_cpp_encoder(deepcopy(context))) 129 result += [" %s = %s + %s;" % ( 129 130 name, self.r1.get_node_name(context), r2size)] 130 131 result += ["}"] 131 132 return result 132 133 … … 140 141 if self.unorder_info: 141 142 orig_flag = self.unorder_info 142 result += ["%s_0 = False" % (orig_flag,)]143 144 result += ["if %s < %d:" % (name, n)]145 result += [" %s = True" % (vname, )]146 result += [" %s = %s " % (self.r2.get_node_name(context), name)]147 result += utils.indent(self.r2.get_ python_decoder(deepcopy(context)))148 result += [" else:"]149 result += [" %s = False" % (vname, )]150 result += [" %s = %s - %d " % (143 result += ["%s_0 = false;" % (orig_flag,)] 144 145 result += ["if(%s < %d){" % (name, n)] 146 result += [" %s = true;" % (vname, )] 147 result += [" %s = %s;" % (self.r2.get_node_name(context), name)] 148 result += utils.indent(self.r2.get_cpp_decoder(deepcopy(context))) 149 result += ["}else{"] 150 result += [" %s = false;" % (vname, )] 151 result += [" %s = %s - %d;" % ( 151 152 self.r1.get_node_name(context), name, n)] 152 result += utils.indent(self.r1.get_python_decoder(deepcopy(context))) 153 result += utils.indent(self.r1.get_cpp_decoder(deepcopy(context))) 154 result += ["}"] 153 155 if self.unorder_info: 154 156 orig_flag = self.unorder_info 155 result += ["%s_1 = not(%s ^ %s_0)" % (orig_flag, vname, orig_flag)]157 result += ["%s_1 = !(%s ^ %s_0);" % (orig_flag, vname, orig_flag)] 156 158 157 159 return result … … 169 171 oname = self.unordered_info 170 172 # 正規化のコードを入れる 171 result += ["if %s_1:" % oname] 172 for typ, v, com in self.r1.vars: 173 result += utils.indent(["%s = %s_0" % (v, v)]) 174 for typ, v, com in self.r2.vars: 175 result += utils.indent(["%s = %s_1" % (v, v)]) 176 result += ["else:"] 177 for typ, v, com in self.r1.vars: 178 result += utils.indent(["%s = %s_1" % (v, v)]) 179 for typ, v, com in self.r2.vars: 180 result += utils.indent(["%s = %s_0" % (v, v)]) 181 182 result += self.r1.get_python_encoder(context) 183 result += self.r2.get_python_encoder(context) 184 result += ["%s = %s * %s + %s" % ( 173 result += ["if(%s_1){" % oname] 174 for typ, v, com in self.r1.vars: 175 result += utils.indent(["%s = %s_0;" % (v, v)]) 176 for typ, v, com in self.r2.vars: 177 result += utils.indent(["%s = %s_1;" % (v, v)]) 178 result += ["}else{"] 179 for typ, v, com in self.r1.vars: 180 result += utils.indent(["%s = %s_1;" % (v, v)]) 181 for typ, v, com in self.r2.vars: 182 result += utils.indent(["%s = %s_0;" % (v, v)]) 183 result += ["}"] 184 185 result += self.r1.get_cpp_encoder(context) 186 result += self.r2.get_cpp_encoder(context) 187 result += ["%s = %s * %s + %s;" % ( 185 188 self.get_node_name(context), r1name, 186 189 self.r2.size(copy), r2name)] … … 192 195 name = self.get_node_name(context) 193 196 result = [ 194 "%s = %s / %s " % (197 "%s = %s / %s;" % ( 195 198 self.r1.get_node_name(context), name, n), 196 "%s = %s %% %s " % (199 "%s = %s %% %s;" % ( 197 200 self.r2.get_node_name(context), name, n)] 198 result += self.r1.get_ python_decoder(context)199 result += self.r2.get_ python_decoder(context)201 result += self.r1.get_cpp_decoder(context) 202 result += self.r2.get_cpp_decoder(context) 200 203 # 正規化戻しのコードを入れる(foo_? = foo) 201 204 if self.unordered_info: … … 203 206 r1vname = self.r1.var_name 204 207 r2vname = self.r2.var_name 205 result += ["if %s_0:" % oname] 206 for typ, v, com in self.r1.vars: 207 result += utils.indent(["%s_1 = %s" % (v, v)]) 208 for typ, v, com in self.r2.vars: 209 result += utils.indent(["%s_0 = %s" % (v, v)]) 210 result += ["else:"] 211 for typ, v, com in self.r1.vars: 212 result += utils.indent(["%s_0 = %s" % (v, v)]) 213 for typ, v, com in self.r2.vars: 214 result += utils.indent(["%s_1 = %s" % (v, v)]) 215 216 return result 208 result += ["if(%s_0){" % oname] 209 for typ, v, com in self.r1.vars: 210 result += utils.indent(["%s_1 = %s;" % (v, v)]) 211 for typ, v, com in self.r2.vars: 212 result += utils.indent(["%s_0 = %s;" % (v, v)]) 213 result += ["}else{"] 214 for typ, v, com in self.r1.vars: 215 result += utils.indent(["%s_0 = %s;" % (v, v)]) 216 for typ, v, com in self.r2.vars: 217 result += utils.indent(["%s_1 = %s;" % (v, v)]) 218 219 result += "}"; 220 return result
![(please configure the [header_logo] section in trac.ini)](/share/chrome/site/your_project_logo.png)