Changeset 14 for branches/Void/UCompilator.pas
- Timestamp:
- Nov 10, 2009, 8:19:41 AM (15 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/Void/UCompilator.pas
r13 r14 10 10 type 11 11 TOnErrorEvent = procedure (Text: string; var Terminate: Boolean; Position: TPoint) of object; 12 13 { TCompilator }14 12 15 13 TCompilator = class … … 135 133 Command: TProcedure; 136 134 Variable: TVariable; 135 SourceVariable: TVariable; 137 136 VariableName: string; 138 137 Value: string; 138 P: Integer; 139 139 begin 140 140 Parser.ParseNextToken; … … 151 151 Name := CommandName; 152 152 Parser.ParseNextToken; 153 if (Parser.TokenType = ttSymbol) and (Parser.TokenValue = '(') then begin 154 Parser.ParseNextToken; 155 if (Parser.TokenType <> ttString) then DoError('Expected string'); 156 Parameters.Add(Parser.TokenValue); 157 Parser.ParseNextToken; 158 if (Parser.TokenType <> ttSymbol) and (Parser.TokenValue = ')') then 159 DoError('Expected )'); 153 if Command.Parameters.Count > 0 then begin 154 if (Parser.TokenType = ttSymbol) and (Parser.TokenValue = '(') then begin 155 Parser.ParseNextToken; 156 for P := 0 to Command.Parameters.Count - 1 do begin 157 if (Parser.TokenType = ttString) then 158 with TVariableValue(Parameters[Parameters.Add(TVariableValue.Create)]) do begin 159 ValueType := vtString; 160 StringConstant := Parser.TokenValue; 161 end else 162 if (Parser.TokenType = ttIdentifier) then 163 with TVariableValue(Parameters[Parameters.Add(TVariableValue.Create)]) do begin 164 ValueType := vtVariable; 165 SourceVariable := FindVariableByName(Parser.TokenValue); 166 if Assigned(SourceVariable) then begin 167 VariableDef := SourceVariable; 168 end else DoError('Unknown identifier ' + Parser.TokenValue); 169 end else DoError('Unknown parameter ' + Parser.TokenValue); 170 if P <> Command.Parameters.Count - 1 then begin 171 Parser.ParseNextToken; 172 if (Parser.TokenType <> ttSymbol) and (Parser.TokenValue = ',') then 173 DoError('Expected ,'); 174 end; 175 Parser.ParseNextToken; 176 end; 177 if (Parser.TokenType <> ttSymbol) and (Parser.TokenValue = ')') then 178 DoError('Expected )'); 179 end else DoError('Expected ('); 160 180 end; 161 181 end; … … 173 193 Value := Parser.TokenValue; 174 194 if Parser.TokenType = ttIdentifier then begin 175 Variable := FindVariableByName(CommandName); 176 if Assigned(Variable) then 177 with TCommand(Commands[Commands.Add(TCommand.Create)]) do begin 178 Name := 'Assignment'; 179 Parameters.Add(CommandName); 180 Parameters.Add(Value); 181 end else DoError('Undefined variable ' + CommandName); 195 SourceVariable := FindVariableByName(Value); 196 if not Assigned(SourceVariable) then DoError('Undefined source variable ' + Value) 197 else begin 198 Variable := FindVariableByName(CommandName); 199 if Assigned(Variable) then 200 with TCommand(Commands[Commands.Add(TCommand.Create)]) do begin 201 Name := 'Assignment'; 202 with TVariableValue(Parameters[Parameters.Add(TVariableValue.Create)]) do begin 203 ValueType := vtVariable; 204 Variable := Variable; 205 end; 206 with TVariableValue(Parameters[Parameters.Add(TVariableValue.Create)]) do begin 207 ValueType := vtVariable; 208 VariableDef := SourceVariable; 209 end; 210 end; 211 end; 182 212 end else if Parser.TokenType = ttString then begin 183 213 with TCommand(Commands[Commands.Add(TCommand.Create)]) do begin 184 214 Name := 'Assignment'; 185 Parameters.Add(CommandName); 186 Parameters.Add(Value); 215 with TVariableValue(Parameters[Parameters.Add(TVariableValue.Create)]) do begin 216 ValueType := vtVariable; 217 VariableDef := Variable; 218 end; 219 with TVariableValue(Parameters[Parameters.Add(TVariableValue.Create)]) do begin 220 ValueType := vtString; 221 StringConstant := Parser.TokenValue; 222 end; 187 223 end; 188 224 end else DoError('Expected variable or string')
Note:
See TracChangeset
for help on using the changeset viewer.