Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΊΠ½ΠΈΠ³ΠΈ ΠΎΠ½Π»Π°ΠΉΠ½ Π½Π° Bookidrom.ru! БСсплатныС ΠΊΠ½ΠΈΠ³ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ»ΠΈΠΊΠ΅

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«Π”Π°Π²Π°ΠΉΡ‚Π΅ создадим компилятор!Β». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 47

Автор Π”ΠΆΠ΅ΠΊ ΠšΡ€Π΅Π½ΡˆΠΎΡƒ

var Base: integer;

ΠœΡ‹ Π±ΡƒΠ΄Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ эту ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ вмСсто NumParams для вычислСния смСщСния стСка. Π­Ρ‚ΠΎ ΠΏΠΎΠ΄Ρ€Π°Π·ΡƒΠΌΠ΅Π²Π°Π΅Ρ‚ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Π΄Π²ΡƒΡ… ссылок Π½Π° NumParams Π² LoadParam ΠΈ StoreParam:

{–}

{ Load a Parameter to the Primary Register }

procedure LoadParam(N: integer);

var Offset: integer;

begin

Offset := 8 + 2 * (Base – N);

Emit('MOVE ');

WriteLn(Offset, '(A6),D0');

end;

{–}

{ Store a Parameter from the Primary Register }

procedure StoreParam(N: integer);

var Offset: integer;

begin

Offset := 8 + 2 * (Base – N);

Emit('MOVE D0,');

WriteLn(Offset, '(A6)');

end;

{–}

ИдСя состоит Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Base Π±ΡƒΠ΄Π΅Ρ‚ Π·Π°ΠΌΠΎΡ€ΠΎΠΆΠ΅Π½ΠΎ послС Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΌΡ‹ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π΅ΠΌ Ρ„ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ ΠΈ Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°Ρ‚ΡŒΡΡ дальшС ΠΊΠΎΠ³Π΄Π° Π½ΠΎΠ²Ρ‹Π΅, Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅, ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ Π±ΡƒΠ΄ΡƒΡ‚ вставлСны Π² Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠ². ΠžΠ± этом позаботится ΠΊΠΎΠ΄ Π² ΠΊΠΎΠ½Ρ†Π΅ FormalList:

{–}

{ Process the Formal Parameter List of a Procedure }

procedure FormalList;

begin

Match('(');

if Look <> ')' then begin

FormalParam;

while Look = ',' do begin

Match(',');

FormalParam;

end;

end;

Match(')');

Fin;

Base := NumParams;

NumParams := NumParams + 4;

end;

{–}

(ΠœΡ‹ Π΄ΠΎΠ±Π°Π²ΠΈΠ»ΠΈ Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅ слова Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΡ‡Π΅ΡΡ‚ΡŒ адрСс Π²ΠΎΠ·Π²Ρ€Π°Ρ‚Π° ΠΈ старый ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ ΠΊΠ°Π΄Ρ€Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ заканчиваСтся ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ„ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΌΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌΠΈ ΠΈ Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΌΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌΠΈ.)

ВсС Ρ‡Ρ‚ΠΎ ΠΌΡ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ дальшС – это ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ сСмантику объявлСния Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… Π² синтаксичСском Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€Π΅. ΠŸΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΎΡ‡Π΅Π½ΡŒ ΠΏΠΎΡ…ΠΎΠΆΠΈ Π½Π° Decl ΠΈ TopDecls:

{–}

{ Parse and Translate a Local Data Declaration }

procedure LocDecl;

var Name: char;

begin

Match('v');

AddParam(GetName);

Fin;

end;

{–}

{ Parse and Translate Local Declarations }

function LocDecls: integer;

var n: integer;

begin

n := 0;

while Look = 'v' do begin

LocDecl;

inc(n);

end;

LocDecls := n;

end;

{–}

Π—Π°ΠΌΠ΅Ρ‚ΡŒΡ‚Π΅, Ρ‡Ρ‚ΠΎ LocDecls являСтся Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ, Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‰Π΅ΠΉ число Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… Π² DoProc.

Π—Π°Ρ‚Π΅ΠΌ ΠΌΡ‹ ΠΈΠ·ΠΌΠ΅Π½ΠΈΠΌ DoProc для использования этой ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ:

{–}

