else Result := resBadSyntax; // другие состояния недопустимы
end;
end;
Одной из важных особенностей такого подхода к разбору
строк является то, что анализ выполняется по мере считывания символов, с
использованием информации о текущем символе и символах, прочитанных ранее. Это
позволяет вести обработку данных, передающихся по некоторому последовательному
каналу, непосредственно в процессе их поступления.
Фактически представленная функция выполняет две
операции: выделяет в переданной строке синтаксические элементы (tokens) и
определяет, что представляет собой данный элемент (имя тэга, имя атрибута, значение атрибута). Решение о том, чем является следующий элемент, принимается
заранее, на основании данных о предыдущем элементе и простых правил: за именем
тэга следует имя атрибута; за именем атрибута следует либо имя атрибута, либо
символ '='; за символом '=' следует значение атрибута.
Процедуры, основанные на конечных автоматах, широко
применяются для проверки синтаксиса. В качестве примера рассмотрим функцию
CheckMath, выполняющую синтаксический анализ математического выражения: