Ignore:
Timestamp:
Nov 9, 2009, 9:47:57 AM (15 years ago)
Author:
george
Message:
  • Upraveno: Zobecněno uchování definic parametrických povelů v bloku BeginEnd pro potřeby generování do různých jazyků.
File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/Void/UOutputGenerator.pas

    r7 r8  
    5454procedure TPascalGenerator.Generate(Model: TModel);
    5555var
    56   I: Integer;
     56  I, P: Integer;
     57  ParameterText: string;
     58  Row: string;
    5759begin
    5860  inherited;
     
    7274    // Code block
    7375    Output.Add('begin');
    74     for I := 0 to Commands.Count - 1 do
    75       with TCommand(Commands[I]) do
    76         Output.Add(Text);
     76    for I := 0 to BeginEnd.Commands.Count - 1 do
     77      with TCommand(BeginEnd.Commands[I]) do begin
     78        if Name = 'Assignment' then Output.Add(Parameters[0] + ' := ' + Parameters[1] + ';')
     79        else begin
     80        Row := Name;
     81        if Parameters.Count > 0 then begin
     82          ParameterText := '';
     83          for P := 0 to Parameters.Count - 1 do
     84            ParameterText := ParameterText + Parameters[P] + ', ';
     85          Row := Row + '(' + Copy(ParameterText, 1, Length(ParameterText) - 2) + ')';
     86        end;
     87        Output.Add(Row + ';');
     88        end;
     89      end;
    7790    Output.Add('end.');
    7891  end;
     
    8295
    8396procedure TCGenerator.Generate(Model: TModel);
    84 begin
     97var
     98  I, P: Integer;
     99  Row: string;
     100  ParameterText: string;
     101  begin
    85102  inherited;
     103
     104  with Model do begin
     105    // Prepare output
     106    Output.Clear;
     107
     108    Output.Add('int main()');
     109    Output.Add('{');
     110
     111    // variable section
     112    for I := 0 to Variables.Count - 1 do
     113      with TVariable(Variables[I]) do
     114        Output.Add('  ' + VarType + ' ' + Name + ';');
     115
     116    // Code block
     117    for I := 0 to BeginEnd.Commands.Count - 1 do
     118      with TCommand(BeginEnd.Commands[I]) do begin
     119        if Name = 'Assignment' then Output.Add(Parameters[0] + ' = ' + Parameters[1] + ';')
     120        else begin
     121        Row := Name;
     122        if Parameters.Count > 0 then begin
     123          ParameterText := '';
     124          for P := 0 to Parameters.Count - 1 do
     125            ParameterText := ParameterText + Parameters[P] + ', ';
     126          Row := Row + '(' + Copy(ParameterText, 1, Length(ParameterText) - 2) + ')';
     127        end;
     128        Output.Add(Row + ';');
     129        end;
     130      end;
     131    Output.Add('}');
     132  end;
    86133end;
    87134
Note: See TracChangeset for help on using the changeset viewer.