{ Parse and Translate a Procedure Declaration }

procedure DoProc;

var N: char;

k: integer;

begin

Match('p');

N := GetName;

if InTable(N) then Duplicate(N);

ST[N] := 'p';

FormalList;

k := LocDecls;

ProcProlog(N, k);

BeginBlock;

ProcEpilog;

ClearParams;

end;

{–}

(Π― сдСлал ΠΏΠ°Ρ€Ρƒ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ Π±Ρ‹Π»ΠΈ Π² Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹. ΠšΡ€ΠΎΠΌΠ΅ нСбольшой Ρ€Π΅ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ я пСрСмСстил Π²Ρ‹Π·ΠΎΠ² Fin Π² FormalList Π° Ρ‚Π°ΠΊΠΆΠ΅ Π² LocDecls. НС Π·Π°Π±ΡƒΠ΄ΡŒΡ‚Π΅ ΠΏΠΎΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ Π΅Π³ΠΎ Π² ΠΊΠΎΠ½Π΅Ρ† FormalList.)

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° измСнСния ΠΏΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅ ProcProlog. Новый ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ – это число слов (Π½Π΅ Π±Π°ΠΉΡ‚) для распрСдСлСния памяти. Π’ΠΎΡ‚ новая вСрсия ProcProlog:

{–}

{ Write the Prolog for a Procedure }

procedure ProcProlog(N: char; k: integer);

begin

PostLabel(N);

Emit('LINK A6,#');

WriteLn(-2 * k)

end;

{–}

БСйчас Π΄ΠΎΠ»ΠΆΠ½ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ. Π”ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ эти измСнСния ΠΈ посмотритС ΠΊΠ°ΠΊ ΠΎΠ½ΠΈ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚.

Π—Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅

К этому ΠΌΠΎΠΌΠ΅Π½Ρ‚Ρƒ Π²Ρ‹ Π·Π½Π°Π΅Ρ‚Π΅ ΠΊΠ°ΠΊ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ объявлСния ΠΈ Π²Ρ‹Π·ΠΎΠ²Ρ‹ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€ с ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌΠΈ, ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Π΅ΠΌΡ‹ΠΌΠΈ ΠΏΠΎ ссылкС ΠΈ ΠΏΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΡŽ. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Ρ‚Π°ΠΊΠΆΠ΅ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅. Как Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π²ΠΈΠ΄Π΅Ρ‚ΡŒ, ΡΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ состоит Π½Π΅ Π² прСдоставлСнии ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠ°, Π° Π² ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠΈ ΠΊΠ°ΠΊΠΎΠΉ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ. Π‘Ρ‚ΠΎΠΈΡ‚ Π½Π°ΠΌ ΠΏΡ€ΠΈΠ½ΡΡ‚ΡŒ эти Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ ΠΈ ΠΊΠΎΠ΄ для трансляции Π² Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ Ρ‚Π°ΠΊΠΈΠΌ слоТным.

Π― Π½Π΅ ΠΏΠΎΠΊΠ°Π·Π°Π» Π²Π°ΠΌ ΠΊΠ°ΠΊ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с ΠΊΠΎΠΌΠ±ΠΈΠ½Π°Ρ†ΠΈΠ΅ΠΉ Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Π΅ΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² ΠΏΠΎ ссылкС, Π½ΠΎ это простоС Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ Π²Ρ‹ ΡƒΠΆΠ΅ Π²ΠΈΠ΄Π΅Π»ΠΈ. Π­Ρ‚ΠΎ просто Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ Π±ΠΎΠ»Π΅Π΅ Ρ…Π»ΠΎΠΏΠΎΡ‚Π½ΠΎ ΠΈ всС, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΌΡ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒ ΠΎΠ±Π° ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠ° вмСсто ΠΎΠ΄Π½ΠΎΠ³ΠΎ. Π― ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡Π΅Π» ΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ это Π½Π° ΠΏΠΎΡ‚ΠΎΠΌ, ΠΊΠΎΠ³Π΄Π° ΠΌΡ‹ научимся Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹ΠΌΠΈ Ρ‚ΠΈΠΏΠ°ΠΌΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ….

Π­Ρ‚ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π°Ρ Π³Π»Π°Π²Π°, которая появится Π±Π»ΠΈΠΆΠ΅ ΠΊ Π€ΠΎΡ€ΡƒΠΌΡƒ.

