Changeset 7


Ignore:
Timestamp:
Nov 9, 2009, 9:21:28 AM (15 years ago)
Author:
george
Message:
  • Upraveno: Oddělení modelu a generátoru kódu.
Location:
branches/Void
Files:
2 added
4 edited

Legend:

Unmodified
Added
Removed
  • branches/Void/UCompilator.pas

    r6 r7  
    66
    77uses
    8   Classes, SysUtils;
     8  Classes, SysUtils, UOutputGenerator, UModel;
    99
    1010type
    1111  TOnErrorEvent = procedure (Text: string; var Terminate: Boolean; Position: TPoint) of object;
    1212
    13   TVariable = class
    14     Name: string;
    15     VarType: string;
    16   end;
    17 
    18   TCommand = class
    19     Text: string;
    20   end;
    21 
    2213  TCompilator = class
    2314  private
    2415    FOnError: TOnErrorEvent;
    25     Variables: TList;
    26     Commands: TList;
    2716    ParsePosition: TPoint;
    2817    procedure DoError(Text: string);
    29     function FindVariableByName(AName: string): TVariable;
    3018  public
     19    Model: TModel;
    3120    SourceCode: TStringList;
    32     Output: TStringList;
     21    Generator: TOutputGenerator;
    3322    procedure Compile;
    34     procedure Clear;
    3523    procedure ProcessLine(Line: string);
    3624    constructor Create;
     
    5341end;
    5442
    55 function TCompilator.FindVariableByName(AName: string): TVariable;
    56 var
    57   I: Integer;
    58 begin
    59   I := 0;
    60   while (I < Variables.Count) and (TVariable(Variables[I]).Name <> AName) do
    61     Inc(I);
    62   if I < Variables.Count then Result := Variables[I] else Result := nil;
    63 end;
    64 
    6543procedure TCompilator.Compile;
    6644var
    6745  I: Integer;
    6846begin
    69   Clear;
     47  Model.Clear;
    7048
    7149  // Process source lines
     
    7553  end;
    7654
    77   // Prepare output
    78   Output.Clear;
    79   Output.Add('program Test;');
    80   Output.Add('{$APPTYPE CONSOLE}');
    81 
    82   // var section
    83   if Variables.Count > 0 then Output.Add('var');
    84   for I := 0 to Variables.Count - 1 do
    85     with TVariable(Variables[I]) do
    86       Output.Add('  ' + Name + ': ' + VarType + ';');
    87 
    88   // Code block
    89   Output.Add('begin');
    90   for I := 0 to Commands.Count - 1 do
    91     with TCommand(Commands[I]) do
    92       Output.Add(Text);
    93   Output.Add('end.');
    94 end;
    95 
    96 procedure TCompilator.Clear;
    97 var
    98   I: Integer;
    99 begin
    100   for I := 0 to Variables.Count - 1 do
    101     TVariable(Variables[I]).Destroy;
    102   Variables.Clear;
    103   for I := 0 to Commands.Count - 1 do
    104     TCommand(Commands[I]).Destroy;
    105   Commands.Clear;
    106   Output.Clear;
     55  Generator.Generate(Model);
    10756end;
    10857
     
    11362  VariableName: string;
    11463begin
     64  with Model do begin
    11565  Command := Parse(Line);
    11666  if Command = 'Write' then
     
    14191    Text := 'Exit;';
    14292  end else DoError('Unknown command ' + Command);
     93
     94  end;
    14395end;
    14496
     
    14698begin
    14799  SourceCode := TStringList.Create;
    148   Output := TStringList.Create;
    149   Variables := TList.Create;
    150   Commands := TList.Create;
     100  Model := TModel.Create;
    151101end;
    152102
     
    155105  I: Integer;
    156106begin
    157   Output.Destroy;
    158   for I := 0 to Variables.Count - 1 do
    159     TVariable(Variables[I]).Destroy;
    160   Variables.Destroy;
    161   for I := 0 to Commands.Count - 1 do
    162     TCommand(Commands[I]).Destroy;
    163   Commands.Destroy;
    164107  SourceCode.Destroy;
     108  Model.Destroy;
    165109  inherited Destroy;
    166110end;
  • branches/Void/UMainForm.pas

    r6 r7  
    77uses
    88  Classes, SysUtils, FileUtil, LResources, Forms, Controls, Graphics, Dialogs,
    9   StdCtrls, UCompilator;
     9  StdCtrls, UCompilator, UOutputGenerator;
    1010
    1111const
     
    1313
    1414type
    15 
    16   { TMainForm }
    17 
    1815  TMainForm = class(TForm)
    1916    ButtonCompile: TButton;
     
    6966  with Compilator do begin
    7067    SourceCode.Assign(Memo1.Lines);
     68    Generator := TPascalGenerator.Create;
    7169    Compile;
    72     Memo2.Lines.Assign(Output);
     70    Memo2.Lines.Assign(Generator.Output);
    7371  end;
    7472end;
  • branches/Void/project1.lpi

    r6 r7  
    99      <Icon Value="0"/>
    1010      <UseXPManifest Value="True"/>
    11       <ActiveEditorIndexAtStart Value="0"/>
     11      <ActiveEditorIndexAtStart Value="1"/>
    1212    </General>
    1313    <VersionInfo>
     
    3333      </Item1>
    3434    </RequiredPackages>
    35     <Units Count="3">
     35    <Units Count="6">
    3636      <Unit0>
    3737        <Filename Value="project1.lpr"/>
     
    4646        <ResourceBaseClass Value="Form"/>
    4747        <UnitName Value="UMainForm"/>
    48         <CursorPos X="23" Y="81"/>
    49         <TopLine Value="57"/>
     48        <CursorPos X="11" Y="69"/>
     49        <TopLine Value="55"/>
    5050        <EditorIndex Value="0"/>
    5151        <UsageCount Value="20"/>
     
    5555        <Filename Value="UCompilator.pas"/>
    5656        <UnitName Value="UCompilator"/>
    57         <CursorPos X="26" Y="73"/>
    58         <TopLine Value="41"/>
     57        <CursorPos X="17" Y="53"/>
     58        <TopLine Value="43"/>
    5959        <EditorIndex Value="1"/>
    6060        <UsageCount Value="10"/>
    6161        <Loaded Value="True"/>
    6262      </Unit2>
     63      <Unit3>
     64        <Filename Value="UOutputGenerator.pas"/>
     65        <IsPartOfProject Value="True"/>
     66        <UnitName Value="UOutputGenerator"/>
     67        <CursorPos X="3" Y="38"/>
     68        <TopLine Value="27"/>
     69        <EditorIndex Value="2"/>
     70        <UsageCount Value="20"/>
     71        <Loaded Value="True"/>
     72      </Unit3>
     73      <Unit4>
     74        <Filename Value="Example.void"/>
     75        <IsPartOfProject Value="True"/>
     76        <CursorPos X="1" Y="1"/>
     77        <TopLine Value="1"/>
     78        <EditorIndex Value="4"/>
     79        <UsageCount Value="20"/>
     80        <Loaded Value="True"/>
     81        <SyntaxHighlighter Value="None"/>
     82      </Unit4>
     83      <Unit5>
     84        <Filename Value="UModel.pas"/>
     85        <IsPartOfProject Value="True"/>
     86        <UnitName Value="UModel"/>
     87        <CursorPos X="1" Y="75"/>
     88        <TopLine Value="47"/>
     89        <EditorIndex Value="3"/>
     90        <UsageCount Value="20"/>
     91        <Loaded Value="True"/>
     92      </Unit5>
    6393    </Units>
    6494    <JumpHistory Count="30" HistoryIndex="29">
    6595      <Position1>
    6696        <Filename Value="UMainForm.pas"/>
    67         <Caret Line="42" Column="9" TopLine="28"/>
     97        <Caret Line="80" Column="61" TopLine="57"/>
    6898      </Position1>
    6999      <Position2>
    70         <Filename Value="UMainForm.pas"/>
    71         <Caret Line="12" Column="1" TopLine="9"/>
     100        <Filename Value="UOutputGenerator.pas"/>
     101        <Caret Line="20" Column="34" TopLine="1"/>
    72102      </Position2>
    73103      <Position3>
    74         <Filename Value="UMainForm.pas"/>
    75         <Caret Line="3" Column="14" TopLine="1"/>
     104        <Filename Value="UOutputGenerator.pas"/>
     105        <Caret Line="16" Column="17" TopLine="1"/>
    76106      </Position3>
    77107      <Position4>
    78         <Filename Value="UMainForm.pas"/>
    79         <Caret Line="40" Column="8" TopLine="25"/>
     108        <Filename Value="UOutputGenerator.pas"/>
     109        <Caret Line="24" Column="40" TopLine="6"/>
    80110      </Position4>
    81111      <Position5>
    82         <Filename Value="UCompilator.pas"/>
    83         <Caret Line="31" Column="23" TopLine="16"/>
     112        <Filename Value="UOutputGenerator.pas"/>
     113        <Caret Line="32" Column="1" TopLine="20"/>
    84114      </Position5>
    85115      <Position6>
    86         <Filename Value="UCompilator.pas"/>
    87         <Caret Line="89" Column="1" TopLine="62"/>
     116        <Filename Value="UOutputGenerator.pas"/>
     117        <Caret Line="23" Column="15" TopLine="6"/>
    88118      </Position6>
    89119      <Position7>
    90         <Filename Value="UCompilator.pas"/>
    91         <Caret Line="32" Column="23" TopLine="9"/>
     120        <Filename Value="UOutputGenerator.pas"/>
     121        <Caret Line="29" Column="15" TopLine="8"/>
    92122      </Position7>
    93123      <Position8>
    94         <Filename Value="UCompilator.pas"/>
    95         <Caret Line="63" Column="30" TopLine="48"/>
     124        <Filename Value="UMainForm.pas"/>
     125        <Caret Line="9" Column="42" TopLine="1"/>
    96126      </Position8>
    97127      <Position9>
    98         <Filename Value="UCompilator.pas"/>
    99         <Caret Line="74" Column="24" TopLine="59"/>
     128        <Filename Value="UOutputGenerator.pas"/>
     129        <Caret Line="59" Column="5" TopLine="47"/>
    100130      </Position9>
    101131      <Position10>
    102         <Filename Value="UMainForm.pas"/>
    103         <Caret Line="40" Column="8" TopLine="25"/>
     132        <Filename Value="UModel.pas"/>
     133        <Caret Line="19" Column="23" TopLine="8"/>
    104134      </Position10>
    105135      <Position11>
    106         <Filename Value="UMainForm.pas"/>
    107         <Caret Line="41" Column="9" TopLine="25"/>
     136        <Filename Value="UModel.pas"/>
     137        <Caret Line="32" Column="14" TopLine="13"/>
    108138      </Position11>
    109139      <Position12>
    110         <Filename Value="UCompilator.pas"/>
    111         <Caret Line="141" Column="23" TopLine="128"/>
     140        <Filename Value="UOutputGenerator.pas"/>
     141        <Caret Line="8" Column="28" TopLine="1"/>
    112142      </Position12>
    113143      <Position13>
    114         <Filename Value="UCompilator.pas"/>
    115         <Caret Line="97" Column="11" TopLine="83"/>
     144        <Filename Value="UOutputGenerator.pas"/>
     145        <Caret Line="23" Column="15" TopLine="8"/>
    116146      </Position13>
    117147      <Position14>
    118         <Filename Value="UMainForm.pas"/>
    119         <Caret Line="46" Column="1" TopLine="28"/>
     148        <Filename Value="UOutputGenerator.pas"/>
     149        <Caret Line="56" Column="9" TopLine="51"/>
    120150      </Position14>
    121151      <Position15>
    122         <Filename Value="UMainForm.pas"/>
    123         <Caret Line="45" Column="1" TopLine="27"/>
     152        <Filename Value="UCompilator.pas"/>
     153        <Caret Line="13" Column="1" TopLine="1"/>
    124154      </Position15>
    125155      <Position16>
    126         <Filename Value="UMainForm.pas"/>
    127         <Caret Line="39" Column="10" TopLine="27"/>
     156        <Filename Value="UCompilator.pas"/>
     157        <Caret Line="18" Column="1" TopLine="16"/>
    128158      </Position16>
    129159      <Position17>
    130         <Filename Value="UMainForm.pas"/>
    131         <Caret Line="44" Column="10" TopLine="31"/>
     160        <Filename Value="UCompilator.pas"/>
     161        <Caret Line="63" Column="1" TopLine="48"/>
    132162      </Position17>
    133163      <Position18>
    134         <Filename Value="UMainForm.pas"/>
    135         <Caret Line="45" Column="42" TopLine="25"/>
     164        <Filename Value="UCompilator.pas"/>
     165        <Caret Line="22" Column="23" TopLine="11"/>
    136166      </Position18>
    137167      <Position19>
    138         <Filename Value="UMainForm.pas"/>
    139         <Caret Line="48" Column="1" TopLine="22"/>
     168        <Filename Value="UCompilator.pas"/>
     169        <Caret Line="21" Column="1" TopLine="11"/>
    140170      </Position19>
    141171      <Position20>
    142         <Filename Value="UMainForm.pas"/>
    143         <Caret Line="54" Column="1" TopLine="40"/>
     172        <Filename Value="UCompilator.pas"/>
     173        <Caret Line="59" Column="1" TopLine="47"/>
    144174      </Position20>
    145175      <Position21>
    146         <Filename Value="UMainForm.pas"/>
    147         <Caret Line="49" Column="1" TopLine="52"/>
     176        <Filename Value="UCompilator.pas"/>
     177        <Caret Line="104" Column="1" TopLine="89"/>
    148178      </Position21>
    149179      <Position22>
    150180        <Filename Value="UMainForm.pas"/>
    151         <Caret Line="85" Column="1" TopLine="55"/>
     181        <Caret Line="68" Column="42" TopLine="48"/>
    152182      </Position22>
    153183      <Position23>
    154184        <Filename Value="UMainForm.pas"/>
    155         <Caret Line="59" Column="14" TopLine="44"/>
     185        <Caret Line="69" Column="11" TopLine="55"/>
    156186      </Position23>
    157187      <Position24>
    158         <Filename Value="UMainForm.pas"/>
    159         <Caret Line="48" Column="24" TopLine="40"/>
     188        <Filename Value="UCompilator.pas"/>
     189        <Caret Line="56" Column="18" TopLine="44"/>
    160190      </Position24>
    161191      <Position25>
    162192        <Filename Value="UCompilator.pas"/>
    163         <Caret Line="35" Column="21" TopLine="17"/>
     193        <Caret Line="48" Column="5" TopLine="44"/>
    164194      </Position25>
    165195      <Position26>
    166196        <Filename Value="UCompilator.pas"/>
    167         <Caret Line="72" Column="19" TopLine="59"/>
     197        <Caret Line="61" Column="6" TopLine="59"/>
    168198      </Position26>
    169199      <Position27>
    170200        <Filename Value="UCompilator.pas"/>
    171         <Caret Line="27" Column="27" TopLine="15"/>
     201        <Caret Line="19" Column="15" TopLine="4"/>
    172202      </Position27>
    173203      <Position28>
    174         <Filename Value="UCompilator.pas"/>
    175         <Caret Line="51" Column="69" TopLine="36"/>
     204        <Filename Value="UModel.pas"/>
     205        <Caret Line="28" Column="21" TopLine="5"/>
    176206      </Position28>
    177207      <Position29>
    178         <Filename Value="UMainForm.pas"/>
    179         <Caret Line="76" Column="3" TopLine="55"/>
     208        <Filename Value="UCompilator.pas"/>
     209        <Caret Line="23" Column="1" TopLine="4"/>
    180210      </Position29>
    181211      <Position30>
    182         <Filename Value="UMainForm.pas"/>
    183         <Caret Line="80" Column="61" TopLine="57"/>
     212        <Filename Value="UCompilator.pas"/>
     213        <Caret Line="47" Column="9" TopLine="32"/>
    184214      </Position30>
    185215    </JumpHistory>
  • branches/Void/project1.lpr

    r6 r7  
    88  {$ENDIF}{$ENDIF}
    99  Interfaces, // this includes the LCL widgetset
    10   Forms, UMainForm, LResources
     10  Forms, UMainForm, UOutputGenerator, LResources, UModel
    1111  { you can add units after this };
    1212
Note: See TracChangeset for help on using the changeset viewer.