Ignore:
Timestamp:
Nov 10, 2009, 7:14:14 AM (15 years ago)
Author:
george
Message:
  • Přidáno: Odsazování řádků při generování výstupu.
  • Přidáno: Definování a modelování definic datových typů.
File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/Void/UModel.pas

    r11 r13  
    99
    1010type
     11  TType = class
     12    Name: string;
     13    BaseType: TType;
     14  end;
     15
    1116  TVariable = class
    1217    Name: string;
    13     VarType: string;
     18    VarType: TType;
    1419  end;
    1520
     
    3641  end;
    3742
     43  { TModule }
     44
    3845  TModule = class
    3946  public
     47    Types: TList;
    4048    Variables: TList;
    4149    Procedures: TList;
     
    4452    destructor Destroy; override;
    4553    procedure Clear;
     54    function FindTypeByName(AName: string): TType;
    4655    function FindProcedureByName(AName: string): TProcedure;
    4756    function FindVariableByName(AName: string): TVariable;
     
    136145constructor TModule.Create;
    137146begin
     147  Types := TList.Create;
    138148  Variables := TList.Create;
    139149  BeginEnd := TBeginEnd.Create;
     
    145155  I: Integer;
    146156begin
     157  for I := 0 to Types.Count - 1 do
     158    TType(Types[I]).Destroy;
     159  Types.Destroy;
    147160  for I := 0 to Variables.Count - 1 do
    148161    TVariable(Variables[I]).Destroy;
     
    178191procedure TModule.Init;
    179192begin
     193  // System types
     194  with TType(Types[Types.Add(TType.Create)]) do begin
     195    Name := 'Integer';
     196  end;
     197  with TType(Types[Types.Add(TType.Create)]) do begin
     198    Name := 'String';
     199  end;
     200  with TType(Types[Types.Add(TType.Create)]) do begin
     201    Name := 'Char';
     202  end;
     203  with TType(Types[Types.Add(TType.Create)]) do begin
     204    Name := 'Byte';
     205  end;
     206  with TType(Types[Types.Add(TType.Create)]) do begin
     207    Name := 'Word';
     208  end;
     209
     210  // System procedures
    180211  with TProcedure(Procedures[Procedures.Add(TProcedure.Create)]) do begin
    181212    Name := 'WriteLn';
    182213  end;
    183    with TProcedure(Procedures[Procedures.Add(TProcedure.Create)]) do begin
     214  with TProcedure(Procedures[Procedures.Add(TProcedure.Create)]) do begin
    184215    Name := 'Exit';
    185216  end;
     
    200231end;
    201232
     233function TModule.FindTypeByName(AName: string): TType;
     234var
     235  I: Integer;
     236begin
     237  I := 0;
     238  while (I < Types.Count) and (TType(Types[I]).Name <> AName) do
     239    Inc(I);
     240  if I < Types.Count then Result := Types[I] else Result := nil;
     241end;
     242
    202243end.
    203244
Note: See TracChangeset for help on using the changeset viewer.