Увидимся.

Π’ΠΈΠΏΡ‹

Π’Π²Π΅Π΄Π΅Π½ΠΈΠ΅

Π’ послСднСй Π³Π»Π°Π²Π΅ (Π§Π°ΡΡ‚ΡŒ 13, ΠŸΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹) я упомянул, Ρ‡Ρ‚ΠΎ Π² Π½Π΅ΠΉ ΠΈ Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ Π³Π»Π°Π²Π΅ ΠΌΡ‹ рассмотрим Π΄Π²Π΅ возмоТности, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΠΌΠΎΠ³ΡƒΡ‚ ΠΎΡ‚Π΄Π΅Π»ΠΈΡ‚ΡŒ ΠΈΠ³Ρ€ΡƒΡˆΠ΅Ρ‡Π½Ρ‹ΠΉ язык ΠΎΡ‚ настоящСго, ΠΏΡ€ΠΈΠ³ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΊ использованию. Π’ Π½Π΅ΠΉ ΠΌΡ‹ рассмотрСли Π²Ρ‹Π·ΠΎΠ²Ρ‹ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€. МногиС ΠΈΠ· вас Ρ‚Π΅Ρ€ΠΏΠ΅Π»ΠΈΠ²ΠΎ ΠΆΠ΄Π°Π»ΠΈ, начиная с Августа'89 ΠΊΠΎΠ³Π΄Π° я Π²Ρ‹Π΄Π°ΠΌ Π²Ρ‚ΠΎΡ€ΡƒΡŽ. Π₯ΠΎΡ€ΠΎΡˆΠΎ, Π²ΠΎΡ‚ ΠΎΠ½Π°.

Π’ этой Π³Π»Π°Π²Π΅ ΠΌΡ‹ ΠΏΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΈΠΌ ΠΎ Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹ΠΌΠΈ Ρ‚ΠΈΠΏΠ°ΠΌΠΈ Π΄Π°Π½Π½Ρ‹Ρ…. Как ΠΈ Π² послСднСй Π³Π»Π°Π²Π΅, я Π½Π΅ Π±ΡƒΠ΄Ρƒ сСйчас Π²ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ эти возмоТности нСпосрСдствСнно Π² компилятор TINY. ВмСсто этого я Π±ΡƒΠ΄Ρƒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚ΠΎΡ‚ ΠΆΠ΅ самый ΠΏΠΎΠ΄Ρ…ΠΎΠ΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Ρ‚Π°ΠΊ Ρ…ΠΎΡ€ΠΎΡˆΠΎ слуТил Π½Π°ΠΌ Π² ΠΏΡ€ΠΎΡˆΠ»ΠΎΠΌ: использованиС Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚ΠΎΠ² синтаксичСского Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€Π° ΠΈ ΠΎΠ΄Π½ΠΎΡΠΈΠΌΠ²ΠΎΠ»ΡŒΠ½Ρ‹Ρ… Ρ‚ΠΎΠΊΠ΅Π½ΠΎΠ². Как ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ, это ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ Π½Π° Π΄ΠΎΠ±Ρ€Π°Ρ‚ΡŒΡΡ нСпосрСдствСнно Π΄ΠΎ сути вопроса Π½Π΅ ΠΏΡ€ΠΎΠ΄ΠΈΡ€Π°ΡΡΡŒ сквозь массу Π½Π΅Π½ΡƒΠΆΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°. Π’Π°ΠΊ ΠΊΠ°ΠΊ основныС ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с мноТСствСнными Ρ‚ΠΈΠΏΠ°ΠΌΠΈ Π΄Π°Π½Π½Ρ‹Ρ… Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡŽΡ‚ Π² арифмСтичСских опСрациях, Π½Π° Π½ΠΈΡ… ΠΌΡ‹ ΠΈ сконцСнтрируСм своС Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅.

