Реферат: Синтаксический разбор строк и конечные автоматы
begin
// чтениеименитэгазакончено
TagName := GetSubString(Tag, StartPos, i);
State := WaitAttr;
end;
WaitAttr:
if (Tag[i] in Delimeters) = False then
begin
if Tag[i] = '=' then
begin
Result := resBadSyntax;
Exit;
end;
StartPos := i;
State := ReadAttr;
end;
ReadAttr:
if (Tag[i] in Delimeters) or (Tag[i] = '=') then
begin
// чтение имени атрибута закончено, добавляем имя атрибута в список
Attrs.Add(GetSubString(Tag, StartPos, i));
if Tag[i] = '=' then State := WaitValue
else State := WaitAttrOrEq;
end;
WaitAttrOrEq:
if (Tag[i] in Delimeters) = False then
begin
if Tag[i] = '=' then State := WaitValue else
begin