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/UModel.pas

    r16 r18  
    66
    77uses
    8   Classes, SysUtils;
     8  Classes, SysUtils, fgl;
    99
    1010type
     
    1616  end;
    1717
     18  TTypeList = specialize TFPGObjectList<TType>;
     19
    1820  TVariable = class
    1921    Name: string;
    2022    VarType: TType;
    2123  end;
     24
     25  TVariableList = specialize TFPGObjectList<TVariable>;
    2226
    2327  TVariableValue = class
     
    3034  end;
    3135
     36  TVariableValueList = specialize TFPGObjectList<TVariableValue>;
     37
     38  TExpression = class
     39
     40  end;
     41
    3242  TCommand = class
    3343    Name: string;
    34     Parameters: TList;
    35     constructor Create;
    36     destructor Destroy; override;
    37   end;
     44    Parameters: TVariableValueList;
     45    constructor Create;
     46    destructor Destroy; override;
     47  end;
     48
     49  TCommandList = specialize TFPGObjectList<TCommand>;
    3850
    3951  TBeginEnd = class
    40     Commands: TList;
     52    Commands: TCommandList;
    4153    constructor Create;
    4254    destructor Destroy; override;
     
    4658  TProcedure = class
    4759    Name: string;
    48     Parameters: TList;
     60    Parameters: TVariableList;
    4961    BeginEnd: TBeginEnd;
    5062    constructor Create;
    5163    destructor Destroy; override;
    5264  end;
     65
     66  TProcedureList = specialize TFPGObjectList<TProcedure>;
    5367
    5468  TModuleType = (mtUnit, mtProgram);
     
    5872    Name: string;
    5973    ModuleType: TModuleType;
    60     Types: TList;
    61     Variables: TList;
    62     Procedures: TList;
     74    Types: TTypeList;
     75    Variables: TVariableList;
     76    Procedures: TProcedureList;
    6377    BeginEnd: TBeginEnd;
    6478    constructor Create;
     
    105119constructor TBeginEnd.Create;
    106120begin
    107   Commands := TList.Create;
     121  Commands := TCommandList.Create;
    108122end;
    109123
    110124destructor TBeginEnd.Destroy;
     125begin
     126  Commands.Destroy;
     127  inherited Destroy;
     128end;
     129
     130procedure TBeginEnd.Clear;
    111131var
    112132  I: Integer;
    113133begin
    114134  for I := 0 to Commands.Count - 1 do
    115     TCommand(Commands[I]).Destroy;
    116   Commands.Destroy;
    117   inherited Destroy;
    118 end;
    119 
    120 procedure TBeginEnd.Clear;
    121 var
    122   I: Integer;
    123 begin
    124   for I := 0 to Commands.Count - 1 do
    125     TCommand(Commands[I]).Destroy;
     135    Commands[I].Destroy;
    126136  Commands.Clear;
    127137end;
     
    131141constructor TCommand.Create;
    132142begin
    133   Parameters := TList.Create;
     143  Parameters := TVariableValueList.Create;
    134144end;
    135145
    136146destructor TCommand.Destroy;
    137 var
    138   I: Integer;
    139 begin
    140   for I := 0 to Parameters.Count - 1 do
    141     TVariableValue(Parameters[I]).Destroy;
     147begin
    142148  Parameters.Destroy;
    143149  inherited Destroy;
     
    147153begin
    148154  BeginEnd := TBeginEnd.Create;
    149   Parameters := TList.Create;
     155  Parameters := TVariableList.Create;
    150156end;
    151157
    152158destructor TProcedure.Destroy;
    153 var
    154   I: Integer;
    155 begin
    156   for I := 0 to Parameters.Count - 1 do
    157     TVariableValue(Parameters[I]).Destroy;
     159begin
    158160  Parameters.Destroy;
    159161  BeginEnd.Destroy;
     
    165167constructor TModule.Create;
    166168begin
    167   Types := TList.Create;
    168   Variables := TList.Create;
     169  Types := TTypeList.Create;
     170  Variables := TVariableList.Create;
    169171  BeginEnd := TBeginEnd.Create;
    170   Procedures := TList.Create;
     172  Procedures := TProcedureList.Create;
    171173end;
    172174
    173175destructor TModule.Destroy;
    174 var
    175   I: Integer;
    176 begin
    177   for I := 0 to Types.Count - 1 do
    178     TType(Types[I]).Destroy;
     176begin
    179177  Types.Destroy;
    180   for I := 0 to Variables.Count - 1 do
    181     TVariable(Variables[I]).Destroy;
    182178  Variables.Destroy;
    183   for I := 0 to Procedures.Count - 1 do
    184     TProcedure(Procedures[I]).Destroy;
    185179  Procedures.Destroy;
    186180  BeginEnd.Destroy;
     
    193187begin
    194188  I := 0;
    195   while (I < Variables.Count) and (LowerCase(TVariable(Variables[I]).Name) <> LowerCase(AName)) do
     189  while (I < Variables.Count) and (LowerCase(Variables[I].Name) <> LowerCase(AName)) do
    196190    Inc(I);
    197191  if I < Variables.Count then Result := Variables[I] else Result := nil;
     
    203197begin
    204198  I := 0;
    205   while (I < Procedures.Count) and (LowerCase(TProcedure(Procedures[I]).Name) <> LowerCase(AName)) do
     199  while (I < Procedures.Count) and (LowerCase(Procedures[I].Name) <> LowerCase(AName)) do
    206200    Inc(I);
    207201  if I < Procedures.Count then Result := Procedures[I] else Result := nil;
     
    212206begin
    213207  // System types
    214   with TType(Types[Types.Add(TType.Create)]) do begin
     208  with Types[Types.Add(TType.Create)] do begin
    215209    Name := 'Integer';
    216210  end;
    217   with TType(Types[Types.Add(TType.Create)]) do begin
     211  with Types[Types.Add(TType.Create)] do begin
    218212    Name := 'String';
    219213  end;
    220   with TType(Types[Types.Add(TType.Create)]) do begin
     214  with Types[Types.Add(TType.Create)] do begin
    221215    Name := 'Char';
    222216  end;
    223   with TType(Types[Types.Add(TType.Create)]) do begin
     217  with Types[Types.Add(TType.Create)] do begin
    224218    Name := 'Byte';
    225219  end;
    226   with TType(Types[Types.Add(TType.Create)]) do begin
     220  with Types[Types.Add(TType.Create)] do begin
    227221    Name := 'Word';
    228222  end;
    229223
    230224  // System procedures
    231   with TProcedure(Procedures[Procedures.Add(TProcedure.Create)]) do begin
     225  with Procedures[Procedures.Add(TProcedure.Create)] do begin
    232226    Name := 'WriteLn';
    233     with TVariable(Parameters[Parameters.Add(TVariable.Create)]) do begin
     227    with Parameters[Parameters.Add(TVariable.Create)] do begin
    234228      Name := 'Text';
    235229      VarType := FindTypeByName('String');
    236230    end;
    237231  end;
    238   with TProcedure(Procedures[Procedures.Add(TProcedure.Create)]) do begin
     232  with Procedures[Procedures.Add(TProcedure.Create)] do begin
    239233    Name := 'Exit';
    240234  end;
    241   with TProcedure(Procedures[Procedures.Add(TProcedure.Create)]) do begin
     235  with Procedures[Procedures.Add(TProcedure.Create)] do begin
    242236    Name := 'ReadLn';
    243237  end;
     
    249243begin
    250244  for I := 0 to Variables.Count - 1 do
    251     TVariable(Variables[I]).Destroy;
     245    Variables[I].Destroy;
    252246  Variables.Clear;
    253247  BeginEnd.Clear;
     
    260254begin
    261255  I := 0;
    262   while (I < Types.Count) and (LowerCase(TType(Types[I]).Name) <> LowerCase(AName)) do
     256  while (I < Types.Count) and (LowerCase(Types[I].Name) <> LowerCase(AName)) do
    263257    Inc(I);
    264258  if I < Types.Count then Result := Types[I] else Result := nil;
Note: See TracChangeset for help on using the changeset viewer.