Реферат: Синтаксический разбор строк и конечные автоматы
SetLength(Result, Stop-Start);
Move(S[Start], Result[1], Stop-Start);
end;
function ParseTag(const Tag : String; var TagName : String;
Attrs, Values : TStringList): Integer;
type
// Возможныесостояния
TState = (ReadTag, WaitAttr, WaitAttrOrEq, ReadAttr, WaitValue,
ReadValue, ReadValueSQ, ReadValueDQ);
const
// Значения, возвращаемыефункцией GetLink
resOK = 0; // разбор прошел успешно
resBadSyntax = -1; // синтаксическая ошибка
// Набор возможных разделительных символов
Delimeters = [' ', #9, #13, #10];
var
State : TState;
StartPos, i : Integer;
begin
Result := resOK;
// очищаемсписокэлементов
Attrs.Clear;
Values.Clear;
State := ReadTag; // входноесостояниеавтомата
i := 2; // пропускаемсимвол '<'
while (Tag[i]<>'>') and (i<Length(Tag)) do
begin
case State of
ReadTag: