Одной из важных особенностей такого подхода к разбору
строк является то, что анализ выполняется по мере считывания символов, с
использованием информации о текущем символе и символах, прочитанных ранее. Это
позволяет вести обработку данных, передающихся по некоторому последовательному
каналу, непосредственно в процессе их поступления.
Фактически представленная функция выполняет две
операции: выделяет в переданной строке синтаксические элементы (tokens) и
определяет, что представляет собой данный элемент (имя тэга, имя атрибута, значение атрибута). Решение о том, чем является следующий элемент, принимается
заранее, на основании данных о предыдущем элементе и простых правил: за именем
тэга следует имя атрибута; за именем атрибута следует либо имя атрибута, либо
символ '='; за символом '=' следует значение атрибута.
Процедуры, основанные на конечных автоматах, широко
применяются для проверки синтаксиса. В качестве примера рассмотрим функцию
CheckMath, выполняющую синтаксический анализ математического выражения:
function CheckMath(const S : String) : Integer;
type
TState = (Start, InDigit, AfterDigit, InOp, InLPrnt, InRPrnt);
const
resLPrntMissing = -1;
resRPrntMissing = -2;
var
State : TState;
i, ParCount : Integer;
begin
Result := 0;
ParCount := 0; // счетчик скобок
State := Start;
for i := 1 to Length(S) do Рекомендуем скачать другие рефераты по теме: курсовик, контрольные 10 класс.
Предыдущая страница реферата | 2
3
4
5
6
7
8
9
10
11
12 | Следующая страница реферата
|
|