Changeset 58


Ignore:
Timestamp:
Aug 10, 2010, 3:41:49 PM (14 years ago)
Author:
george
Message:

Slightly enhanced parsing of unit.

Location:
branches/Transpascal
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • branches/Transpascal/Analyze/UParser.pas

    r55 r58  
    5757    procedure ParseProgram(SourceCode: TModuleProgram);
    5858    procedure ParseCommonBlock(SourceCode: TCommonBlock; EndSymbol: char = ';');
     59    procedure ParseCommonBlockInterface(SourceCode: TCommonBlock);
    5960    function ParseCommand(SourceCode: TCommonBlock): TCommand;
    6061    procedure ParseBeginEnd(SourceCode: TBeginEnd);
    61     procedure ParseFunctionList(SourceCode: TFunctionList);
     62    procedure ParseFunctionList(SourceCode: TFunctionList; IncludeBody: Boolean = True);
    6263    procedure ParseIfThenElse(SourceCode: TIfThenElse);
    6364    procedure ParseForToDo(SourceCode: TForToDo);
     
    682683    ParseUsedModuleList(SourceCode.UsedModules);
    683684
    684   ParseCommonBlock(SourceCode.Body, '.');
     685  ParseCommonBlockInterface(SourceCode.Body);
    685686end;
    686687
     
    725726end;
    726727
     728procedure TPascalParser.ParseCommonBlockInterface(SourceCode: TCommonBlock);
     729begin
     730  with SourceCode do begin
     731    while FNextToken <> 'implementation' do begin
     732      if FNextToken = 'var' then
     733        ParseVariableList(Variables)
     734      else if FNextToken = 'const' then
     735        ParseConstantList(Constants)
     736      else if FNextToken = 'type' then
     737        ParseTypeList(Types)
     738      else if FNextToken = 'procedure' then
     739        ParseFunctionList(Functions, False)
     740      else if FNextToken = 'function' then
     741        ParseFunctionList(Functions, False)
     742      else ErrorMessage(SUnknownIdentifier, [FNextToken]);
     743    end;
     744  end;
     745end;
     746
    727747{ TParserBeginEnd }
    728748
     
    750770{ TParserParseFunctionList }
    751771
    752 procedure TPascalParser.ParseFunctionList(SourceCode: TFunctionList);
     772procedure TPascalParser.ParseFunctionList(SourceCode: TFunctionList; IncludeBody: Boolean = True);
    753773var
    754774  Identifiers: TStringList;
     
    760780begin
    761781  Identifiers := TStringList.Create;
    762   with SourceCode do
    763   begin
    764     with TFunction(Items[Add(TFunction.Create)]) do
    765     begin
     782  with SourceCode do begin
     783    with TFunction(Items[Add(TFunction.Create)]) do begin
    766784      Parent := SourceCode.Parent;
    767785      if FNextToken = 'procedure' then
     
    834852        end;
    835853      end;
    836     end;
    837     Expect(';');
    838     ParseCommonBlock(TFunction(Last));
     854      Expect(';');
     855
     856      // Check directives
     857      if FNextToken = 'internal' then begin
     858        Expect('internal');
     859        Expect(';');
     860        System := True;
     861      end;
     862    end;
     863
     864    if IncludeBody then ParseCommonBlock(TFunction(Last));
    839865  end;
    840866  Identifiers.Destroy;
  • branches/Transpascal/Project/System.pas

    r55 r58  
    44
    55type
    6   Void = System;
    7   Byte = System;
    8   ShortInt = System;
    9   Word = System;
    10   SmallInt = System;
    11   Cardinal = System;
     6  Void = internal;
     7  Byte = internal;
     8  ShortInt = internal;
     9  Word = internal;
     10  SmallInt = internal;
     11  Cardinal = internal;
    1212  DWord = Cardinal;
    13   Integer = System;
    14   QWord = System;
    15   Int64 = System;
    16   Char = System;
     13  Integer = internal;
     14  QWord = internal;
     15  Int64 = internal;
     16  Char = internal;
    1717  String = array of Char;
    1818
    1919
    20 procedure Exit; system;
    21 procedure Break; system;
    22 procedure Continue; system;
     20procedure Exit; internal;
     21procedure Break; internal;
     22procedure Continue; internal;
    2323
    2424implementation
  • branches/Transpascal/Transpascal.lpi

    r55 r58  
    5050        <TopLine Value="4"/>
    5151        <CursorPos X="1" Y="29"/>
    52         <UsageCount Value="148"/>
     52        <UsageCount Value="152"/>
    5353        <Loaded Value="True"/>
    5454      </Unit0>
     
    6060        <ResourceBaseClass Value="Form"/>
    6161        <UnitName Value="UMainForm"/>
    62         <IsVisibleTab Value="True"/>
    6362        <EditorIndex Value="6"/>
    6463        <WindowIndex Value="0"/>
    65         <TopLine Value="207"/>
    66         <CursorPos X="10" Y="224"/>
    67         <UsageCount Value="148"/>
     64        <TopLine Value="66"/>
     65        <CursorPos X="1" Y="85"/>
     66        <UsageCount Value="152"/>
    6867        <Loaded Value="True"/>
    6968        <LoadedDesigner Value="True"/>
     
    7675        <TopLine Value="1"/>
    7776        <CursorPos X="1" Y="1"/>
    78         <UsageCount Value="148"/>
     77        <UsageCount Value="152"/>
    7978      </Unit2>
    8079      <Unit3>
     
    8685        <TopLine Value="761"/>
    8786        <CursorPos X="13" Y="784"/>
    88         <UsageCount Value="148"/>
     87        <UsageCount Value="152"/>
    8988        <Loaded Value="True"/>
    9089      </Unit3>
     
    9392        <IsPartOfProject Value="True"/>
    9493        <UnitName Value="UCompiler"/>
     94        <IsVisibleTab Value="True"/>
    9595        <EditorIndex Value="14"/>
    9696        <WindowIndex Value="0"/>
    97         <TopLine Value="1"/>
    98         <CursorPos X="5" Y="17"/>
    99         <UsageCount Value="148"/>
     97        <TopLine Value="34"/>
     98        <CursorPos X="68" Y="51"/>
     99        <UsageCount Value="152"/>
    100100        <Loaded Value="True"/>
    101101      </Unit4>
     
    108108        <TopLine Value="179"/>
    109109        <CursorPos X="3" Y="196"/>
    110         <UsageCount Value="148"/>
     110        <UsageCount Value="152"/>
    111111        <Loaded Value="True"/>
    112112      </Unit5>
     
    119119        <TopLine Value="1"/>
    120120        <CursorPos X="38" Y="12"/>
    121         <UsageCount Value="148"/>
     121        <UsageCount Value="152"/>
    122122        <Loaded Value="True"/>
    123123      </Unit6>
     
    130130        <TopLine Value="104"/>
    131131        <CursorPos X="52" Y="119"/>
    132         <UsageCount Value="148"/>
     132        <UsageCount Value="152"/>
    133133        <Loaded Value="True"/>
    134134      </Unit7>
     
    139139        <EditorIndex Value="0"/>
    140140        <WindowIndex Value="0"/>
    141         <TopLine Value="680"/>
    142         <CursorPos X="25" Y="689"/>
    143         <UsageCount Value="148"/>
     141        <TopLine Value="42"/>
     142        <CursorPos X="26" Y="55"/>
     143        <UsageCount Value="152"/>
    144144        <Loaded Value="True"/>
    145145      </Unit8>
     
    159159        <TopLine Value="936"/>
    160160        <CursorPos X="23" Y="949"/>
    161         <UsageCount Value="10"/>
     161        <UsageCount Value="12"/>
    162162        <Loaded Value="True"/>
    163163      </Unit10>
     
    168168        <TopLine Value="61"/>
    169169        <CursorPos X="7" Y="68"/>
    170         <UsageCount Value="57"/>
     170        <UsageCount Value="59"/>
    171171        <Loaded Value="True"/>
    172172      </Unit11>
     
    177177        <TopLine Value="139"/>
    178178        <CursorPos X="16" Y="146"/>
    179         <UsageCount Value="57"/>
     179        <UsageCount Value="59"/>
    180180        <Loaded Value="True"/>
    181181      </Unit12>
     
    209209        <TopLine Value="277"/>
    210210        <CursorPos X="26" Y="291"/>
    211         <UsageCount Value="110"/>
     211        <UsageCount Value="114"/>
    212212        <Loaded Value="True"/>
    213213      </Unit16>
     
    233233        <EditorIndex Value="8"/>
    234234        <WindowIndex Value="0"/>
    235         <TopLine Value="77"/>
    236         <CursorPos X="34" Y="93"/>
    237         <UsageCount Value="64"/>
     235        <TopLine Value="141"/>
     236        <CursorPos X="1" Y="154"/>
     237        <UsageCount Value="68"/>
    238238        <Loaded Value="True"/>
    239239      </Unit19>
     
    244244        <EditorIndex Value="11"/>
    245245        <WindowIndex Value="0"/>
    246         <TopLine Value="78"/>
    247         <CursorPos X="1" Y="99"/>
    248         <UsageCount Value="20"/>
     246        <TopLine Value="129"/>
     247        <CursorPos X="1" Y="151"/>
     248        <UsageCount Value="24"/>
    249249        <Loaded Value="True"/>
    250250      </Unit20>
     
    255255        <TopLine Value="17"/>
    256256        <CursorPos X="11" Y="30"/>
    257         <UsageCount Value="10"/>
     257        <UsageCount Value="12"/>
    258258        <Loaded Value="True"/>
    259259      </Unit21>
    260260    </Units>
    261     <JumpHistory Count="30" HistoryIndex="29">
     261    <JumpHistory Count="30" HistoryIndex="22">
    262262      <Position1>
    263263        <Filename Value="Forms\UMainForm.pas"/>
    264         <Caret Line="131" Column="21" TopLine="118"/>
     264        <Caret Line="124" Column="1" TopLine="110"/>
    265265      </Position1>
    266266      <Position2>
    267         <Filename Value="Forms\UMainForm.pas"/>
    268         <Caret Line="120" Column="40" TopLine="109"/>
     267        <Filename Value="Analyze\UParser.pas"/>
     268        <Caret Line="61" Column="1" TopLine="48"/>
    269269      </Position2>
    270270      <Position3>
    271         <Filename Value="UProject.pas"/>
    272         <Caret Line="30" Column="58" TopLine="14"/>
     271        <Filename Value="Analyze\UParser.pas"/>
     272        <Caret Line="838" Column="25" TopLine="816"/>
    273273      </Position3>
    274274      <Position4>
    275         <Filename Value="UProject.pas"/>
    276         <Caret Line="91" Column="49" TopLine="82"/>
     275        <Filename Value="Analyze\UParser.pas"/>
     276        <Caret Line="59" Column="35" TopLine="45"/>
    277277      </Position4>
    278278      <Position5>
    279         <Filename Value="UProject.pas"/>
    280         <Caret Line="92" Column="49" TopLine="82"/>
     279        <Filename Value="Analyze\UParser.pas"/>
     280        <Caret Line="741" Column="38" TopLine="728"/>
    281281      </Position5>
    282282      <Position6>
    283         <Filename Value="UProject.pas"/>
    284         <Caret Line="44" Column="3" TopLine="19"/>
     283        <Filename Value="Analyze\UParser.pas"/>
     284        <Caret Line="732" Column="32" TopLine="719"/>
    285285      </Position6>
    286286      <Position7>
    287         <Filename Value="Forms\UMainForm.pas"/>
    288         <Caret Line="120" Column="40" TopLine="109"/>
     287        <Filename Value="Analyze\UParser.pas"/>
     288        <Caret Line="703" Column="1" TopLine="700"/>
    289289      </Position7>
    290290      <Position8>
    291         <Filename Value="Forms\UMainForm.pas"/>
    292         <Caret Line="122" Column="39" TopLine="106"/>
     291        <Filename Value="Analyze\UParser.pas"/>
     292        <Caret Line="742" Column="36" TopLine="724"/>
    293293      </Position8>
    294294      <Position9>
    295295        <Filename Value="Forms\UMainForm.pas"/>
    296         <Caret Line="121" Column="22" TopLine="108"/>
     296        <Caret Line="147" Column="74" TopLine="141"/>
    297297      </Position9>
    298298      <Position10>
    299299        <Filename Value="Forms\UMainForm.pas"/>
    300         <Caret Line="124" Column="52" TopLine="110"/>
     300        <Caret Line="58" Column="3" TopLine="66"/>
    301301      </Position10>
    302302      <Position11>
    303303        <Filename Value="Forms\UMainForm.pas"/>
    304         <Caret Line="123" Column="1" TopLine="110"/>
     304        <Caret Line="81" Column="1" TopLine="66"/>
    305305      </Position11>
    306306      <Position12>
    307307        <Filename Value="Forms\UMainForm.pas"/>
    308         <Caret Line="125" Column="1" TopLine="110"/>
     308        <Caret Line="82" Column="1" TopLine="66"/>
    309309      </Position12>
    310310      <Position13>
    311311        <Filename Value="Forms\UMainForm.pas"/>
    312         <Caret Line="122" Column="1" TopLine="110"/>
     312        <Caret Line="83" Column="1" TopLine="66"/>
    313313      </Position13>
    314314      <Position14>
    315         <Filename Value="UProject.pas"/>
    316         <Caret Line="86" Column="1" TopLine="74"/>
     315        <Filename Value="Forms\UMainForm.pas"/>
     316        <Caret Line="84" Column="1" TopLine="66"/>
    317317      </Position14>
    318318      <Position15>
    319         <Filename Value="UProject.pas"/>
    320         <Caret Line="87" Column="1" TopLine="74"/>
     319        <Filename Value="Forms\UMainForm.pas"/>
     320        <Caret Line="85" Column="1" TopLine="66"/>
    321321      </Position15>
    322322      <Position16>
    323323        <Filename Value="UProject.pas"/>
    324         <Caret Line="86" Column="44" TopLine="74"/>
     324        <Caret Line="150" Column="1" TopLine="129"/>
    325325      </Position16>
    326326      <Position17>
    327         <Filename Value="Forms\UMainForm.pas"/>
    328         <Caret Line="122" Column="1" TopLine="110"/>
     327        <Filename Value="UProject.pas"/>
     328        <Caret Line="151" Column="1" TopLine="129"/>
    329329      </Position17>
    330330      <Position18>
    331         <Filename Value="UProject.pas"/>
    332         <Caret Line="86" Column="1" TopLine="74"/>
     331        <Filename Value="UCompiler.pas"/>
     332        <Caret Line="47" Column="1" TopLine="34"/>
    333333      </Position18>
    334334      <Position19>
    335         <Filename Value="UProject.pas"/>
    336         <Caret Line="87" Column="1" TopLine="74"/>
     335        <Filename Value="UCompiler.pas"/>
     336        <Caret Line="48" Column="1" TopLine="34"/>
    337337      </Position19>
    338338      <Position20>
    339         <Filename Value="UProject.pas"/>
    340         <Caret Line="89" Column="1" TopLine="74"/>
     339        <Filename Value="UCompiler.pas"/>
     340        <Caret Line="49" Column="1" TopLine="34"/>
    341341      </Position20>
    342342      <Position21>
    343         <Filename Value="UProject.pas"/>
    344         <Caret Line="90" Column="1" TopLine="74"/>
     343        <Filename Value="UCompiler.pas"/>
     344        <Caret Line="50" Column="1" TopLine="34"/>
    345345      </Position21>
    346346      <Position22>
    347         <Filename Value="UProject.pas"/>
    348         <Caret Line="91" Column="1" TopLine="74"/>
     347        <Filename Value="UCompiler.pas"/>
     348        <Caret Line="51" Column="1" TopLine="34"/>
    349349      </Position22>
    350350      <Position23>
    351         <Filename Value="UProject.pas"/>
    352         <Caret Line="92" Column="1" TopLine="74"/>
     351        <Filename Value="UCompiler.pas"/>
     352        <Caret Line="52" Column="1" TopLine="34"/>
    353353      </Position23>
    354354      <Position24>
    355         <Filename Value="UProject.pas"/>
    356         <Caret Line="93" Column="1" TopLine="74"/>
     355        <Filename Value="Produce\UProducerPascal.pas"/>
     356        <Caret Line="154" Column="1" TopLine="141"/>
    357357      </Position24>
    358358      <Position25>
    359         <Filename Value="UProject.pas"/>
    360         <Caret Line="86" Column="1" TopLine="74"/>
     359        <Filename Value="Produce\UProducerPascal.pas"/>
     360        <Caret Line="155" Column="1" TopLine="141"/>
    361361      </Position25>
    362362      <Position26>
    363         <Filename Value="UProject.pas"/>
    364         <Caret Line="99" Column="1" TopLine="78"/>
     363        <Filename Value="Produce\UProducerPascal.pas"/>
     364        <Caret Line="156" Column="1" TopLine="141"/>
    365365      </Position26>
    366366      <Position27>
    367         <Filename Value="UProject.pas"/>
    368         <Caret Line="86" Column="1" TopLine="78"/>
     367        <Filename Value="Produce\UProducerPascal.pas"/>
     368        <Caret Line="85" Column="1" TopLine="72"/>
    369369      </Position27>
    370370      <Position28>
    371         <Filename Value="UProject.pas"/>
    372         <Caret Line="99" Column="1" TopLine="78"/>
     371        <Filename Value="Produce\UProducerPascal.pas"/>
     372        <Caret Line="86" Column="1" TopLine="72"/>
    373373      </Position28>
    374374      <Position29>
    375         <Filename Value="Forms\UMainForm.pas"/>
    376         <Caret Line="123" Column="1" TopLine="110"/>
     375        <Filename Value="Produce\UProducerPascal.pas"/>
     376        <Caret Line="95" Column="1" TopLine="74"/>
    377377      </Position29>
    378378      <Position30>
    379         <Filename Value="Forms\UMainForm.pas"/>
    380         <Caret Line="124" Column="1" TopLine="110"/>
     379        <Filename Value="Produce\UProducerPascal.pas"/>
     380        <Caret Line="86" Column="7" TopLine="75"/>
    381381      </Position30>
    382382    </JumpHistory>
     
    419419  </CompilerOptions>
    420420  <Debugging>
     421    <BreakPoints Count="1">
     422      <Item1>
     423        <Source Value="Forms\UMainForm.pas"/>
     424        <Line Value="81"/>
     425      </Item1>
     426    </BreakPoints>
    421427    <Exceptions Count="3">
    422428      <Item1>
  • branches/Transpascal/UCompiler.pas

    r55 r58  
    4949  Parser.SourceCodeText := Source;
    5050  Parser.Init;
    51   ProgramCode.Modules.Add(Parser.ParseModule);
     51  NewModule := Parser.ParseModule;
     52  ProgramCode.Modules.Add(NewModule);
    5253  Producer.Produce(NewModule, ProducedCode);
    5354end;
Note: See TracChangeset for help on using the changeset viewer.