НСсколько ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠΉ: Π’ΠΎ-ΠΏΠ΅Ρ€Π²Ρ‹Ρ…, Π΅ΡΡ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ я Π½Π΅ Π±ΡƒΠ΄Ρƒ ΠΎΡ…Π²Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ Π² этой Π³Π»Π°Π²Π΅. Π—Π΄Π΅ΡΡŒ ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎ простых, встроСнных Ρ‚ΠΈΠΏΠ°Ρ…. ΠœΡ‹ Π΄Π°ΠΆΠ΅ Π½Π΅ Π±ΡƒΠ΄Π΅ΠΌ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с массивами, указатСлями ΠΈΠ»ΠΈ строками, я ΠΎΡ…Π²Π°Ρ‡Ρƒ ΠΈΡ… Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… Π³Π»Π°Π²Π°Ρ….

Π’ΠΎ-Π²Ρ‚ΠΎΡ€Ρ‹Ρ…, ΠΌΡ‹ Ρ‚Π°ΠΊΠΆΠ΅ Π½Π΅ Π±ΡƒΠ΄Π΅ΠΌ ΠΎΠ±ΡΡƒΠΆΠ΄Π°Ρ‚ΡŒ ΠΈ Ρ‚ΠΈΠΏΡ‹ опрСдСляСмыС ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ. Π­Ρ‚ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΏΠΎΠ·ΠΆΠ΅, ΠΏΠΎ Ρ‚ΠΎΠΉ простой ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π΅, Ρ‡Ρ‚ΠΎ я всС Π΅Ρ‰Π΅ Π½Π΅ ΡƒΠ±Π΅Π΄ΠΈΠ» сСбя, Ρ‡Ρ‚ΠΎ эти опрСдСляСмыС ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ Ρ‚ΠΈΠΏΡ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ Π² языкС KISS. Π’ Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ·Π΄Π½ΠΈΡ… Π³Π»Π°Π²Π°Ρ… я ΡΠΎΠ±ΠΈΡ€Π°ΡŽΡΡŒ ΠΎΡ…Π²Π°Ρ‚ΠΈΡ‚ΡŒ ΠΏΠΎ ΠΊΡ€Π°ΠΉΠ½Π΅ΠΉ ΠΌΠ΅Ρ€Π΅ основныС ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΠΈ опрСдСляСмых ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ Ρ‚ΠΈΠΏΠΎΠ², записСй ΠΈ Ρ‚.Π΄., просто для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ сСрия Π±Ρ‹Π»Π° ΠΏΠΎΠ»Π½ΠΎΠΉ. Но Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π»ΠΈ ΠΎΠ½ΠΈ Π±ΡƒΠ΄ΡƒΡ‚ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½Ρ‹ ΠΊΠ°ΠΊ Ρ‡Π°ΡΡ‚ΡŒ KISS – всС Π΅Ρ‰Π΅ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΉ вопрос. Π― ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ для ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠ΅Π² ΠΈ ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠΉ ΠΏΠΎ этой Ρ‚Π΅ΠΌΠ΅.

НаконСц, я Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅Π΄ΠΈΡ‚ΡŒ вас: Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ собираСмся ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΠΌΠΎΠΆΠ΅Ρ‚ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ массу Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… слоТностСй ΠΈ Π² синтаксичСский Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ ΠΈ Π² Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅ΠΌΡ‹ΠΉ ΠΊΠΎΠ΄. ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹ достаточно просто. Π‘Π»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ ΠΊΠΎΠ³Π΄Π° Π²Ρ‹ добавляСтС ΠΏΡ€Π°Π²ΠΈΠ»Π° прСобразования ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ‚ΠΈΠΏΠ°ΠΌΠΈ. Π’ΠΎΠΎΠ±Ρ‰Π΅-Ρ‚ΠΎ, Π±ΡƒΠ΄Π΅Ρ‚ Π»ΠΈ ваш компилятор простым ΠΈΠ»ΠΈ слоТным зависит ΠΎΡ‚ способа, Π²Ρ‹Π±Ρ€Π°Π½Π½ΠΎΠ³ΠΎ Π²Π°ΠΌΠΈ для опрСдСлСния ΠΏΡ€Π°Π²ΠΈΠ» прСобразования Ρ‚ΠΈΠΏΠΎΠ². Π”Π°ΠΆΠ΅ Ссли Π²Ρ‹ Ρ€Π΅ΡˆΠΈΡ‚Π΅ Π·Π°ΠΏΡ€Π΅Ρ‚ΠΈΡ‚ΡŒ Π»ΡŽΠ±Ρ‹Π΅ прСобразования Ρ‚ΠΈΠΏΠΎΠ² (ΠΊΠ°ΠΊ Π² Ada, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€) ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° всС Π΅Ρ‰Π΅ остаСтся, ΠΈ ΠΎΠ½Π° встроСна Π² ΠΌΠ°Ρ‚Π΅ΠΌΠ°Ρ‚ΠΈΠΊΡƒ. Когда Π²Ρ‹ ΡƒΠΌΠ½ΠΎΠΆΠ°Π΅Ρ‚Π΅ Π΄Π²Π° ΠΊΠΎΡ€ΠΎΡ‚ΠΊΠΈΡ… числа, ΠΊ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρƒ, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π΄Π»ΠΈΠ½Π½Ρ‹ΠΉ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚.

