Ignore:
Timestamp:
Nov 10, 2009, 3:38:32 PM (15 years ago)
Author:
george
Message:
  • Upraveno: Nasazení generického TFPGObjectList pro použité seznamy typu TList.
  • Přidáno: Kostra tříd pro gramatickou analýzu.
Location:
branches/Void
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • branches/Void

    • Property svn:ignore
      •  

        old new  
        1111Output.dpr
        1212Output.exe
         13Output.asm
  • branches/Void/UCompilator.pas

    r17 r18  
    66
    77uses
    8   Classes, SysUtils, UOutputGenerator, UModel, UVoidParser;
     8  Classes, SysUtils, UOutputGenerator, UModel, UVoidParser, fgl;
    99
    1010type
     
    1515    Text: string;
    1616  end;
     17
     18  TErrorMessageList = specialize TFPGObjectList<TErrorMessage>;
     19
     20  { TCompilator }
    1721
    1822  TCompilator = class
     
    2327    procedure ParseProgram;
    2428    procedure ParseVariableDefinition;
     29    procedure ParseTypeDefinition;
     30    procedure ParseExpression;
    2531  public
    26     ErrorMessages: TList;
     32    ErrorMessages: TErrorMessageList;
    2733    Model: TModel;
    2834    SourceCode: TStream;
     
    4349  Terminate: Boolean;
    4450begin
    45   with TErrorMessage(ErrorMessages[ErrorMessages.Add(TErrorMessage.Create)]) do begin
     51  with ErrorMessages.Add do begin
    4652    CodePosition := Parser.TokenStartPosition;
    4753    Text := AText;
     
    7278      if Parser.TokenValue = 'var' then begin
    7379        ParseVariableDefinition;
     80      end else
     81      if Parser.TokenValue = 'type' then begin
     82        ParseTypeDefinition;
    7483      end else
    7584      if Parser.TokenValue = 'begin' then begin
     
    128137end;
    129138
     139procedure TCompilator.ParseTypeDefinition;
     140begin
     141
     142end;
     143
     144procedure TCompilator.ParseExpression;
     145begin
     146
     147end;
     148
    130149procedure TCompilator.Compile;
    131150var
     
    162181        Command := FindProcedureByName(CommandName);
    163182        if Assigned(Command) then begin
    164           with TCommand(Commands[Commands.Add(TCommand.Create)]) do begin
     183          with Commands[Commands.Add(TCommand.Create)] do begin
    165184            Name := CommandName;
    166185            if Command.Parameters.Count > 0 then begin
     
    170189                for P := 0 to Command.Parameters.Count - 1 do begin
    171190                  if (Parser.TokenType = ttString) then
    172                   with TVariableValue(Parameters[Parameters.Add(TVariableValue.Create)]) do begin
     191                  with Parameters[Parameters.Add(TVariableValue.Create)] do begin
    173192                    ValueType := vtString;
    174193                    StringConstant := Parser.TokenValue;
    175194                  end else
    176195                  if (Parser.TokenType = ttIdentifier) then
    177                   with TVariableValue(Parameters[Parameters.Add(TVariableValue.Create)]) do begin
     196                  with Parameters[Parameters.Add(TVariableValue.Create)] do begin
    178197                    ValueType := vtVariable;
    179198                    SourceVariable := FindVariableByName(Parser.TokenValue);
     
    210229                Variable := FindVariableByName(CommandName);
    211230                if Assigned(Variable) then
    212                 with TCommand(Commands[Commands.Add(TCommand.Create)]) do begin
     231                with Commands[Commands.Add(TCommand.Create)] do begin
    213232                  Name := 'Assignment';
    214                   with TVariableValue(Parameters[Parameters.Add(TVariableValue.Create)]) do begin
     233                  with Parameters[Parameters.Add(TVariableValue.Create)] do begin
    215234                    ValueType := vtVariable;
    216235                    Variable := Variable;
    217236                  end;
    218                   with TVariableValue(Parameters[Parameters.Add(TVariableValue.Create)]) do begin
     237                  with Parameters[Parameters.Add(TVariableValue.Create)] do begin
    219238                    ValueType := vtVariable;
    220239                    VariableDef := SourceVariable;
     
    223242              end;
    224243            end else if Parser.TokenType = ttString then begin
    225               with TCommand(Commands[Commands.Add(TCommand.Create)]) do begin
     244              with Commands[Commands.Add(TCommand.Create)] do begin
    226245                Name := 'Assignment';
    227                 with TVariableValue(Parameters[Parameters.Add(TVariableValue.Create)]) do begin
     246                with Parameters[Parameters.Add(TVariableValue.Create)] do begin
    228247                  ValueType := vtVariable;
    229248                  VariableDef := Variable;
    230249                end;
    231                 with TVariableValue(Parameters[Parameters.Add(TVariableValue.Create)]) do begin
     250                with Parameters[Parameters.Add(TVariableValue.Create)] do begin
    232251                  ValueType := vtString;
    233252                  StringConstant := Parser.TokenValue;
     
    235254              end;
    236255            end else if Parser.TokenType = ttNumber then begin
    237               with TCommand(Commands[Commands.Add(TCommand.Create)]) do begin
     256              with Commands[Commands.Add(TCommand.Create)] do begin
    238257                Name := 'Assignment';
    239                 with TVariableValue(Parameters[Parameters.Add(TVariableValue.Create)]) do begin
     258                with Parameters[Parameters.Add(TVariableValue.Create)] do begin
    240259                  ValueType := vtVariable;
    241260                  VariableDef := Variable;
    242261                end;
    243                 with TVariableValue(Parameters[Parameters.Add(TVariableValue.Create)]) do begin
     262                with Parameters[Parameters.Add(TVariableValue.Create)] do begin
    244263                  ValueType := vtNumber;
    245264                  NumberConstant := StrToInt(Parser.TokenValue);
     
    263282constructor TCompilator.Create;
    264283begin
    265   ErrorMessages := TList.Create;
     284  ErrorMessages := TErrorMessageList.Create;
    266285  SourceCode := TMemoryStream.Create;
    267286  Model := TModel.Create;
     
    270289
    271290destructor TCompilator.Destroy;
    272 var
    273   I: Integer;
    274 begin
    275   for I := 0 to ErrorMessages.Count - 1 do
    276     TErrorMessage(ErrorMessages[I]).Destroy;
     291begin
    277292  ErrorMessages.Destroy;
    278293  SourceCode.Destroy;
Note: See TracChangeset for help on using the changeset viewer.