Автор: Mike Scott
Вы просили пример кода использования TParser. Хорошо, вот несколько процедур
для модуля Parser для создания документации Delphi-компонент напрямую из
исходного кода.
TDelphiUnitParser - подкласс со специфическими методами, позволяющими
парсировать секцию Interface модуля Delphi. Вы можете не использовать этого
наследника TParser в вашем коде - это просто иллюстрация того, как можно
использовать некоторые свойства и методы TParser. Присылайте мне другие ваши
решения по этому вопросу.
{ TDelphiUnitParser }
function TDelphiUnitParser.CheckSectionBreak: Boolean;
begin
with Parser do
begin
Result := (Token = toSymbol) and
(Compare('Var') or
Compare('Const') or
Compare('Type') or
Compare('Implementation') or
Compare('Procedure') or
Compare('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') do
begin
if Token = 'Record' then
ParseRecord
else
NextToken;
end;
end;
end;
procedure TDelphiUnitParser.ParseDeclaration;
begin
with Parser do
begin
while Token <> ';' do
begin
if Token = '(' then
ParseParameterList
else if (Token = toSymbol) and Compare('Record') then
ParseRecord
else
NextToken;
end;
end;
end;
procedure TDelphiUnitParser.ParseConst;
var
AString: string;
AStart: PChar;
EndOfConsts: Boolean;
begin
with Parser do
begin
NextToken;
repeat
if Token <> toSymbol then
ErrorStr('Неопознанный идентификатор');
AString := TokenString;
AStart := FSourcePtr;
NextToken;
if not (Token in ['=', ':']) then
ErrorStr('''='' or '':''
ожидалось' ) ;
ParseDeclaration;
FindToken(';');
until CheckSectionBreak;
end;
end;
|
|