А. Григорьев - О чём не пишут в книгах по Delphi

Здесь есть возможность читать онлайн «А. Григорьев - О чём не пишут в книгах по Delphi» — ознакомительный отрывок электронной книги совершенно бесплатно, а после прочтения отрывка купить полную версию. В некоторых случаях можно слушать аудио, скачать через торрент в формате fb2 и присутствует краткое содержание. Город: СПб, Год выпуска: 2008, ISBN: 2008, Издательство: БХВ-Петербург, Жанр: Программирование, на русском языке. Описание произведения, (предисловие) а так же отзывы посетителей доступны на портале библиотеки ЛибКат.

О чём не пишут в книгах по Delphi: краткое содержание, описание и аннотация

Предлагаем к чтению аннотацию, описание, краткое содержание или предисловие (зависит от того, что написал сам автор книги «О чём не пишут в книгах по Delphi»). Если вы не нашли необходимую информацию о книге — напишите в комментариях, мы постараемся отыскать её.

Рассмотрены малоосвещённые вопросы программирования в Delphi. Описаны методы интеграции VCL и API. Показаны внутренние механизмы VCL и приведены примеры вмешательства в эти механизмы. Рассмотрено использование сокетов в Delphi: различные механизмы их работы, особенности для протоколов TCP и UDP и др. Большое внимание уделено разбору ситуаций возникновения ошибок и получения неверных результатов в "простом и правильном" коде. Отдельно рассмотрены особенности работы с целыми, вещественными и строковыми типами данных, а также приведены примеры неверных результатов, связанных с ошибками компилятора, VCL и др. Для каждой из таких ситуаций предложены методы решения проблемы. Подробно рассмотрен синтаксический анализ в Delphi на примере арифметических выражений. Многочисленные примеры составлены с учётом различных версий: от Delphi 3 до Delphi 2007. Прилагаемый компакт-диск содержит примеры из книги.
Для программистов

О чём не пишут в книгах по Delphi — читать онлайн ознакомительный отрывок

Ниже представлен текст книги, разбитый по страницам. Система сохранения места последней прочитанной страницы, позволяет с удобством читать онлайн бесплатно книгу «О чём не пишут в книгах по Delphi», без необходимости каждый раз заново искать на чём Вы остановились. Поставьте закладку, и сможете в любой момент перейти на страницу, на которой закончили чтение.

Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

function IsSign(Ch: Char): Boolean;

begin

Result := (Ch = '+') or (Ch = '-');

end;

// Проверка символа на соответствие

function IsSeparator(Ch: Char): Boolean;

begin

Result := Ch='.';

end;

// Проверка символа на соответствие

function IsExponent(Ch: Char): Boolean;

begin

Result := (Ch = 'E') or (Ch = 'e');

end;

function IsNumber(const S: string): Boolean;

var

P: Integer; // Номер символа выражения, который сейчас проверяется

begin

Result := False;

// Проверка, что выражение содержит хотя бы один символ — пустая строка

// не является числом

if Length(S) = 0 then Exit;

// Начинаем проверку с первого символа

Р := 1;

// Если первый символ — , переходим к следующему

if IsSign(S[Р]) then Inc(Р);

// Проверяем, что в данной позиции стоит хотя бы одна цифра

if (Р > Length(S)) or not IsDigit(S[Р]) then Exit;

// Переходим к следующей позиции, пока не достигнем конца строки

// или не встретим не цифру

repeat

Inc(Р);

until (Р > Length(S)) or not IsDigit(S[Р]);

// Если достигли конца строки, выражение корректно — число.

// не имеющее дробной части и экспоненты

if Р > Length(S) then

begin

Result := True;

Exit;

end;

// Если следующей символ — , проверяем, что после него

// стоит хотя бы одна цифра

if IsSeparator(S[P]) then

begin

Inc(P);

if (P > Length(S)) or not IsDigit(S[P]) then Exit;

repeat

Inc(P);

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

// Если достигли конца строки, выражение корректно — число

// без экспоненты

if Р > Length(S) then

begin

Result := True;

Exit;

end;

end;

// Если следующий символ — , проверяем, что после него

// стоит все то, что требуется правилами

if IsExponent(S[Р]) then

begin

Inc(P);

if P > Length(S) then Exit;

if IsSign(S[P]) then Inc(P);

if (P > Length(S)) or not IsDigit(S[P]) then Exit;

repeat

Inc(P);

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

if P > Length(S) then

begin

Result := True;

Exit;

end;

end;

// Если выполнение дошло до этого места, значит, в выражении остались

// еще какие-то символы. Так как никакие дополнительные символы

// синтаксисом не предусмотрены, такое выражение не считается

// корректным числом.

end;

Для каждого нетерминального символа мы ввели отдельную функцию, разбор начинается с символа самого верхнего уровня — — и следует правилам, записанным для этого символа. Такой способ синтаксического анализа называется левосторонним рекурсивным нисходящим анализом . Левосторонним потому, что символы в выражении перебираются слева направо, нисходящим — потому, что сначала анализируются символы верхнего уровня, а потом — символы нижнего. Рекурсивность метода на данном примере не видна, т. к. наша грамматика не содержит рекурсивных определений, но мы с этим столкнемся в последующих примерах.

Пример использования функции IsNumberсодержится на компакт-диске и называется IsNumberSample.

В заключение рассмотрим альтернативный способ записи грамматики вещественного числа — графический (такой способ называется синтаксическим графом, или рельсовой диаграммой). Это направленный граф, узлами которого являются терминальные (круги) и нетерминальные (прямоугольники) символы. Двигаться от одного узла к другому можно только по линиям в направлениях, указанных стрелками. В таком графе достаточно легко разобраться, а по возможностям описания синтаксиса он эквивалентен БНФ. На рис. 4.1 показана запись синтаксиса вещественного числа с помощью рельсовой диаграммы.

Рис 41Диаграмма синтаксиса вещественного числа В качестве самостоятельного - фото 27

Рис. 4.1.Диаграмма синтаксиса вещественного числа

В качестве самостоятельного упражнения рекомендуем нарисовать с помощью рельсовой диаграммы грамматику символа "Цифра", используемого на рис. 4.1.

4.4. Простой калькулятор

Теперь у нас уже достаточно знаний, чтобы создать простейший калькулятор, т. е. функцию, которая будет на входе принимать выражение, а на выходе, если это выражение корректно, возвращать результат его вычисления. Для начала ограничимся простым калькулятором, который умеет работать только с числовыми константами и знает только четыре действия арифметики. Изменение порядка вычисления операторов с помощью скобок также оставим на потом.

Читать дальше
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

Похожие книги на «О чём не пишут в книгах по Delphi»

Представляем Вашему вниманию похожие книги на «О чём не пишут в книгах по Delphi» списком для выбора. Мы отобрали схожую по названию и смыслу литературу в надежде предоставить читателям больше вариантов отыскать новые, интересные, ещё непрочитанные произведения.


Отзывы о книге «О чём не пишут в книгах по Delphi»

Обсуждение, отзывы о книге «О чём не пишут в книгах по Delphi» и просто собственные мнения читателей. Оставьте ваши комментарии, напишите, что Вы думаете о произведении, его смысле или главных героях. Укажите что конкретно понравилось, а что нет, и почему Вы так считаете.

x