Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

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

Delphi , Компоненты и Классы , TParser

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

Автор: 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;

Класс TParser, используемый для парсинга единиц Delphi и создания документации. Подкласс TDelphiUnitParser имеет специфические методы для парсинга разделов интерфейса в единицах Delphi.

Предоставленные процедуры:

  1. CheckSectionBreak: Функция проверяет, является ли текущий токен разделом (например, Var, Const, Type и т.д.). Возвращает True, если это так, и False в противном случае.
  2. ParseParameterList: Процедура пропускает открывающую скобку списка параметров и затем читает до тех пор, пока не найдет закрывающую скобку.
  3. ParseRecord: Процедура пропускает ключевое слово record и затем читает до тех пор, пока не найдет ключевое слово end или другую декларацию записи.
  4. ParseDeclaration: Процедура читает декларации (например, переменная, функция и т.д.) до тех пор, пока не найдет точку с запятой.
  5. ParseConst: Процедура парсит декларации констант в формате идентификатор = значение;.

Шаг за шагом: как эти процедуры работают:

  1. CheckSectionBreak:
    • Проверяет, является ли текущий токен символом (то есть не ключевым словом).
    • Если это так, сравнивает его с известными разделами (например, Var, Const, Type и т.д.). Если совпадает, возвращает True.
  2. ParseParameterList:
    • Пропускает открывающую скобку.
    • Затем читает до тех пор, пока не найдет закрывающую скобку.
  3. ParseRecord:
    • Пропускает ключевое слово record.
    • Затем читает до тех пор, пока не найдет ключевое слово end или другую декларацию записи.
  4. ParseDeclaration:
    • Читает декларации (например, переменная, функция и т.д.) до тех пор, пока не найдет точку с запятой.
  5. ParseConst:
    • Читает идентификатор и затем проверяет, является ли он равен = или :. Если нет, выкидывает ошибку.
    • Затем парсит декларацию используя ParseDeclaration.
    • Наконец, повторяет это процесс до тех пор, пока не достигнет раздела.

Обратите внимание, что эти процедуры специфичны для единиц Delphi и могут не быть применимы к другим языкам программирования.

Пример использования класса TParser в Delphi для парсинга секции Interface модуля и создания документации компонента напрямую из исходного кода.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: TParser ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-04-09 15:05:03/0.0034999847412109/0