Простейший лексический анализатор(сканер)
- module scanner;
- const
- EOF = ^Z;
- var
- Look: char; {Просматриваемый символ}
- Count: integer; {Счётчик символов в строке}
- WordsCount: integer; {Счётчик слов}
- Words: array[1..1000] of string; {Полученный в итоге парсинга массив}
- Separator: char; {Разделитель}
- Input: string;
- interface;
- procedure SetInput(NewInput: string); {Задание входа}
- procedure GetChar; {Считывание следующего символа из входного потока}
- procedure GetNextWord; {Получение следующего слова и занесение его в массив}
- procedure Scan; {Собственно, сканирование}
- function GetWords: array[1..1000] of string; //Выдача слов
- implementation;
- procedure GetChar;
- begin
- Look := input[Count];
- inc(Count);
- end;
- procedure GetNextWord;
- var
- Word: string; {Считываемое слово}
- begin
- count = 1;
- while Look <> Separator do
- begin
- Word := Word Look;
- GetChar;
- end;
- Words[WordsCount] := Word;
- inc(WordsCount);
- end;
- procedure SetInput(NewInput: string);
- begin
- Input := NewInput;
- end;
- procedure Scan;
- begin
- while Look <> EOF do
- begin
- GetNextWord;
- end;
- end;
- function GetWords: array[1..1000] of string;
- begin
- GetWords := Words;
- end;
- begin
- Separator := '|';
- WordsCount := 1;
- Count := 1;
- GetChar;
- Scan;
- end.
Идея появилась совершенно неожиданно, даже сам не могу понять как
Код вроде бы понятный. Если всё же непонятен, минусуйтеукажите где.
Код вроде бы понятный. Если всё же непонятен, минусуйтеукажите где.