Π― подошСл ΠΊ этой ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ΅ ΠΎΡ‡Π΅Π½ΡŒ остороТно, ΠΏΡ‹Ρ‚Π°ΡΡΡŒ ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ простоту. Но ΠΌΡ‹ Π½Π΅ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ слоТности. Как ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ случаСтся, ΠΌΡ‹ оказываСмся ΠΏΠ΅Ρ€Π΅Π΄ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒΡŽ Π²Ρ‹Π±ΠΈΡ€ΠΈΡ‚ΡŒ ΠΌΠ΅ΠΆΠ΄Ρƒ качСством ΠΊΠΎΠ΄Π° ΠΈ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒΡŽ ΠΈ, ΠΊΠ°ΠΊ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ, я ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡ΠΈΡ‚Π°ΡŽ Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ самый простой ΠΏΠΎΠ΄Ρ…ΠΎΠ΄.

Π§Ρ‚ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ дальшС?

ΠŸΡ€Π΅ΠΆΠ΄Π΅ Ρ‡Π΅ΠΌ ΠΌΡ‹ погрузимся Π² это занятиС, я Π΄ΡƒΠΌΠ°ΡŽ Π²Π°ΠΌ Π±Ρ‹ Ρ…ΠΎΡ‚Π΅Π»ΠΎΡΡŒ Π·Π½Π°Ρ‚ΡŒ Ρ‡Ρ‚ΠΎ ΠΌΡ‹ сСйчас собираСмся Π΄Π΅Π»Π°Ρ‚ΡŒ... ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎ послС Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΏΡ€ΠΎΡˆΠ»ΠΎ ΡΡ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΌΠ½ΠΎΠ³ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ с ΠΏΡ€ΠΎΡˆΠ»ΠΎΠΉ Π³Π»Π°Π²Ρ‹.

Π’Π΅ΠΌ Π²Ρ€Π΅ΠΌΠ΅Π½Π΅ΠΌ я Π½Π΅ бСздСйствовал. Π― Ρ€Π°Π·Π±ΠΈΠ» компилятор Π½Π° ΠΌΠΎΠ΄ΡƒΠ»ΠΈ. Одна ΠΈΠ· ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ, с ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ я столкнулся, Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΌΡ‹ ΠΎΡ…Π²Π°Ρ‚Ρ‹Π²Π°Π»ΠΈ Π½ΠΎΠ²Ρ‹Π΅ области ΠΈ вслСдствиС этого Ρ€Π°ΡΡˆΠΈΡ€ΡΠ»ΠΈ возмоТности компилятора TINY, ΠΎΠ½ становился всС большС ΠΈ большС. Π― понял ΠΏΠ°Ρ€Ρƒ Π³Π»Π°Π² Π½Π°Π·Π°Π΄, Ρ‡Ρ‚ΠΎ это ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΠ»ΠΎ ΠΊ затруднСниям ΠΈ ΠΈΠΌΠ΅Π½Π½ΠΎ поэтому я возвратился ΠΊ использованию Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚ΠΎΠ² компилятора Π² послСднСй ΠΈ этой Π³Π»Π°Π²Π°Ρ…. ΠšΠ°ΠΆΠ΅Ρ‚ΡΡ просто Π³Π»ΡƒΠΏΠΎ Π·Π°Π½ΠΎΠ²ΠΎ Π²ΠΎΡΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΊΠΎΠ΄ для, скаТСм, ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π±ΡƒΠ»Π΅Π²Ρ‹Ρ… ΠΈΡΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‰ΠΈΡ… Π˜Π›Π˜, ΠΊΠΎΠ³Π΄Π° Ρ‚Π΅ΠΌΠ° дискуссии – ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Π° ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ².

