Содержание материала

ОПЕРАТОРЫ

Мы могли бы сейчас остановиться и иметь в своем распоряжении довольно полезный сканер. В тех фрагментах KISS, которые мы построили, единственными токенами, состоящими из нескольких символов, являются идентификаторы и числа. Все операторы были одно-символьными. Единственное исключение, которое я могу придумать - это операторы отношений "<=", ">="  и  "<>", но они могут быть обработаны как особые случаи.

Однако другие языки имеют много символьные операторы такие как ":=" в Паскале или "++" и ">>" в C. Хотя пока нам и не нужны много символьные операторы, было бы хорошо знать как получить их в случае необходимости.

Само собой разумеется, что мы можем обрабатывать операторы точно таким же способом, что и другие токены. Давайте начнем с подпрограммы распознавания:

Code:

{ Recognize Any Operator }

function IsOp(c: char): boolean;

begin

   IsOp := c in ['+', '-', '*', '/', '<', '>', ':', '='];

end;

Важно заметить, что мы не должны включать в этот список каждый возможный оператор. К примеру круглые скобки не включены, так же как и завершающая точка. Текущая версия Scan и так хорошо поддерживает одно-символьные операторы. Список выше включает только те символы, которые могут появиться в много символьных операторах. (Для конкретных языков список конечно всегда может быть отредактирован).

Теперь давайте изменим Scan следующим образом:

Code:

{ Lexical Scanner }

Function Scan: string;

begin

   while Look = CR do

      Fin;

   if IsAlpha(Look) then

      Scan := GetName

   else if IsDigit(Look) then

      Scan := GetNum

   else if IsOp(Look) then

      Scan := GetOp

   else begin

      Scan := Look;

      GetChar;

   end;

   SkipWhite;

end;

 
 

Теперь испытайте программу. Вы убедитесь, что любые фрагменты кода, которые вы  захотите бросить в нее будут аккуратно разложены на индивидуальные токены.

Добавить комментарий

Не использовать не нормативную лексику.

Просьба писать ваши замечания, наблюдения и все остальное,
что поможет улучшить предоставляемую информацию на этом сайте.

ВСЕ КОММЕНТАРИИ МОДЕРИРУЮТСЯ ВРУЧНУЮ, ТАК ЧТО СПАМИТЬ БЕСПОЛЕЗНО!


Защитный код
Обновить