Простейший лексический анализатор(сканер)

  1. module scanner;
  2.  const
  3.   EOF = ^Z;
  4.  var
  5.   Look: char; {Просматриваемый символ}
  6.   Count: integer; {Счётчик символов в строке}
  7.   WordsCount: integer; {Счётчик слов}
  8.   Words: array[1..1000] of string; {Полученный в итоге парсинга массив}
  9.   Separator: char; {Разделитель}
  10.   Input: string;
  11.  
  12.  interface;
  13.   procedure SetInput(NewInput: string); {Задание входа}
  14.   procedure GetChar; {Считывание следующего символа из входного потока}
  15.   procedure GetNextWord; {Получение следующего слова и занесение его в массив}
  16.   procedure Scan; {Собственно, сканирование}
  17.   function GetWords: array[1..1000] of string; //Выдача слов
  18.  
  19.  implementation;
  20.  
  21.   procedure GetChar;
  22.   begin
  23.    Look := input[Count];
  24.    inc(Count);
  25.   end;
  26.  
  27.   procedure GetNextWord;
  28.   var
  29.    Word: string; {Считываемое слово}
  30.   begin
  31.    count = 1;
  32.    while Look <> Separator do
  33.    begin
  34.     Word := Word   Look;
  35.     GetChar;
  36.    end;
  37.    Words[WordsCount] := Word;
  38.    inc(WordsCount);
  39.   end;
  40.  
  41.   procedure SetInput(NewInput: string);
  42.   begin
  43.    Input := NewInput;
  44.   end;
  45.  
  46.   procedure Scan;
  47.   begin
  48.    while Look <> EOF do
  49.    begin
  50.     GetNextWord;
  51.    end;
  52.   end;
  53.  
  54.   function GetWords: array[1..1000] of string;
  55.   begin
  56.    GetWords := Words;
  57.   end;
  58.  
  59.  begin
  60.   Separator := '|';
  61.   WordsCount := 1;
  62.   Count := 1;
  63.   GetChar;
  64.   Scan;
  65.  end.
Идея появилась совершенно неожиданно, даже сам не могу понять как :-D
Код вроде бы понятный. Если всё же непонятен, минусуйтеукажите где.

Реклама

Мы в соцсетях

tw tg yt gt