ΠžΡ‡Π΅Π²ΠΈΠ΄Π½Ρ‹ΠΌ способом ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ свой ΠΏΠΈΡ€ΠΎΠ³ ΠΈ ΡΡŠΠ΅ΡΡ‚ΡŒ Π΅Π³ΠΎ Ρ‚Π°ΠΊΠΆΠ΅ являСтся Ρ€Π°Π·Π±ΠΈΠ΅Π½ΠΈΠ΅ компилятора Π½Π° Ρ€Π°Π·Π΄Π΅Π»ΡŒΠ½ΠΎ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΠ΅ΠΌΡ‹Π΅ ΠΌΠΎΠ΄ΡƒΠ»ΠΈ ΠΈ, ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎ, ΠΌΠΎΠ΄ΡƒΠ»ΠΈ Turbo Pascal ΡΠ²Π»ΡΡŽΡ‚ΡΡ для этого ΠΈΠ΄Π΅Π°Π»ΡŒΠ½Ρ‹ΠΌ срСдством. Π­Ρ‚ΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ Π½Π°ΠΌ ΡΠΊΡ€Ρ‹Ρ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ довольно слоТный ΠΊΠΎΠ΄ (Ρ‚Π°ΠΊΠΎΠΉ ΠΊΠ°ΠΊ ΠΏΠΎΠ»Π½Ρ‹ΠΉ синтаксичСский Π°Π½Π°Π»ΠΈΠ· арифмСтичСских ΠΈ Π±ΡƒΠ»Π΅Π²Ρ‹Ρ… Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ) Π² ΠΎΠ΄ΠΈΠ½ΠΎΡ‡Π½Ρ‹ΠΉ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ ΠΈ просто Π²Ρ‹Ρ‚Π°ΡΠΊΠΈΠ²Π°Ρ‚ΡŒ Π΅Π³ΠΎ всякий Ρ€Π°Π· ΠΊΠΎΠ³Π΄Π° ΠΎΠ½ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌ. ΠŸΡ€ΠΈ Ρ‚Π°ΠΊΠΎΠΌ способС СдинствСнным ΠΊΠΎΠ΄ΠΎΠΌ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ я Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±ΡƒΠ΄Ρƒ Π²ΠΎΡΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚ΡŒ Π² этих Π³Π»Π°Π²Π°Ρ…, Π±ΡƒΠ΄Π΅Ρ‚ ΠΊΠΎΠ΄ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ нСпосрСдствСнно касаСтся обсуТдаСмого вопроса.

