Changeset 14 for branches/Void/UOutputGenerator.pas
- Timestamp:
- Nov 10, 2009, 8:19:41 AM (15 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/Void/UOutputGenerator.pas
r13 r14 21 21 end; 22 22 23 { TPascalGenerator } 24 23 25 TPascalGenerator = class(TOutputGenerator) 26 private 27 function GenerateVariableValue(Value: TVariableValue): string; 28 public 24 29 procedure Generate(Model: TModel); override; 25 30 procedure GenerateModule(Module: TModule); 26 31 end; 32 33 { TCGenerator } 27 34 28 35 TCGenerator = class(TOutputGenerator) 29 36 private 30 37 function ConvertType(Name: string): string; 38 function GenerateVariableValue(Value: TVariableValue): string; 31 39 public 32 40 procedure Generate(Model: TModel); override; … … 60 68 61 69 { TPascalGenerator } 70 71 function TPascalGenerator.GenerateVariableValue(Value: TVariableValue): string; 72 begin 73 case Value.ValueType of 74 vtVariable: if Assigned(Value.VariableDef) then Result := Value.VariableDef.Name 75 else Result := ''; 76 vtFloat: Result := FloatToStr(Value.FloatConstant); 77 vtNumber: Result := IntToStr(Value.NumberConstant); 78 vtString: Result := '''' + Value.StringConstant + ''''; 79 vtChar: Result := '''' + Value.CharConstant + ''''; 80 end; 81 end; 62 82 63 83 procedure TPascalGenerator.Generate(Model: TModel); … … 92 112 for I := 0 to BeginEnd.Commands.Count - 1 do 93 113 with TCommand(BeginEnd.Commands[I]) do begin 94 if Name = 'Assignment' then Output.Add(Indent + Parameters[0] + ' := ' + Parameters[1] + ';') 114 if Name = 'Assignment' then Output.Add(Indent + 115 TVariableValue(Parameters[0]).VariableDef.Name + ' := ' + 116 GenerateVariableValue(TVariableValue(Parameters[1])) + ';') 95 117 else begin 96 118 Row := Name; … … 98 120 ParameterText := ''; 99 121 for P := 0 to Parameters.Count - 1 do 100 ParameterText := ParameterText + '''' + Parameters[P] + ''', ';122 ParameterText := ParameterText + GenerateVariableValue(Parameters[P]) + ', '; 101 123 Row := Row + '(' + Copy(ParameterText, 1, Length(ParameterText) - 2) + ')'; 102 124 end; … … 124 146 end; 125 147 148 function TCGenerator.GenerateVariableValue(Value: TVariableValue): string; 149 begin 150 case Value.ValueType of 151 vtVariable: if Assigned(Value.VariableDef) then Result := Value.VariableDef.Name 152 else Result := ''; 153 vtFloat: Result := FloatToStr(Value.FloatConstant); 154 vtNumber: Result := IntToStr(Value.NumberConstant); 155 vtString: Result := '"' + Value.StringConstant + '"'; 156 vtChar: Result := '''' + Value.CharConstant + ''''; 157 end; 158 end; 159 126 160 procedure TCGenerator.Generate(Model: TModel); 127 161 begin … … 145 179 Inc(IndentCount); 146 180 147 // variable section181 // Variable section 148 182 for I := 0 to Variables.Count - 1 do 149 183 with TVariable(Variables[I]) do 150 Output.Add(Indent + ' ' +ConvertType(VarType.Name) + ' ' + Name + ';');184 Output.Add(Indent + ConvertType(VarType.Name) + ' ' + Name + ';'); 151 185 if Variables.Count > 0 then Output.Add(''); 152 186 … … 154 188 for I := 0 to BeginEnd.Commands.Count - 1 do 155 189 with TCommand(BeginEnd.Commands[I]) do begin 156 if Name = 'Assignment' then Output.Add(Indent + Parameters[0] + ' = ' + Parameters[1] + ';') 190 if Name = 'Assignment' then Output.Add(Indent + 191 TVariableValue(Parameters[0]).VariableDef.Name + ' = ' + 192 GenerateVariableValue(TVariableValue(Parameters[1])) + ';') 157 193 else begin 158 194 if Name = 'WriteLn' then Row := 'printf' … … 163 199 ParameterText := ''; 164 200 for P := 0 to Parameters.Count - 1 do 165 ParameterText := ParameterText + '''' + Parameters[P] + ''', ';201 ParameterText := ParameterText + GenerateVariableValue(Parameters[P]) + ', '; 166 202 Row := Row + Copy(ParameterText, 1, Length(ParameterText) - 2); 167 203 end;
Note:
See TracChangeset
for help on using the changeset viewer.