Читаем О чём не пишут в книгах по Delphi полностью

// Помещение лексемы в список. Параметры метода задают

// одноименные поля типа TLexeme.

procedure TLexicalAnalyzer.PutLexeme(LexemeType: TLexemeType; Pos: Integer; const Lexeme: string);

var

 NewLexeme: PLexeme;

begin

 New(NewLexeme);

 NewLexeme^.LexemeType:= LexemeType;

 NewLexeme^.Pos:= Pos;

 NewLexeme^.Lexeme:= Lexeme;

 FLexemeList.Add(NewLexeme);

end;

// пропускает пробелы, символы табуляции, комментарии и переводы строки,

// которые могут находиться в начале и в конце строки и между лексемами

procedure TLexicalAnalyzer.SkipWhiteSpace(const S: string; var P: Integer);

begin

 while (P <= Length(S)) and (S[P] in [' ', #9, #13, #10, '{']) do

 if S[P] = '{' then

 begin

Inc(P);

while (P <-=Length(S)) and (S[P) <> '}') do Inc(P);

if P > Length(S) then

raise ESyntaxError.Create('Незавершенный комментарий');

Inc(P);

 end

 else Inc(P);

end;

// Функция выделяет одну лексему и помещает ее в список

procedure TLexicalAnalyzer.ExtractLexeme(const S: string; var P: Integer);

begin

 if P > Length(S) then Exit;

 case S[P] of

 '(': begin

 PutLexeme(ltLeftBracket, P, '');

 Inc(P);

 end;

 ')': begin

 PutLexeme(ltRightBracket, P, '');

 Inc(P);

 end;

 '*': begin

PutLexeme(ltAsterisk, P, '');

Inc(P);

 end;

 '+': begin

PutLexeme(ltPlus, P, '');

Inc(P);

 end;

 '-': begin

PutLexeme(ltMinus, P, '');

 Inc(P);

 end;

 '/': begin

PutLexeme(ltSlash, P, '');

 Inc(P);

 end;

 '0'..'9': Number(S, P);

 '<':if (P < Length(S)) and (S[P + 1] = '=') then

 begin

PutLexeme(ltLessOrEqual, P, '');

 Inc(P, 2);

 end

 else

 if (P < Length(S)) and (S[P + 1] = '>') then

 begin

PutLexeme(ltNotEqual, P, '');

 Inc(P, 2);

end

 else

 begin

PutLexeme(ltLess, P, '');

 Inc(P);

 end;

 '=': begin

PutLexeme(ltEqual, P, '');

 Inc(P);

 end;

 '>': if (P < Length(S)) and (S[P + 1] = '=') then

 begin

PutLexeme(ltGreaterOrEqual, P, '');

Inc(P, 2);

 end

 else

 begin

PutLexeme(ltGreater, P, '');

 Inc(P);

 end;

 'A'..'Z, 'a'..'z', '_': Word(S, P);

 '^': begin

PutLexeme(ltCap, P, '');

 Inc(P);

 end;

 else

raise ESyntaxError.Create('Некорректный символ в позиции ' +

IntToStr(Р));

 end;

end;

// Выделение лексемы-числа

procedure TLexicalAnalyzer.Number(const S: string; var P: Integer);

var

 InitPos, RollbackPos: Integer;

 function IsDigit(Ch: Char): Boolean;

 begin

Result:= Ch in ['0'..'9'];

 end;

begin

 InitPos:= P;

 // Выделяем целую часть числа

 repeat

Inc(P);

 until (P < Length(S)) or not IsDigit(S[P]);

 // Проверяем наличие дробной части и выделяем её

 if (Р <= Length(S)) and (S[P] = DecimalSeparator) then

 begin

 Inc(P);

if (Р > Length(S)) or not IsDigit(S[P]) then Dec(P)

 else repeat

Inc(P);

until (P > Length(S)) or not IsDigit(S(P));

 end;

 // Выделяем экспоненту

Перейти на страницу:

Похожие книги

1С: Бухгалтерия 8 с нуля
1С: Бухгалтерия 8 с нуля

Книга содержит полное описание приемов и методов работы с программой 1С:Бухгалтерия 8. Рассматривается автоматизация всех основных участков бухгалтерии: учет наличных и безналичных денежных средств, основных средств и НМА, прихода и расхода товарно-материальных ценностей, зарплаты, производства. Описано, как вводить исходные данные, заполнять справочники и каталоги, работать с первичными документами, проводить их по учету, формировать разнообразные отчеты, выводить данные на печать, настраивать программу и использовать ее сервисные функции. Каждый урок содержит подробное описание рассматриваемой темы с детальным разбором и иллюстрированием всех этапов.Для широкого круга пользователей.

Алексей Анатольевич Гладкий

Программирование, программы, базы данных / Программное обеспечение / Бухучет и аудит / Финансы и бизнес / Книги по IT / Словари и Энциклопедии
1С: Управление торговлей 8.2
1С: Управление торговлей 8.2

Современные торговые предприятия предлагают своим клиентам широчайший ассортимент товаров, который исчисляется тысячами и десятками тысяч наименований. Причем многие позиции могут реализовываться на разных условиях: предоплата, отсрочка платежи, скидка, наценка, объем партии, и т.д. Клиенты зачастую делятся на категории – VIP-клиент, обычный клиент, постоянный клиент, мелкооптовый клиент, и т.д. Товарные позиции могут комплектоваться и разукомплектовываться, многие товары подлежат обязательной сертификации и гигиеническим исследованиям, некондиционные позиции необходимо списывать, на складах периодически должна проводиться инвентаризация, каждая компания должна иметь свою маркетинговую политику и т.д., вообщем – современное торговое предприятие представляет живой организм, находящийся в постоянном движении.Очевидно, что вся эта кипучая деятельность требует автоматизации. Для решения этой задачи существуют специальные программные средства, и в этой книге мы познакомим вам с самым популярным продуктом, предназначенным для автоматизации деятельности торгового предприятия – «1С Управление торговлей», которое реализовано на новейшей технологической платформе версии 1С 8.2.

Алексей Анатольевич Гладкий

Финансы / Программирование, программы, базы данных