Советы по Delphi

         

Использование TParser


Вы просили пример кода использования TParser. Хорошо, вот несколько процедур для модуля Parser для создания документации Delphi-компонент напрямую из исходного кода.

TDelphiUnitParser - подкласс со специфическими методами, позволяющими парсировать секцию Interface модуля Delphi. Вы можете не использовать этого наследника TParser в вашем коде - это просто иллюстрация того, как можно использовать некоторые свойства и методы TParser. Присылайте мне другие ваши решения по этому вопросу.

{ TDelphiUnitParser }

function TDelphiUnitParser.CheckSectionBreak : Boolean ;

begin
with
Parser do beginResult := ( Token = toSymbol ) and( Compare( 'Var' ) orCompare( 'Const' ) orCompare( 'Type' ) orCompare( 'Implementation' ) orCompare( 'Procedure' ) orCompare( 'Function' ) ) ;end ;end ;

procedure TDelphiUnitParser.ParseParameterList ;

begin
with
Parser do begin{ пропускаем '(' }NextToken ;while Token <> ')' do NextToken ;NextToken ;end ;end ;

procedure TDelphiUnitParser.ParseRecord ;

begin
with
Parser do begin{ пропускаем 'record' }NextToken ;while ( Token <> toSymbol ) or not Compare( 'End' ) dobeginif Token = 'Record' then ParseRecord else NextToken ;end ;end ;end ;


procedure TDelphiUnitParser.ParseDeclaration ;

begin
with
Parser do beginwhile Token <> ';' do beginif Token = '(' then ParseParameterList elseif ( Token = toSymbol ) and Compare( 'Record' ) thenParseRecord elseNextToken ;end ;end ;end ;


procedure TDelphiUnitParser.ParseConst ;

var AString : String ;
AStart : PChar ;EndOfConsts : Boolean ;
begin
with
Parser do beginNextToken ;repeatif Token <> toSymbol then ErrorStr( 'Неопознанный идентификатор' ) ;AString := TokenString ;AStart := FSourcePtr ;NextToken ;if not( Token in [ '=', ':' ] ) then ErrorStr( '''='' or '':''ожидалось' ) ;
ParseDeclaration ;FindToken( ';' ) ;until CheckSectionBreak ;end ;end ;

--- Mike Scott --- [000435]



Содержание раздела