Changeset 18 for branches/Void/UCompilator.pas
- Timestamp:
- Nov 10, 2009, 3:38:32 PM (15 years ago)
- Location:
- branches/Void
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/Void
- Property svn:ignore
-
old new 11 11 Output.dpr 12 12 Output.exe 13 Output.asm
-
- Property svn:ignore
-
branches/Void/UCompilator.pas
r17 r18 6 6 7 7 uses 8 Classes, SysUtils, UOutputGenerator, UModel, UVoidParser ;8 Classes, SysUtils, UOutputGenerator, UModel, UVoidParser, fgl; 9 9 10 10 type … … 15 15 Text: string; 16 16 end; 17 18 TErrorMessageList = specialize TFPGObjectList<TErrorMessage>; 19 20 { TCompilator } 17 21 18 22 TCompilator = class … … 23 27 procedure ParseProgram; 24 28 procedure ParseVariableDefinition; 29 procedure ParseTypeDefinition; 30 procedure ParseExpression; 25 31 public 26 ErrorMessages: T List;32 ErrorMessages: TErrorMessageList; 27 33 Model: TModel; 28 34 SourceCode: TStream; … … 43 49 Terminate: Boolean; 44 50 begin 45 with TErrorMessage(ErrorMessages[ErrorMessages.Add(TErrorMessage.Create)])do begin51 with ErrorMessages.Add do begin 46 52 CodePosition := Parser.TokenStartPosition; 47 53 Text := AText; … … 72 78 if Parser.TokenValue = 'var' then begin 73 79 ParseVariableDefinition; 80 end else 81 if Parser.TokenValue = 'type' then begin 82 ParseTypeDefinition; 74 83 end else 75 84 if Parser.TokenValue = 'begin' then begin … … 128 137 end; 129 138 139 procedure TCompilator.ParseTypeDefinition; 140 begin 141 142 end; 143 144 procedure TCompilator.ParseExpression; 145 begin 146 147 end; 148 130 149 procedure TCompilator.Compile; 131 150 var … … 162 181 Command := FindProcedureByName(CommandName); 163 182 if Assigned(Command) then begin 164 with TCommand(Commands[Commands.Add(TCommand.Create)])do begin183 with Commands[Commands.Add(TCommand.Create)] do begin 165 184 Name := CommandName; 166 185 if Command.Parameters.Count > 0 then begin … … 170 189 for P := 0 to Command.Parameters.Count - 1 do begin 171 190 if (Parser.TokenType = ttString) then 172 with TVariableValue(Parameters[Parameters.Add(TVariableValue.Create)])do begin191 with Parameters[Parameters.Add(TVariableValue.Create)] do begin 173 192 ValueType := vtString; 174 193 StringConstant := Parser.TokenValue; 175 194 end else 176 195 if (Parser.TokenType = ttIdentifier) then 177 with TVariableValue(Parameters[Parameters.Add(TVariableValue.Create)])do begin196 with Parameters[Parameters.Add(TVariableValue.Create)] do begin 178 197 ValueType := vtVariable; 179 198 SourceVariable := FindVariableByName(Parser.TokenValue); … … 210 229 Variable := FindVariableByName(CommandName); 211 230 if Assigned(Variable) then 212 with TCommand(Commands[Commands.Add(TCommand.Create)])do begin231 with Commands[Commands.Add(TCommand.Create)] do begin 213 232 Name := 'Assignment'; 214 with TVariableValue(Parameters[Parameters.Add(TVariableValue.Create)])do begin233 with Parameters[Parameters.Add(TVariableValue.Create)] do begin 215 234 ValueType := vtVariable; 216 235 Variable := Variable; 217 236 end; 218 with TVariableValue(Parameters[Parameters.Add(TVariableValue.Create)])do begin237 with Parameters[Parameters.Add(TVariableValue.Create)] do begin 219 238 ValueType := vtVariable; 220 239 VariableDef := SourceVariable; … … 223 242 end; 224 243 end else if Parser.TokenType = ttString then begin 225 with TCommand(Commands[Commands.Add(TCommand.Create)])do begin244 with Commands[Commands.Add(TCommand.Create)] do begin 226 245 Name := 'Assignment'; 227 with TVariableValue(Parameters[Parameters.Add(TVariableValue.Create)])do begin246 with Parameters[Parameters.Add(TVariableValue.Create)] do begin 228 247 ValueType := vtVariable; 229 248 VariableDef := Variable; 230 249 end; 231 with TVariableValue(Parameters[Parameters.Add(TVariableValue.Create)])do begin250 with Parameters[Parameters.Add(TVariableValue.Create)] do begin 232 251 ValueType := vtString; 233 252 StringConstant := Parser.TokenValue; … … 235 254 end; 236 255 end else if Parser.TokenType = ttNumber then begin 237 with TCommand(Commands[Commands.Add(TCommand.Create)])do begin256 with Commands[Commands.Add(TCommand.Create)] do begin 238 257 Name := 'Assignment'; 239 with TVariableValue(Parameters[Parameters.Add(TVariableValue.Create)])do begin258 with Parameters[Parameters.Add(TVariableValue.Create)] do begin 240 259 ValueType := vtVariable; 241 260 VariableDef := Variable; 242 261 end; 243 with TVariableValue(Parameters[Parameters.Add(TVariableValue.Create)])do begin262 with Parameters[Parameters.Add(TVariableValue.Create)] do begin 244 263 ValueType := vtNumber; 245 264 NumberConstant := StrToInt(Parser.TokenValue); … … 263 282 constructor TCompilator.Create; 264 283 begin 265 ErrorMessages := T List.Create;284 ErrorMessages := TErrorMessageList.Create; 266 285 SourceCode := TMemoryStream.Create; 267 286 Model := TModel.Create; … … 270 289 271 290 destructor TCompilator.Destroy; 272 var 273 I: Integer; 274 begin 275 for I := 0 to ErrorMessages.Count - 1 do 276 TErrorMessage(ErrorMessages[I]).Destroy; 291 begin 277 292 ErrorMessages.Destroy; 278 293 SourceCode.Destroy;
Note:
See TracChangeset
for help on using the changeset viewer.