МОДУЛЬ SCANNER
Следующая, и намного более важная, версия лексического анализатора, та которая обрабатывает много символьные токены, которые должны иметь все настоящие языки. Только две функции, GetName и GetNumber отличаются в этих двух модулях, но только чтобы убедиться, что здесь нет никаких ошибок, я воспроизвел здесь весь модуль. Это модуль Scanner:
Code: |
unit Scanner;
interface uses Input, Errors; function IsAlpha(c: char): boolean; function IsDigit(c: char): boolean; function IsAlNum(c: char): boolean; function IsAddop(c: char): boolean; function IsMulop(c: char): boolean; procedure Match(x: char); function GetName: string; function GetNumber: longint;
implementation
{ Recognize an Alpha Character } function IsAlpha(c: char): boolean; begin IsAlpha := UpCase(c) in ['A'..'Z']; end;
{ Recognize a Numeric Character } function IsDigit(c: char): boolean; begin IsDigit := c in ['0'..'9']; end;
{ Recognize an Alphanumeric Character } function IsAlnum(c: char): boolean; begin IsAlnum := IsAlpha(c) or IsDigit(c); end;
{ Recognize an Addition Operator } function IsAddop(c: char): boolean; begin IsAddop := c in ['+','-']; end;
{ Recognize a Multiplication Operator } function IsMulop(c: char): boolean; begin IsMulop := c in ['*','/']; end;
{ Match One Character } procedure Match(x: char); begin if Look = x then GetChar else Expected('''' + x + ''''); end;
{ Get an Identifier } function GetName: string; var n: string; begin n := ''; if not IsAlpha(Look) then Expected('Name'); while IsAlnum(Look) do begin n := n + Look; GetChar; end; GetName := n; end;
{ Get a Number } function GetNumber: string; var n: string; begin n := ''; if not IsDigit(Look) then Expected('Integer'); while IsDigit(Look) do begin n := n + Look; GetChar; end; GetNumber := n; end; end. |
Та же самая тестовая программа проверит также и этот сканер. Просто измените раздел "uses" для использования Scanner вместо Scanner1. Теперь у вас должна быть возможность набирать много символьные имена и числа.
Просьба писать ваши замечания, наблюдения и все остальное,
что поможет улучшить предоставляемую информацию на этом сайте.
ВСЕ КОММЕНТАРИИ МОДЕРИРУЮТСЯ ВРУЧНУЮ, ТАК ЧТО СПАМИТЬ БЕСПОЛЕЗНО!