Давайте создадим компилятор!   ::   Креншоу Джек

Страница: 106 из 382



ЭКСПЕРИМЕНТЫ ПО СКАНИРОВАНИЮ



Прежде чем возвратиться к нашему компилятору, было бы полезно немного поэкспериментировать с общими понятиями.

Давайте начнем с двух определений, наиболее часто встречающихся в настоящих языках программирования:

::= [ | ]*

]+

(Не забудьте, что "*" указывает на ноль или более повторений условия в квадратных скобках, а "+" на одно и более.)

Мы уже работали с подобными элементами в третьей главе. Давайте начнем (как обычно) с пустого Cradle. Не удивительно, что нам понадобится новая процедура распознавания:



{–}

{ Recognize an Alphanumeric Character }

function IsAlNum(c: char): boolean;

begin

IsAlNum := IsAlpha(c) or IsDigit(c);

end;

{–}



Используя ее, давайте напишем следующие две подпрограммы, которые очень похожи на те, которые мы использовали раньше:



{–}

{ Get an Identifier }

function GetName: string;

var x: string[8];

begin

x := '';

if not IsAlpha(Look) then Expected('Name');

while IsAlNum(Look) do begin

x := x + UpCase(Look);

GetChar;

end;

GetName := x;

end;

{–}

{ Get a Number }

function GetNum: string;

var x: string[16];

begin

x := '';

if not IsDigit(Look) then Expected('Integer');

while IsDigit(Look) do begin

x := x + Look;

GetChar;

end;

GetNum := x;

end;

{–}



(Заметьте, что эта версия GetNum возвращает строку, а не целое число, как прежде).

|< Пред. 104 105 106 107 108 След. >|

Java книги

Контакты: [email protected]