Changeset 17


Ignore:
Timestamp:
Nov 10, 2009, 11:13:51 AM (14 years ago)
Author:
george
Message:
  • Přidáno: Při kliknutí na chybové hlášení se přesune kurzor v kódu na místo chyby.
Location:
branches/Void
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • branches/Void

    • Property svn:ignore
      •  

        old new  
        77*.dsk
        88*.~dsk
         9Output.bdsproj
         10Output.c
         11Output.dpr
         12Output.exe
  • branches/Void/UCompilator.pas

    r16 r17  
    1010type
    1111  TOnErrorEvent = procedure (Text: string; var Terminate: Boolean; Position: TPoint) of object;
     12
     13  TErrorMessage = class
     14    CodePosition: TPoint;
     15    Text: string;
     16  end;
    1217
    1318  TCompilator = class
    1419  private
    1520    FOnError: TOnErrorEvent;
    16     procedure DoError(Text: string);
     21    procedure DoError(AText: string);
    1722    procedure ParseBeginEnd;
    1823    procedure ParseProgram;
    1924    procedure ParseVariableDefinition;
    2025  public
     26    ErrorMessages: TList;
    2127    Model: TModel;
    2228    SourceCode: TStream;
     
    3339{ TCompilator }
    3440
    35 procedure TCompilator.DoError(Text: string);
     41procedure TCompilator.DoError(AText: string);
    3642var
    3743  Terminate: Boolean;
    3844begin
     45  with TErrorMessage(ErrorMessages[ErrorMessages.Add(TErrorMessage.Create)]) do begin
     46    CodePosition := Parser.TokenStartPosition;
     47    Text := AText;
     48  end;
    3949  Terminate := False;
    40   if Assigned(FOnError) then FOnError(Text, Terminate, Parser.TokenStartPosition);
     50  if Assigned(FOnError) then FOnError(AText, Terminate, Parser.TokenStartPosition);
    4151  if Terminate then raise Exception.Create('Compilation terminated');
    4252end;
     
    123133begin
    124134  Model.Clear;
     135  for I := 0 to ErrorMessages.Count - 1 do
     136    TErrorMessage(ErrorMessages[I]).Destroy;
     137  ErrorMessages.Clear;
    125138  SourceCode.Position := 0;
    126139  Parser.Open(SourceCode);
     
    250263constructor TCompilator.Create;
    251264begin
     265  ErrorMessages := TList.Create;
    252266  SourceCode := TMemoryStream.Create;
    253267  Model := TModel.Create;
     
    256270
    257271destructor TCompilator.Destroy;
    258 begin
     272var
     273  I: Integer;
     274begin
     275  for I := 0 to ErrorMessages.Count - 1 do
     276    TErrorMessage(ErrorMessages[I]).Destroy;
     277  ErrorMessages.Destroy;
    259278  SourceCode.Destroy;
    260279  Model.Destroy;
  • branches/Void/UMainForm.lfm

    r16 r17  
    11object MainForm: TMainForm
    2   Left = 259
    3   Height = 580
    4   Top = 65
     2  Left = 257
     3  Height = 527
     4  Top = 134
    55  Width = 760
    66  Caption = 'Překladač Void'
    7   ClientHeight = 580
     7  ClientHeight = 527
    88  ClientWidth = 760
    99  OnClose = FormClose
     
    2828    ParentColor = False
    2929  end
    30   object Memo3: TMemo
    31     Left = 9
    32     Height = 77
    33     Top = 443
    34     Width = 549
    35     ScrollBars = ssAutoBoth
    36     TabOrder = 0
    37   end
    3830  object Label3: TLabel
    3931    Left = 12
     
    5143    Caption = 'Přeložit'
    5244    OnClick = ButtonCompileClick
    53     TabOrder = 1
     45    TabOrder = 0
    5446  end
    5547  object ComboBox1: TComboBox
     
    6658    )
    6759    Style = csDropDownList
    68     TabOrder = 2
     60    TabOrder = 1
    6961    Text = 'Pascal'
    7062  end
     
    8072    ParentColor = False
    8173    ParentFont = False
    82     TabOrder = 3
     74    TabOrder = 2
     75    BookMarkOptions.OnChange = nil
    8376    Gutter.Width = 57
    8477    Gutter.MouseActions = <   
     
    773766    ParentColor = False
    774767    ParentFont = False
    775     TabOrder = 4
     768    TabOrder = 3
     769    BookMarkOptions.OnChange = nil
    776770    Gutter.Width = 57
    777771    Gutter.MouseActions = <   
     
    13461340    )
    13471341    BracketHighlightStyle = sbhsBoth
    1348     OnChange = SynEdit2Change
    13491342    inline SynGutterPartList1: TSynGutterPartList
    13501343      object SynGutterMarks1: TSynGutterMarks
     
    14611454    Width = 185
    14621455    DefaultItemHeight = 15
    1463     TabOrder = 5
     1456    TabOrder = 4
    14641457  end
    14651458  object Label4: TLabel
     
    14701463    Caption = 'Struktura:'
    14711464    ParentColor = False
     1465  end
     1466  object ListView1: TListView
     1467    Left = 9
     1468    Height = 72
     1469    Top = 446
     1470    Width = 479
     1471    Columns = <   
     1472      item
     1473        Caption = 'Modul'
     1474        Width = 100
     1475      end   
     1476      item
     1477        Caption = 'Pozice'
     1478      end   
     1479      item
     1480        Caption = 'Hlášení'
     1481        Width = 300
     1482      end>
     1483    ReadOnly = True
     1484    RowSelect = True
     1485    TabOrder = 5
     1486    ViewStyle = vsReport
     1487    OnClick = ListView1Click
    14721488  end
    14731489  object SynPasSyn1: TSynPasSyn
  • branches/Void/UMainForm.pas

    r16 r17  
    2525    Label3: TLabel;
    2626    Label4: TLabel;
    27     Memo3: TMemo;
     27    ListView1: TListView;
    2828    SynCppSyn1: TSynCppSyn;
    2929    SynEdit1: TSynEdit;
     
    3636    procedure FormDestroy(Sender: TObject);
    3737    procedure FormShow(Sender: TObject);
    38     procedure SynEdit2Change(Sender: TObject);
     38    procedure ListView1Click(Sender: TObject);
    3939  private
    4040    SourceCode: TMemoryStream;
     
    5959end;
    6060
    61 procedure TMainForm.SynEdit2Change(Sender: TObject);
     61procedure TMainForm.ListView1Click(Sender: TObject);
    6262begin
    63 
     63  if Assigned(ListView1.Selected) then begin
     64    SynEdit1.CaretXY := TErrorMessage(Compilator.ErrorMessages[
     65      ListView1.Selected.Index]).CodePosition;
     66    SynEdit1.SetFocus;
     67  end;
    6468end;
    6569
     
    8589var
    8690  Code: string;
     91  OutputFileName: string;
    8792begin
    8893  with Compilator do begin
    89     Memo3.Lines.Clear;
     94    ListView1.Clear;
    9095    Code := SynEdit1.Lines.Text;
    9196    SourceCode.Size := 0;
     
    95100      Generator := TPascalGenerator.Create;
    96101      SynEdit2.Highlighter := SynPasSyn1;
     102      OutputFileName := 'Output.dpr';
    97103    end else
    98104    if ComboBox1.ItemIndex = 1 then begin
    99105      Generator := TCGenerator.Create;
    100106      SynEdit2.Highlighter := SynCppSyn1;
     107      OutputFileName := 'Output.c';
    101108    end else
    102109    if ComboBox1.ItemIndex = 2 then begin
    103110      Generator := TZ80Generator.Create;
    104111      SynEdit2.Highlighter := SynCppSyn1;
     112      OutputFileName := 'Output.asm';
    105113    end;
    106     Compile;
     114
     115    try
     116      Compile;
     117    except
     118    end;
     119
    107120    SynEdit2.Lines.Assign(Generator.Output);
     121    SynEdit2.Lines.SaveToFile(OutputFileName);
    108122    ModelViewer.Show(TreeView1);
    109123  end;
     
    112126procedure TMainForm.CompilatorError(Text: string; var Terminate: Boolean;
    113127  Position: TPoint);
     128var
     129  NewItem: TListItem;
    114130begin
    115131  Terminate := False;
    116   Memo3.Lines.Add('(' + IntToStr(Position.X) + ', ' + IntToStr(Position.Y) + ') Error: ' + Text);
     132  NewItem := ListView1.Items.Add;
     133  with NewItem do begin
     134    Caption := '';
     135    SubItems.Add(IntToStr(Position.X) + ', ' + IntToStr(Position.Y));
     136    SubItems.Add('Error: ' + Text);
     137  end;
    117138end;
    118139
  • branches/Void/project1.lpi

    r16 r17  
    99      <Icon Value="0"/>
    1010      <UseXPManifest Value="True"/>
    11       <ActiveEditorIndexAtStart Value="6"/>
     11      <ActiveEditorIndexAtStart Value="1"/>
    1212    </General>
    1313    <VersionInfo>
     
    4242        <IsPartOfProject Value="True"/>
    4343        <UnitName Value="project1"/>
    44         <CursorPos X="15" Y="17"/>
    45         <TopLine Value="1"/>
    46         <EditorIndex Value="6"/>
    47         <UsageCount Value="46"/>
    48         <Loaded Value="True"/>
     44        <CursorPos X="51" Y="9"/>
     45        <TopLine Value="1"/>
     46        <UsageCount Value="47"/>
    4947      </Unit0>
    5048      <Unit1>
     
    5452        <ResourceBaseClass Value="Form"/>
    5553        <UnitName Value="UMainForm"/>
    56         <CursorPos X="83" Y="86"/>
    57         <TopLine Value="20"/>
     54        <CursorPos X="21" Y="131"/>
     55        <TopLine Value="114"/>
    5856        <EditorIndex Value="0"/>
    59         <UsageCount Value="46"/>
     57        <UsageCount Value="47"/>
    6058        <Loaded Value="True"/>
    6159      </Unit1>
     
    6361        <Filename Value="UCompilator.pas"/>
    6462        <UnitName Value="UCompilator"/>
    65         <CursorPos X="33" Y="182"/>
    66         <TopLine Value="161"/>
     63        <CursorPos X="18" Y="135"/>
     64        <TopLine Value="130"/>
    6765        <EditorIndex Value="2"/>
    68         <UsageCount Value="23"/>
     66        <UsageCount Value="24"/>
    6967        <Loaded Value="True"/>
    7068      </Unit2>
     
    7674        <TopLine Value="7"/>
    7775        <EditorIndex Value="4"/>
    78         <UsageCount Value="46"/>
     76        <UsageCount Value="47"/>
    7977        <Loaded Value="True"/>
    8078      </Unit3>
     
    8280        <Filename Value="Example.void"/>
    8381        <IsPartOfProject Value="True"/>
    84         <CursorPos X="4" Y="1"/>
    85         <TopLine Value="1"/>
    86         <UsageCount Value="46"/>
     82        <CursorPos X="8" Y="7"/>
     83        <TopLine Value="1"/>
     84        <UsageCount Value="47"/>
    8785        <SyntaxHighlighter Value="None"/>
    8886      </Unit4>
     
    9391        <CursorPos X="11" Y="75"/>
    9492        <TopLine Value="53"/>
    95         <EditorIndex Value="9"/>
    96         <UsageCount Value="46"/>
     93        <EditorIndex Value="8"/>
     94        <UsageCount Value="47"/>
    9795        <Loaded Value="True"/>
    9896      </Unit5>
     
    129127        <TopLine Value="140"/>
    130128        <EditorIndex Value="3"/>
    131         <UsageCount Value="46"/>
     129        <UsageCount Value="47"/>
    132130        <Loaded Value="True"/>
    133131      </Unit10>
     
    162160        <IsPartOfProject Value="True"/>
    163161        <UnitName Value="UModelViewer"/>
    164         <CursorPos X="41" Y="31"/>
     162        <CursorPos X="14" Y="19"/>
    165163        <TopLine Value="16"/>
    166164        <EditorIndex Value="1"/>
    167         <UsageCount Value="22"/>
     165        <UsageCount Value="23"/>
    168166        <Loaded Value="True"/>
    169167      </Unit15>
     
    181179        <TopLine Value="47"/>
    182180        <EditorIndex Value="5"/>
    183         <UsageCount Value="21"/>
     181        <UsageCount Value="22"/>
    184182        <Loaded Value="True"/>
    185183      </Unit17>
     
    190188        <CursorPos X="56" Y="8"/>
    191189        <TopLine Value="1"/>
    192         <EditorIndex Value="8"/>
    193         <UsageCount Value="21"/>
     190        <EditorIndex Value="7"/>
     191        <UsageCount Value="22"/>
    194192        <Loaded Value="True"/>
    195193      </Unit18>
     
    198196        <IsPartOfProject Value="True"/>
    199197        <UnitName Value="UPascalGenerator"/>
    200         <CursorPos X="1" Y="35"/>
    201         <TopLine Value="13"/>
    202         <EditorIndex Value="7"/>
    203         <UsageCount Value="21"/>
     198        <CursorPos X="27" Y="61"/>
     199        <TopLine Value="53"/>
     200        <EditorIndex Value="6"/>
     201        <UsageCount Value="22"/>
    204202        <Loaded Value="True"/>
    205203      </Unit19>
     
    208206      <Position1>
    209207        <Filename Value="UMainForm.pas"/>
    210         <Caret Line="74" Column="49" TopLine="61"/>
     208        <Caret Line="105" Column="1" TopLine="79"/>
    211209      </Position1>
    212210      <Position2>
    213211        <Filename Value="UMainForm.pas"/>
    214         <Caret Line="84" Column="44" TopLine="69"/>
     212        <Caret Line="41" Column="1" TopLine="26"/>
    215213      </Position2>
    216214      <Position3>
    217215        <Filename Value="UMainForm.pas"/>
    218         <Caret Line="92" Column="33" TopLine="60"/>
     216        <Caret Line="39" Column="31" TopLine="17"/>
    219217      </Position3>
    220218      <Position4>
    221         <Filename Value="UMainForm.pas"/>
    222         <Caret Line="93" Column="33" TopLine="63"/>
     219        <Filename Value="UModelViewer.pas"/>
     220        <Caret Line="23" Column="12" TopLine="1"/>
    223221      </Position4>
    224222      <Position5>
    225         <Filename Value="UMainForm.pas"/>
    226         <Caret Line="92" Column="33" TopLine="63"/>
     223        <Filename Value="UModelViewer.pas"/>
     224        <Caret Line="25" Column="25" TopLine="5"/>
    227225      </Position5>
    228226      <Position6>
    229         <Filename Value="UMainForm.pas"/>
    230         <Caret Line="93" Column="33" TopLine="63"/>
     227        <Filename Value="UModelViewer.pas"/>
     228        <Caret Line="17" Column="48" TopLine="4"/>
    231229      </Position6>
    232230      <Position7>
    233         <Filename Value="UMainForm.pas"/>
    234         <Caret Line="41" Column="29" TopLine="16"/>
     231        <Filename Value="UModelViewer.pas"/>
     232        <Caret Line="26" Column="3" TopLine="15"/>
    235233      </Position7>
    236234      <Position8>
    237         <Filename Value="UMainForm.pas"/>
    238         <Caret Line="113" Column="1" TopLine="83"/>
     235        <Filename Value="UModelViewer.pas"/>
     236        <Caret Line="17" Column="46" TopLine="2"/>
    239237      </Position8>
    240238      <Position9>
    241         <Filename Value="UMainForm.pas"/>
    242         <Caret Line="110" Column="32" TopLine="90"/>
     239        <Filename Value="UModelViewer.pas"/>
     240        <Caret Line="36" Column="11" TopLine="15"/>
    243241      </Position9>
    244242      <Position10>
    245         <Filename Value="UMainForm.pas"/>
    246         <Caret Line="113" Column="49" TopLine="89"/>
     243        <Filename Value="UCompilator.pas"/>
     244        <Caret Line="220" Column="82" TopLine="207"/>
    247245      </Position10>
    248246      <Position11>
    249         <Filename Value="UModelViewer.pas"/>
    250         <Caret Line="16" Column="17" TopLine="1"/>
     247        <Filename Value="UVoidParser.pas"/>
     248        <Caret Line="89" Column="29" TopLine="72"/>
    251249      </Position11>
    252250      <Position12>
    253         <Filename Value="UMainForm.pas"/>
    254         <Caret Line="105" Column="1" TopLine="79"/>
     251        <Filename Value="UOutputGenerator.pas"/>
     252        <Caret Line="78" Column="42" TopLine="53"/>
    255253      </Position12>
    256254      <Position13>
    257255        <Filename Value="UMainForm.pas"/>
    258         <Caret Line="41" Column="1" TopLine="26"/>
     256        <Caret Line="10" Column="16" TopLine="1"/>
    259257      </Position13>
    260258      <Position14>
    261         <Filename Value="UMainForm.pas"/>
    262         <Caret Line="39" Column="31" TopLine="17"/>
     259        <Filename Value="Generators\UPascalGenerator.pas"/>
     260        <Caret Line="8" Column="56" TopLine="1"/>
    263261      </Position14>
    264262      <Position15>
    265         <Filename Value="UModelViewer.pas"/>
    266         <Caret Line="23" Column="12" TopLine="1"/>
     263        <Filename Value="Generators\UPascalGenerator.pas"/>
     264        <Caret Line="56" Column="18" TopLine="1"/>
    267265      </Position15>
    268266      <Position16>
    269         <Filename Value="UModelViewer.pas"/>
    270         <Caret Line="25" Column="25" TopLine="5"/>
     267        <Filename Value="Generators\UPascalGenerator.pas"/>
     268        <Caret Line="11" Column="36" TopLine="1"/>
    271269      </Position16>
    272270      <Position17>
    273         <Filename Value="UModelViewer.pas"/>
    274         <Caret Line="17" Column="48" TopLine="4"/>
     271        <Filename Value="Generators\UZ80Generator.pas"/>
     272        <Caret Line="8" Column="56" TopLine="4"/>
    275273      </Position17>
    276274      <Position18>
    277         <Filename Value="UModelViewer.pas"/>
    278         <Caret Line="26" Column="3" TopLine="15"/>
     275        <Filename Value="UMainForm.pas"/>
     276        <Caret Line="94" Column="1" TopLine="71"/>
    279277      </Position18>
    280278      <Position19>
    281         <Filename Value="UModelViewer.pas"/>
    282         <Caret Line="17" Column="46" TopLine="2"/>
     279        <Filename Value="UMainForm.pas"/>
     280        <Caret Line="97" Column="28" TopLine="1"/>
    283281      </Position19>
    284282      <Position20>
    285         <Filename Value="UModelViewer.pas"/>
    286         <Caret Line="36" Column="11" TopLine="15"/>
     283        <Filename Value="UCompilator.pas"/>
     284        <Caret Line="269" Column="19" TopLine="243"/>
    287285      </Position20>
    288286      <Position21>
    289287        <Filename Value="UCompilator.pas"/>
    290         <Caret Line="220" Column="82" TopLine="207"/>
     288        <Caret Line="41" Column="40" TopLine="23"/>
    291289      </Position21>
    292290      <Position22>
    293         <Filename Value="UVoidParser.pas"/>
    294         <Caret Line="89" Column="29" TopLine="72"/>
     291        <Filename Value="UMainForm.pas"/>
     292        <Caret Line="110" Column="5" TopLine="60"/>
    295293      </Position22>
    296294      <Position23>
    297         <Filename Value="UOutputGenerator.pas"/>
    298         <Caret Line="78" Column="42" TopLine="53"/>
     295        <Filename Value="UMainForm.pas"/>
     296        <Caret Line="109" Column="5" TopLine="79"/>
    299297      </Position23>
    300298      <Position24>
    301299        <Filename Value="UMainForm.pas"/>
    302         <Caret Line="10" Column="16" TopLine="1"/>
     300        <Caret Line="110" Column="5" TopLine="80"/>
    303301      </Position24>
    304302      <Position25>
    305         <Filename Value="Generators\UPascalGenerator.pas"/>
    306         <Caret Line="8" Column="56" TopLine="1"/>
     303        <Filename Value="UMainForm.pas"/>
     304        <Caret Line="90" Column="15" TopLine="75"/>
    307305      </Position25>
    308306      <Position26>
    309         <Filename Value="Generators\UPascalGenerator.pas"/>
    310         <Caret Line="56" Column="18" TopLine="1"/>
     307        <Filename Value="UMainForm.pas"/>
     308        <Caret Line="119" Column="34" TopLine="105"/>
    311309      </Position26>
    312310      <Position27>
    313         <Filename Value="Generators\UPascalGenerator.pas"/>
    314         <Caret Line="11" Column="36" TopLine="1"/>
     311        <Filename Value="UMainForm.pas"/>
     312        <Caret Line="10" Column="32" TopLine="1"/>
    315313      </Position27>
    316314      <Position28>
    317         <Filename Value="Generators\UZ80Generator.pas"/>
    318         <Caret Line="8" Column="56" TopLine="4"/>
     315        <Filename Value="UMainForm.pas"/>
     316        <Caret Line="40" Column="5" TopLine="25"/>
    319317      </Position28>
    320318      <Position29>
    321319        <Filename Value="UMainForm.pas"/>
    322         <Caret Line="94" Column="1" TopLine="71"/>
     320        <Caret Line="10" Column="32" TopLine="1"/>
    323321      </Position29>
    324322      <Position30>
    325         <Filename Value="project1.lpr"/>
    326         <Caret Line="10" Column="33" TopLine="1"/>
     323        <Filename Value="UMainForm.pas"/>
     324        <Caret Line="67" Column="1" TopLine="53"/>
    327325      </Position30>
    328326    </JumpHistory>
Note: See TracChangeset for help on using the changeset viewer.