Changeset 8


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ů.
Location:
branches/Void
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • branches/Void/UCompilator.pas

    r7 r8  
    6262  VariableName: string;
    6363begin
    64   with Model do begin
     64  with Model, BeginEnd do begin
    6565  Command := Parse(Line);
    6666  if Command = 'Write' then
    6767  with TCommand(Commands[Commands.Add(TCommand.Create)]) do begin
    68     Text := 'WriteLn(''' + Line + ''');';
     68    Name := 'WriteLn';
     69    Parameters.Add(Parse(Line));
    6970  end else if Command = 'Define' then begin
    7071    VariableName := Parse(Line);
     
    8485    if not Assigned(Variable) then DoError('Undefined variable ' + VariableName)
    8586    else begin
    86       Text := VariableName + ' := ''' + Parse(Line) + ''';';
     87      Name := 'Assignment';
     88      Parameters.Add(VariableName);
     89      Parameters.Add(Parse(Line));
    8790    end;
    8891  end else if Command = 'Pause' then with TCommand(Commands[Commands.Add(TCommand.Create)]) do begin
    89     Text := 'ReadLn;';
     92    Name := 'ReadLn';
    9093  end else if Command = 'Exit' then with TCommand(Commands[Commands.Add(TCommand.Create)]) do begin
    91     Text := 'Exit;';
     94    Name := 'Exit';
    9295  end else DoError('Unknown command ' + Command);
    9396
  • branches/Void/UMainForm.lfm

    r6 r8  
    2020  end
    2121  object Memo2: TMemo
    22     Left = 295
    23     Height = 400
     22    Left = 296
     23    Height = 376
    2424    Top = 24
    2525    Width = 260
     
    6666    TabOrder = 3
    6767  end
     68  object ComboBox1: TComboBox
     69    Left = 295
     70    Height = 21
     71    Top = 404
     72    Width = 262
     73    ItemHeight = 13
     74    ItemIndex = 0
     75    Items.Strings = (
     76      'Pascal'
     77      'C'
     78    )
     79    Style = csDropDownList
     80    TabOrder = 4
     81    Text = 'Pascal'
     82  end
    6883end
  • branches/Void/UMainForm.pas

    r7 r8  
    1313
    1414type
     15
     16  { TMainForm }
     17
    1518  TMainForm = class(TForm)
    1619    ButtonCompile: TButton;
     20    ComboBox1: TComboBox;
    1721    Label1: TLabel;
    1822    Label2: TLabel;
     
    6670  with Compilator do begin
    6771    SourceCode.Assign(Memo1.Lines);
    68     Generator := TPascalGenerator.Create;
     72
     73    if Assigned(Generator) then Generator.Destroy;
     74    if ComboBox1.ItemIndex = 0 then
     75      Generator := TPascalGenerator.Create
     76      else Generator := TCGenerator.Create;
    6977    Compile;
    7078    Memo2.Lines.Assign(Generator.Output);
  • branches/Void/UModel.pas

    r7 r8  
    1515
    1616  TCommand = class
    17     Text: string;
     17    Name: string;
     18    Parameters: TStringList;
     19    constructor Create;
     20    destructor Destroy; override;
     21  end;
     22
     23  { TBeginEnd }
     24
     25  TBeginEnd = class
     26    Commands: TList;
     27    constructor Create;
     28    destructor Destroy; override;
     29    procedure Clear;
    1830  end;
    1931
     
    2436  public
    2537    Variables: TList;
    26     Commands: TList;
     38    BeginEnd: TBeginEnd;
    2739    function FindVariableByName(AName: string): TVariable;
    2840    procedure Clear;
     
    3850begin
    3951  Variables := TList.Create;
    40   Commands := TList.Create;
     52  BeginEnd := TBeginEnd.Create;
    4153end;
    4254
     
    4860    TVariable(Variables[I]).Destroy;
    4961  Variables.Destroy;
    50   for I := 0 to Commands.Count - 1 do
    51     TCommand(Commands[I]).Destroy;
    52   Commands.Destroy;
     62  BeginEnd.Destroy;
    5363  inherited Destroy;
    5464end;
     
    7181    TVariable(Variables[I]).Destroy;
    7282  Variables.Clear;
     83  BeginEnd.Clear;
     84end;
     85
     86
     87{ TBeginEnd }
     88
     89constructor TBeginEnd.Create;
     90begin
     91  Commands := TList.Create;
     92end;
     93
     94destructor TBeginEnd.Destroy;
     95var
     96  I: Integer;
     97begin
     98  for I := 0 to Commands.Count - 1 do
     99    TCommand(Commands[I]).Destroy;
     100  Commands.Destroy;
     101  inherited Destroy;
     102end;
     103
     104procedure TBeginEnd.Clear;
     105var
     106  I: Integer;
     107begin
    73108  for I := 0 to Commands.Count - 1 do
    74109    TCommand(Commands[I]).Destroy;
     
    76111end;
    77112
     113{ TCommand }
     114
     115constructor TCommand.Create;
     116begin
     117  Parameters := TStringList.Create;
     118end;
     119
     120destructor TCommand.Destroy;
     121begin
     122  Parameters.Destroy;
     123  inherited Destroy;
     124end;
    78125
    79126end.
  • 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
  • branches/Void/project1.lpi

    r7 r8  
    4646        <ResourceBaseClass Value="Form"/>
    4747        <UnitName Value="UMainForm"/>
    48         <CursorPos X="11" Y="69"/>
    49         <TopLine Value="55"/>
     48        <CursorPos X="39" Y="70"/>
     49        <TopLine Value="25"/>
    5050        <EditorIndex Value="0"/>
    5151        <UsageCount Value="20"/>
     
    5555        <Filename Value="UCompilator.pas"/>
    5656        <UnitName Value="UCompilator"/>
    57         <CursorPos X="17" Y="53"/>
    58         <TopLine Value="43"/>
     57        <CursorPos X="69" Y="85"/>
     58        <TopLine Value="66"/>
    5959        <EditorIndex Value="1"/>
    6060        <UsageCount Value="10"/>
     
    6565        <IsPartOfProject Value="True"/>
    6666        <UnitName Value="UOutputGenerator"/>
    67         <CursorPos X="3" Y="38"/>
    68         <TopLine Value="27"/>
     67        <CursorPos X="75" Y="81"/>
     68        <TopLine Value="74"/>
    6969        <EditorIndex Value="2"/>
    7070        <UsageCount Value="20"/>
     
    8585        <IsPartOfProject Value="True"/>
    8686        <UnitName Value="UModel"/>
    87         <CursorPos X="1" Y="75"/>
    88         <TopLine Value="47"/>
     87        <CursorPos X="1" Y="19"/>
     88        <TopLine Value="11"/>
    8989        <EditorIndex Value="3"/>
    9090        <UsageCount Value="20"/>
     
    9595      <Position1>
    9696        <Filename Value="UMainForm.pas"/>
    97         <Caret Line="80" Column="61" TopLine="57"/>
     97        <Caret Line="68" Column="42" TopLine="48"/>
    9898      </Position1>
    9999      <Position2>
    100         <Filename Value="UOutputGenerator.pas"/>
    101         <Caret Line="20" Column="34" TopLine="1"/>
     100        <Filename Value="UMainForm.pas"/>
     101        <Caret Line="69" Column="11" TopLine="55"/>
    102102      </Position2>
    103103      <Position3>
    104         <Filename Value="UOutputGenerator.pas"/>
    105         <Caret Line="16" Column="17" TopLine="1"/>
     104        <Filename Value="UCompilator.pas"/>
     105        <Caret Line="56" Column="18" TopLine="44"/>
    106106      </Position3>
    107107      <Position4>
    108         <Filename Value="UOutputGenerator.pas"/>
    109         <Caret Line="24" Column="40" TopLine="6"/>
     108        <Filename Value="UCompilator.pas"/>
     109        <Caret Line="48" Column="5" TopLine="44"/>
    110110      </Position4>
    111111      <Position5>
    112         <Filename Value="UOutputGenerator.pas"/>
    113         <Caret Line="32" Column="1" TopLine="20"/>
     112        <Filename Value="UCompilator.pas"/>
     113        <Caret Line="61" Column="6" TopLine="59"/>
    114114      </Position5>
    115115      <Position6>
    116         <Filename Value="UOutputGenerator.pas"/>
    117         <Caret Line="23" Column="15" TopLine="6"/>
     116        <Filename Value="UCompilator.pas"/>
     117        <Caret Line="19" Column="15" TopLine="4"/>
    118118      </Position6>
    119119      <Position7>
    120         <Filename Value="UOutputGenerator.pas"/>
    121         <Caret Line="29" Column="15" TopLine="8"/>
     120        <Filename Value="UModel.pas"/>
     121        <Caret Line="28" Column="21" TopLine="5"/>
    122122      </Position7>
    123123      <Position8>
    124         <Filename Value="UMainForm.pas"/>
    125         <Caret Line="9" Column="42" TopLine="1"/>
     124        <Filename Value="UCompilator.pas"/>
     125        <Caret Line="23" Column="1" TopLine="4"/>
    126126      </Position8>
    127127      <Position9>
    128         <Filename Value="UOutputGenerator.pas"/>
    129         <Caret Line="59" Column="5" TopLine="47"/>
     128        <Filename Value="UCompilator.pas"/>
     129        <Caret Line="47" Column="9" TopLine="32"/>
    130130      </Position9>
    131131      <Position10>
    132         <Filename Value="UModel.pas"/>
    133         <Caret Line="19" Column="23" TopLine="8"/>
     132        <Filename Value="UMainForm.pas"/>
     133        <Caret Line="69" Column="11" TopLine="55"/>
    134134      </Position10>
    135135      <Position11>
    136         <Filename Value="UModel.pas"/>
    137         <Caret Line="32" Column="14" TopLine="13"/>
     136        <Filename Value="UMainForm.pas"/>
     137        <Caret Line="72" Column="8" TopLine="57"/>
    138138      </Position11>
    139139      <Position12>
    140         <Filename Value="UOutputGenerator.pas"/>
    141         <Caret Line="8" Column="28" TopLine="1"/>
     140        <Filename Value="UMainForm.pas"/>
     141        <Caret Line="73" Column="51" TopLine="57"/>
    142142      </Position12>
    143143      <Position13>
    144         <Filename Value="UOutputGenerator.pas"/>
    145         <Caret Line="23" Column="15" TopLine="8"/>
     144        <Filename Value="UModel.pas"/>
     145        <Caret Line="27" Column="1" TopLine="16"/>
    146146      </Position13>
    147147      <Position14>
    148         <Filename Value="UOutputGenerator.pas"/>
    149         <Caret Line="56" Column="9" TopLine="51"/>
     148        <Filename Value="UModel.pas"/>
     149        <Caret Line="59" Column="11" TopLine="46"/>
    150150      </Position14>
    151151      <Position15>
    152         <Filename Value="UCompilator.pas"/>
    153         <Caret Line="13" Column="1" TopLine="1"/>
     152        <Filename Value="UModel.pas"/>
     153        <Caret Line="80" Column="8" TopLine="65"/>
    154154      </Position15>
    155155      <Position16>
    156         <Filename Value="UCompilator.pas"/>
    157         <Caret Line="18" Column="1" TopLine="16"/>
     156        <Filename Value="UModel.pas"/>
     157        <Caret Line="35" Column="20" TopLine="20"/>
    158158      </Position16>
    159159      <Position17>
    160         <Filename Value="UCompilator.pas"/>
    161         <Caret Line="63" Column="1" TopLine="48"/>
     160        <Filename Value="UModel.pas"/>
     161        <Caret Line="27" Column="1" TopLine="8"/>
    162162      </Position17>
    163163      <Position18>
    164         <Filename Value="UCompilator.pas"/>
    165         <Caret Line="22" Column="23" TopLine="11"/>
     164        <Filename Value="UModel.pas"/>
     165        <Caret Line="107" Column="1" TopLine="78"/>
    166166      </Position18>
    167167      <Position19>
    168         <Filename Value="UCompilator.pas"/>
    169         <Caret Line="21" Column="1" TopLine="11"/>
     168        <Filename Value="UOutputGenerator.pas"/>
     169        <Caret Line="81" Column="69" TopLine="79"/>
    170170      </Position19>
    171171      <Position20>
    172         <Filename Value="UCompilator.pas"/>
    173         <Caret Line="59" Column="1" TopLine="47"/>
     172        <Filename Value="UOutputGenerator.pas"/>
     173        <Caret Line="74" Column="36" TopLine="59"/>
    174174      </Position20>
    175175      <Position21>
    176         <Filename Value="UCompilator.pas"/>
    177         <Caret Line="104" Column="1" TopLine="89"/>
     176        <Filename Value="UOutputGenerator.pas"/>
     177        <Caret Line="75" Column="30" TopLine="60"/>
    178178      </Position21>
    179179      <Position22>
    180         <Filename Value="UMainForm.pas"/>
    181         <Caret Line="68" Column="42" TopLine="48"/>
     180        <Filename Value="UOutputGenerator.pas"/>
     181        <Caret Line="79" Column="29" TopLine="58"/>
    182182      </Position22>
    183183      <Position23>
    184         <Filename Value="UMainForm.pas"/>
    185         <Caret Line="69" Column="11" TopLine="55"/>
     184        <Filename Value="UModel.pas"/>
     185        <Caret Line="21" Column="1" TopLine="3"/>
    186186      </Position23>
    187187      <Position24>
    188         <Filename Value="UCompilator.pas"/>
    189         <Caret Line="56" Column="18" TopLine="44"/>
     188        <Filename Value="UOutputGenerator.pas"/>
     189        <Caret Line="79" Column="12" TopLine="68"/>
    190190      </Position24>
    191191      <Position25>
    192         <Filename Value="UCompilator.pas"/>
    193         <Caret Line="48" Column="5" TopLine="44"/>
     192        <Filename Value="UOutputGenerator.pas"/>
     193        <Caret Line="85" Column="29" TopLine="64"/>
    194194      </Position25>
    195195      <Position26>
    196         <Filename Value="UCompilator.pas"/>
    197         <Caret Line="61" Column="6" TopLine="59"/>
     196        <Filename Value="UOutputGenerator.pas"/>
     197        <Caret Line="97" Column="1" TopLine="84"/>
    198198      </Position26>
    199199      <Position27>
    200200        <Filename Value="UCompilator.pas"/>
    201         <Caret Line="19" Column="15" TopLine="4"/>
     201        <Caret Line="53" Column="17" TopLine="52"/>
    202202      </Position27>
    203203      <Position28>
    204         <Filename Value="UModel.pas"/>
    205         <Caret Line="28" Column="21" TopLine="5"/>
     204        <Filename Value="UCompilator.pas"/>
     205        <Caret Line="64" Column="23" TopLine="52"/>
    206206      </Position28>
    207207      <Position29>
    208208        <Filename Value="UCompilator.pas"/>
    209         <Caret Line="23" Column="1" TopLine="4"/>
     209        <Caret Line="69" Column="1" TopLine="53"/>
    210210      </Position29>
    211211      <Position30>
    212212        <Filename Value="UCompilator.pas"/>
    213         <Caret Line="47" Column="9" TopLine="32"/>
     213        <Caret Line="87" Column="41" TopLine="1"/>
    214214      </Position30>
    215215    </JumpHistory>
Note: See TracChangeset for help on using the changeset viewer.