Π― Ρ‚Π°ΠΊΠΆΠ΅ игрался с Turbo 5.5 ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ, ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎ, Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ БорландовскиС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ Паскаля. Π― Π½Π΅ Ρ€Π΅ΡˆΠΈΠ», ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π»ΠΈ эти возмоТности, ΠΏΠΎ Π΄Π²ΡƒΠΌ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π°ΠΌ. ΠŸΡ€Π΅ΠΆΠ΄Π΅ всСго, ΠΌΠ½ΠΎΠ³ΠΈΠ΅ ΠΈΠ· вас, ΠΊΡ‚ΠΎ слСдовал Π·Π° этой сСриСй, ΠΌΠΎΠ³ΡƒΡ‚ всС Π΅Ρ‰Π΅ Π½Π΅ ΠΈΠΌΠ΅Ρ‚ΡŒ 5.5 ΠΈ я ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎ Π½Π΅ Ρ…ΠΎΡ‡Ρƒ Π²Ρ‹Π½ΡƒΠΆΠ΄Π°Ρ‚ΡŒ ΠΊΠΎΠ³ΠΎ-Π»ΠΈΠ±ΠΎ ΠΏΠΎΠΉΡ‚ΠΈ ΠΈ ΠΊΡƒΠΏΠΈΡ‚ΡŒ Π½ΠΎΠ²Ρ‹ΠΉ компилятор Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π·Π°Π²Π΅Ρ€ΡˆΠΈΡ‚ΡŒ эту ΡΠ΅Ρ€ΠΈΡŽ. Π’ΠΎ-Π²Ρ‚ΠΎΡ€Ρ‹Ρ…, я Π½Π΅ ΡƒΠ±Π΅ΠΆΠ΄Π΅Π½, Ρ‡Ρ‚ΠΎ ОО Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ ΠΈΠΌΠ΅ΡŽΡ‚ Ρ‚Π°ΠΊΠΎΠ΅ большоС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ для этого прилоТСния. ΠœΡ‹ обсуТдали ΠΊΠΎΠ΅-Ρ‡Ρ‚ΠΎ ΠΈΠ· этого Π½Π° Ρ„ΠΎΡ€ΡƒΠΌΠ΅ CLM Π½Π° CompuServe, ΠΈ ΠΏΠΎΠΊΠ° Ρ‡Ρ‚ΠΎ ΠΌΡ‹ Π½Π΅ нашли Π½ΠΈΠΊΠ°ΠΊΠΎΠΉ ΡƒΠ±Π΅Π΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Ρ‹ для использования ОО конструкции. Π­Ρ‚ΠΎ ΠΎΠ΄Π½Π° ΠΈΠ· Ρ‚Π΅Ρ… областСй, Π³Π΄Π΅ я ΠΌΠΎΠ³ Π±Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΎΠ±Ρ€Π°Ρ‚Π½ΡƒΡŽ связь с читатСлями. ΠšΡ‚ΠΎ-Π½ΠΈΠ±ΡƒΠ΄ΡŒ Ρ…ΠΎΡ‡Π΅Ρ‚ ΠΏΡ€ΠΎΠ³ΠΎΠ»ΠΎΡΠΎΠ²Π°Ρ‚ΡŒ Π·Π° Turbo 5.5 ΠΈ ООП?

Π’ любом случаС послС ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… Π³Π»Π°Π² этой сСрии я ΠΏΠ»Π°Π½ΠΈΡ€ΡƒΡŽ ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Π²Π°ΠΌ Π·Π°ΠΊΠΎΠ½Ρ‡Π΅Π½Π½Ρ‹ΠΉ Π½Π°Π±ΠΎΡ€ ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ Π° Ρ‚Π°ΠΊΠΆΠ΅ Π·Π°ΠΊΠΎΠ½Ρ‡Π΅Π½Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠ΅ компиляторы. Планом фактичСски прСдусмотрСно Ρ‚Ρ€ΠΈ компилятора: ΠΎΠ΄ΠΈΠ½ для односимвольной вСрсии TINY (для использования Π² Π½Π°ΡˆΠΈΡ… экспСримСнтах), ΠΎΠ΄ΠΈΠ½ для TINY ΠΈ ΠΎΠ΄ΠΈΠ½ для KISS. Π― достаточно Ρ‡Π΅Ρ‚ΠΊΠΎ Π²Ρ‹Π΄Π΅Π»ΠΈΠ» различия ΠΌΠ΅ΠΆΠ΄Ρƒ TINY ΠΈ KISS:

TINY Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π΄Π²Π° Ρ‚ΠΈΠΏΠ° Π΄Π°Π½Π½Ρ‹Ρ…: ΡΠΈΠΌΠ²ΠΎΠ»ΡŒΠ½Ρ‹ΠΉ ΠΈ 16-разрядноС Ρ†Π΅Π»ΠΎΠ΅ число. Π― ΠΌΠΎΠ³Ρƒ Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΠΎΠΏΡ€ΠΎΠ±ΠΎΠ²Π°Ρ‚ΡŒ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Ρ‡Ρ‚ΠΎ-Π½ΠΈΠ±ΡƒΠ΄ΡŒ со строками, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Π±Π΅Π· Π½ΠΈΡ… компилятор Π±Ρ‹Π» Π±Ρ‹ довольно бСсполСзным. KISS Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒ всС ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Π΅ простыС Ρ‚ΠΈΠΏΡ‹, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ массивы ΠΈ Π΄Π°ΠΆΠ΅ числа с ΠΏΠ»Π°Π²Π°ΡŽΡ‰Π΅ΠΉ Ρ‚ΠΎΡ‡ΠΊΠΎΠΉ.