Halt;
end;
{β}
{ Report What Was Expected }
procedure Expected(s: string);
begin
Abort(s + ' Expected');
end;
{β}
{ Recognize an Alpha Character }
function IsAlpha(c: char): boolean;
begin
IsAlpha := UpCase(c) in ['A'..'Z'];
end;
{β}
{ Recognize a Decimal Digit }
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 Addop }
function IsAddop(c: char): boolean;
begin
IsAddop := c in ['+', '-'];
end;
{β}
{ Recognize a Mulop }
function IsMulop(c: char): boolean;
begin
IsMulop := c in ['*', '/'];
end;
{β}
{ Recognize White Space }
function IsWhite(c: char): boolean;
begin
IsWhite := c in [' ', TAB];
end;
{β}
{ Skip Over Leading White Space }
procedure SkipWhite;
begin
while IsWhite(Look) do
GetChar;
end;
{β}
{ Match a Specific Input Character }
procedure Match(x: char);
begin
if Look <> x then Expected('''' + x + '''');
GetChar;
SkipWhite;
end;
{β}
{ Skip a CRLF }
procedure Fin;
begin
if Look = CR then GetChar;
if Look = LF then GetChar;
SkipWhite;
end;
{β}
{ Table Lookup }
function Lookup(T: TabPtr; s: string; n: integer): integer;
var i: integer;
found: boolean;
begin
found := false;
i := n;
while (i > 0) and not found do
if s = T^[i] then
found := true
else
dec(i);
Lookup := i;
end;
{β}
{ Get an Identifier }
procedure GetName;
begin
while Look = CR do
Fin;
if not IsAlpha(Look) then Expected('Name');
Value := '';
while IsAlNum(Look) do begin
Value := Value + UpCase(Look);
GetChar;
end;
SkipWhite;
end;
{β}
{ Get a Number }
procedure GetNum;
begin
if not IsDigit(Look) then Expected('Integer');
Value := '';
while IsDigit(Look) do begin
Value := Value + Look;
GetChar;
end;
Token := '#';
SkipWhite;
end;
{β}
{ Get an Identifier and Scan it for Keywords }
procedure Scan;
begin
GetName;
Token := KWcode[Lookup(Addr(KWlist), Value, 4) + 1];
end;
{β}
{ Match a Specific Input String }
procedure MatchString(x: string);
begin
if Value <> x then Expected('''' + x + '''');
end;
{β}
{ Generate a Unique Label }
function NewLabel: string;
var S: string;
begin
Str(LCount, S);
NewLabel := 'L' + S;
Inc(LCount);
end;
{β}
{ Post a Label To Output }
procedure PostLabel(L: string);
begin
WriteLn(L, ':');
end;
{β}
{ Output a String with Tab }
procedure Emit(s: string);
begin
Write(TAB, s);
end;
{β}
{ Output a String with Tab and CRLF }
procedure EmitLn(s: string);
begin
Emit(s);
WriteLn;
end;
{β}
{ Parse and Translate an Identifier }
procedure Ident;
begin
GetName;
if Look = '(' then begin
Match('(');
Match(')');
EmitLn('BSR ' + Value);
end
else
EmitLn('MOVE ' + Value + '(PC),D0');
end;
{β}
{ Parse and Translate a Math Factor }
procedure Expression; Forward;
procedure Factor;
begin
if Look = '(' then begin
Match('(');
Expression;
Match(')');
end
else if IsAlpha(Look) then
Ident
else begin
GetNum;
EmitLn('MOVE #' + Value + ',D0');
end;
end;
{β}
{ Parse and Translate the First Math Factor }
procedure SignedFactor;
var s: boolean;
begin
s := Look = '-';
if IsAddop(Look) then begin
GetChar;
SkipWhite;
end;
Factor;
if s then
EmitLn('NEG D0');
end;
{β}
{ Recognize and Translate a Multiply }
procedure Multiply;
begin
Match('*');
Factor;
EmitLn('MULS (SP)+,D0');
end;
{β}
{ Recognize and Translate a Divide }
procedure Divide;
begin
Match('/');
Factor;
EmitLn('MOVE (SP)+,D1');
EmitLn('EXS.L D0');
EmitLn('DIVS D1,D0');
end;
{β}
{ Completion of Term Processing (called by Term and FirstTerm }
procedure Term1;
begin
while IsMulop(Look) do begin
EmitLn('MOVE D0,-(SP)');
case Look of
'*': Multiply;
'/': Divide;
end;
end;
end;
{β}
{ Parse and Translate a Math Term }
procedure Term;
begin
Factor;
Term1;
end;
{β}
{ Parse and Translate a Math Term with Possible Leading Sign }
procedure FirstTerm;
begin
SignedFactor;
Term1;
end;
{β}
{ Recognize and Translate an Add }
procedure Add;
begin
Match('+');
Term;
EmitLn('ADD (SP)+,D0');
end;
{β}
{ Recognize and Translate a Subtract }
procedure Subtract;
begin
Match('-');
Term;
EmitLn('SUB (SP)+,D0');
EmitLn('NEG D0');
end;
{β}
{ Parse and Translate an Expression }
procedure Expression;
begin
FirstTerm;
while IsAddop(Look) do begin
EmitLn('MOVE D0,-(SP)');
case Look of
'+': Add;
'-': Subtract;
end;
end;
end;
{β}
{ Parse and Translate a Boolean Condition }
{ This version is a dummy }
Procedure Condition;
begin
EmitLn('Condition');
end;
{β}
{ Recognize and Translate an IF Construct }
procedure Block; Forward;
procedure DoIf;
var L1, L2: string;
begin
Condition;
L1 := NewLabel;
L2 := L1;
EmitLn('BEQ ' + L1);
Block;
if Token = 'l' then begin
L2 := NewLabel;
EmitLn('BRA ' + L2);
PostLabel(L1);
Block;
end;
PostLabel(L2);
MatchString('ENDIF');
end;
{β}
{ Parse and Translate an Assignment Statement }
procedure Assignment;
var Name: string;
begin
Name := Value;
Match('=');
Expression;
EmitLn('LEA ' + Name + '(PC),A0');
EmitLn('MOVE D0,(A0)');
end;
{β}
{ Recognize and Translate a Statement Block }
procedure Block;
begin
Scan;
while not (Token in ['e', 'l']) do begin
case Token of
'i': DoIf;
else Assignment;
end;
Scan;
end;
end;
{β}
{ Parse and Translate a Program }
procedure DoProgram;
begin
Block;
MatchString('END');
EmitLn('END')
end;
{β}
{ Initialize }
procedure Init;
begin
LCount := 0;
GetChar;
end;
{β}
{ Main Program }
begin
Init;
DoProgram;
end.
{β}
Π‘ΡΠ°Π²Π½ΠΈΡΠ΅ ΡΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Ρ Π΅Π΅ ΠΎΠ΄Π½ΠΎΡΠΈΠΌΠ²ΠΎΠ»ΡΠ½ΡΠΌ Π²Π°ΡΠΈΠ°Π½ΡΠΎΠΌ. Π― Π΄ΡΠΌΠ°Ρ Π²Ρ ΡΠΎΠ³Π»Π°ΡΠΈΡΠ΅ΡΡ, ΡΡΠΎ ΡΠ°Π·Π»ΠΈΡΠΈΡ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡΠ½Ρ.
ΠΠ°ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅
Π ΡΡΠΎΠΌΡ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ Π²Ρ ΡΠ·Π½Π°Π»ΠΈ ΠΊΠ°ΠΊ Π°Π½Π°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ ΠΈ Π³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°ΡΡ ΠΊΠΎΠ΄ Π΄Π»Ρ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠΉ, Π±ΡΠ»Π΅Π²ΡΡ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠΉ ΠΈ ΡΠΏΡΠ°Π²Π»ΡΡΡΠΈΡ ΡΡΡΡΠΊΡΡΡ. Π’Π΅ΠΏΠ΅ΡΡ Π²Ρ ΠΈΠ·ΡΡΠΈΠ»ΠΈ, ΠΊΠ°ΠΊ ΡΠ°Π·ΡΠ°Π±Π°ΡΡΠ²Π°ΡΡ Π»Π΅ΠΊΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ Π°Π½Π°Π»ΠΈΠ·Π°ΡΠΎΡΡ ΠΈ ΠΊΠ°ΠΊ Π²ΡΡΡΠΎΠΈΡΡ ΠΈΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ Π² ΡΡΠ°Π½ΡΠ»ΡΡΠΎΡ. ΠΡ Π²ΡΠ΅ Π΅ΡΠ΅ Π½Π΅ Π²ΠΈΠ΄Π΅Π»ΠΈ Π²ΡΠ΅Ρ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ², ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½Π΅Π½ΡΡ Π² ΠΎΠ΄Π½Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, Π½ΠΎ Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ ΡΠΎΠ³ΠΎ, ΡΡΠΎ ΠΌΡ ΡΠ΄Π΅Π»Π°Π»ΠΈ ΡΠ°Π½Π΅Π΅ Π²Ρ Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΏΡΠΈΠΉΡΠΈ ΠΊ Π·Π°ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ, ΡΡΠΎ Π»Π΅Π³ΠΊΠΎ ΡΠ°ΡΡΠΈΡΠΈΡΡ Π½Π°ΡΠΈ ΡΠ°Π½Π½ΠΈΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π΄Π»Ρ Π²ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ Π»Π΅ΠΊΡΠΈΡΠ΅ΡΠΊΠΈΡ Π°Π½Π°Π»ΠΈΠ·Π°ΡΠΎΡΠΎΠ².
ΠΡ ΠΎΡΠ΅Π½Ρ Π±Π»ΠΈΠ·ΠΊΠΈ ΠΊ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ Π²ΡΠ΅Ρ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ², Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡΡ Π΄Π»Ρ ΠΏΠΎΡΡΡΠΎΠ΅Π½ΠΈΡ Π½Π°ΡΡΠΎΡΡΠ΅Π³ΠΎ, ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠ°. ΠΡΡΡ Π΅ΡΠ΅ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΎΡΡΡΡΡΡΠ²ΡΡΡΠΈΡ Π²Π΅ΡΠ΅ΠΉ, ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎ Π²ΡΠ·ΠΎΠ²Ρ ΠΏΡΠΎΡΠ΅Π΄ΡΡ ΠΈ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ ΡΠΈΠΏΠΎΠ². ΠΡ Π±ΡΠ΄Π΅ΠΌ ΡΠ°Π±ΠΎΡΠ°ΡΡ Ρ Π½ΠΈΠΌΠΈ Π½Π° ΡΠ»Π΅Π΄ΡΡΡΠΈΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ ΡΡΠΎΠΊΠ°Ρ . ΠΡΠ΅ΠΆΠ΄Π΅ ΡΠ΅ΠΌ ΡΠ΄Π΅Π»Π°ΡΡ ΡΡΠΎ, ΠΎΠ΄Π½Π°ΠΊΠΎ, Ρ ΠΏΠΎΠ΄ΡΠΌΠ°Π» ΡΡΠΎ Π±ΡΠ»ΠΎ Π±Ρ Π·Π°Π±Π°Π²Π½ΠΎ ΠΏΡΠ΅Π²ΡΠ°ΡΠΈΡΡ ΡΡΠ°Π½ΡΠ»ΡΡΠΎΡ Π² Π½Π°ΡΡΠΎΡΡΠΈΠΉ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ. ΠΡΠΎ ΡΠΎ, ΡΠ΅ΠΌ ΠΌΡ Π·Π°ΠΉΠΌΠ΅ΠΌΡΡ Π² ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΉ Π³Π»Π°Π²Π΅.
ΠΠΎ Π½Π°ΡΡΠΎΡΡΠ΅Π³ΠΎ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ ΠΌΡ ΠΏΡΠΈΠΌΠ΅Π½ΡΠ»ΠΈ ΠΏΡΠ΅Π΄ΠΏΠΎΡΡΠΈΡΠ΅Π»ΡΠ½ΠΎ Π²ΠΎΡΡ ΠΎΠ΄ΡΡΠΈΠΉ ΠΌΠ΅ΡΠΎΠ΄ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ Π°Π½Π°Π»ΠΈΠ·Π°, Π½Π°ΡΠΈΠ½Π°Ρ Ρ Π½ΠΈΠ·ΠΊΠΎΡΡΠΎΠ²Π½Π΅Π²ΡΡ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΈΠΉ ΠΈ ΠΏΡΠΎΠ΄Π²ΠΈΠ³Π°ΡΡΡ Π²Π²Π΅ΡΡ . Π ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΉ Π³Π»Π°Π²Π΅ Ρ ΡΠ°ΠΊΠΆΠ΅ Π²Π·Π³Π»ΡΠ½Ρ ΡΠ²Π΅ΡΡ Ρ Π²Π½ΠΈΠ·, ΠΈ ΠΌΡ ΠΎΠ±ΡΡΠ΄ΠΈΠΌ, ΠΊΠ°ΠΊ ΠΈΠ·ΠΌΠ΅Π½ΡΠ΅ΡΡΡ ΡΡΡΡΠΊΡΡΡΠ° ΡΡΠ°Π½ΡΠ»ΡΡΠΎΡΠ° ΠΏΡΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ ΡΠ·ΡΠΊΠ°.
Π£Π²ΠΈΠ΄ΠΈΠΌΡΡ.
ΠΠ΅ΠΌΠ½ΠΎΠ³ΠΎ ΡΠΈΠ»ΠΎΡΠΎΡΠΈΠΈ
ΠΠ²Π΅Π΄Π΅Π½ΠΈΠ΅
ΠΡΠΎΡ ΡΡΠΎΠΊ Π±ΡΠ΄Π΅Ρ ΠΎΡΠ»ΠΈΡΠ°ΡΡΡΡ ΠΎΡ Π΄ΡΡΠ³ΠΈΡ ΡΡΠΎΠΊΠΎΠ² Π² Π½Π°ΡΠ΅ΠΉ ΡΠ΅ΡΠΈΠΈ ΠΏΠΎ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΎΠΌΡ Π°Π½Π°Π»ΠΈΠ·Ρ ΠΈ ΠΊΠΎΠ½ΡΡΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠΎΠ². ΠΠ° ΡΡΠΎΠΌ ΡΡΠΎΠΊΠ΅ Π½Π΅ Π±ΡΠ΄Π΅Ρ Π½ΠΈΠΊΠ°ΠΊΠΈΡ ΡΠΊΡΠΏΠ΅ΡΠΈΠΌΠ΅Π½ΡΠΎΠ² ΠΈΠ»ΠΈ ΠΊΠΎΠ΄Π°. ΠΠ° ΡΡΠΎΡ ΡΠ°Π· Ρ Ρ ΠΎΡΠ΅Π» Π±Ρ ΠΏΡΠΎΡΡΠΎ ΠΏΠΎΠ³ΠΎΠ²ΠΎΡΠΈΡΡ Ρ Π²Π°ΠΌΠΈ Π½Π΅ΠΊΠΎΡΠΎΡΠΎΠ΅ Π²ΡΠ΅ΠΌΡ. Π ΡΡΠ°ΡΡΡΡ, ΡΡΠΎ Π±ΡΠ΄Π΅Ρ ΠΊΠΎΡΠΎΡΠΊΠΈΠΉ ΡΡΠΎΠΊ ΠΈ Π·Π°ΡΠ΅ΠΌ ΠΌΡ ΡΠΌΠΎΠΆΠ΅ΠΌ ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠΈΡΡ Ρ ΡΠΎΠ³ΠΎ ΠΌΠ΅ΡΡΠ° Π³Π΄Π΅ ΠΎΡΡΠ°Π½ΠΎΠ²ΠΈΠ»ΠΈΡΡ, Π½Π°Π΄ΠΎ Π½Π°Π΄Π΅ΡΡΡΡΡ Ρ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½Π½ΠΎΠΉ ΡΠ½Π΅ΡΠ³ΠΈΠ΅ΠΉ.
ΠΠΎΠ³Π΄Π° Ρ ΡΡΠΈΠ»ΡΡ Π² ΡΠ½ΠΈΠ²Π΅ΡΡΠΈΡΠ΅ΡΠ΅, Ρ ΠΎΠ±Π½Π°ΡΡΠΆΠΈΠ», ΡΡΠΎ ΠΌΠΎΠ³Ρ Π²ΡΠ΅Π³Π΄Π° ΡΠ»Π΅Π΄ΠΈΡΡ Π·Π° ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΡΠΊΠΎΠΉ Π»Π΅ΠΊΡΠΈΠ΅ΠΉ Π½Π°ΠΌΠ½ΠΎΠ³ΠΎ Π»ΡΡΡΠ΅, Π΅ΡΠ»ΠΈ Π·Π½Π°Π» ΠΊΡΠ΄Π° ΠΎΠ½ ΠΈΠ΄Π΅Ρ. ΠΠΎΡΠΎΠ² ΠΏΠΎΡΠΏΠΎΡΠΈΡΡ, Ρ Π²Π°ΠΌΠΈ Π±ΡΠ»ΠΎ ΡΠΎ ΠΆΠ΅ ΡΠ°ΠΌΠΎΠ΅.
Π’Π°ΠΊ ΡΡΠΎ Ρ ΠΏΠΎΠ΄ΡΠΌΠ°Π», ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΏΡΠΈΡΠ»ΠΎ Π²ΡΠ΅ΠΌΡ ΡΠ°ΡΠΊΠ°Π·Π°ΡΡ Π²Π°ΠΌ ΠΊΡΠ΄Π° ΠΌΡ ΠΈΠ΄Π΅ΠΌ Ρ ΡΡΠΎΠΉ ΡΠ΅ΡΠΈΠ΅ΠΉ: ΡΡΠΎ Π½Π°Ρ ΠΆΠ΄Π΅Ρ Π² Π±ΡΠ΄ΡΡΠΈΡ Π³Π»Π°Π²Π°Ρ ΠΈ Π²ΠΎΠΎΠ±ΡΠ΅ ΡΡΠΎ ΠΊ ΡΠ΅ΠΌΡ. Π― ΡΠ°ΠΊΠΆΠ΅ ΠΏΠΎΠ΄Π΅Π»ΡΡΡ ΡΠ²ΠΎΠΈΠΌΠΈ ΠΎΠ±ΡΠΈΠΌΠΈ ΠΌΡΡΠ»ΡΠΌΠΈ ΠΎ ΠΏΠΎΠ»Π΅Π·Π½ΠΎΡΡΠΈ ΡΠΎΠ³ΠΎ, ΡΡΠΎ ΠΌΡ Π΄Π΅Π»Π°Π»ΠΈ.
ΠΠΎΡΠΎΠ³Π° Π΄ΠΎΠΌΠΎΠΉ
ΠΠΎΠΊΠ° ΡΡΠΎ ΠΌΡ ΠΎΡ Π²Π°ΡΠΈΠ»ΠΈ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈΠΉ Π°Π½Π°Π»ΠΈΠ· ΠΈ ΡΡΠ°Π½ΡΠ»ΡΡΠΈΡ Π°ΡΠΈΡΠΌΠ΅ΡΠΈΡΠ΅ΡΠΊΠΈΡ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠΉ, Π±ΡΠ»Π΅Π²ΡΡ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠΉ ΠΈ ΠΈΡ ΠΊΠΎΠΌΠ±ΠΈΠ½Π°ΡΠΈΠΉ, ΡΠ²ΡΠ·Π°Π½Π½ΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠ°ΠΌΠΈ ΠΎΡΠ½ΠΎΡΠ΅Π½ΠΈΠΉ. ΠΡ ΡΠ°ΠΊΠΆΠ΅ ΡΠ΄Π΅Π»Π°Π»ΠΈ ΡΠΎ ΠΆΠ΅ ΡΠ°ΠΌΠΎΠ΅ Π΄Π»Ρ ΡΠΏΡΠ°Π²Π»ΡΡΡΠΈΡ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΈΠΉ. ΠΠΎ Π²ΡΠ΅ΠΌ ΡΡΠΎΠΌ ΠΌΡ ΡΠΊΠ»ΠΎΠ½ΡΠ»ΠΈΡΡ Π² ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΌ ΠΊ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ Π½ΠΈΡΡ ΠΎΠ΄ΡΡΠ΅Π³ΠΎ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ Π°Π½Π°Π»ΠΈΠ·Π° ΠΌΠ΅ΡΠΎΠ΄ΠΎΠΌ ΡΠ΅ΠΊΡΡΡΠΈΠ²Π½ΠΎΠ³ΠΎ ΡΠΏΡΡΠΊΠ°, ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ° Π² ΠΠΠ€ ΠΈ Π½Π΅ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²Π΅Π½Π½ΠΎΠΉ Π³Π΅Π½Π΅ΡΠ°ΡΠΈΠΈ Π°ΡΡΠ΅ΠΌΠ±Π»Π΅ΡΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°. ΠΡ ΡΠ°ΠΊΠΆΠ΅ ΠΈΠ·ΡΡΠΈΠ»ΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΠ°ΠΊΠΎΠ³ΠΎ ΠΏΡΠΈΠ΅ΠΌΠ° ΠΊΠ°ΠΊ ΠΎΠ΄Π½ΠΎΡΠΈΠΌΠ²ΠΎΠ»ΡΠ½ΡΠ΅ ΡΠΎΠΊΠ΅Π½Ρ. Π ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅ΠΉ Π³Π»Π°Π²Π΅ ΠΌΡ ΡΠ°Π±ΠΎΡΠ°Π»ΠΈ Ρ Π»Π΅ΠΊΡΠΈΡΠ΅ΡΠΊΠΈΠΌ Π°Π½Π°Π»ΠΈΠ·ΠΎΠΌ ΠΈ Ρ ΠΏΠΎΠΊΠ°Π·Π°Π» Π²Π°ΠΌ ΠΏΡΠΎΡΡΠΎΠΉ Π½ΠΎ ΠΌΠΎΡΠ½ΡΠΉ ΡΠΏΠΎΡΠΎΠ± ΠΏΡΠ΅ΠΎΠ΄ΠΎΠ»Π΅Π½ΠΈΡ ΠΎΠ΄Π½ΠΎΡΠΈΠΌΠ²ΠΎΠ»ΡΠ½ΠΎΠ³ΠΎ Π±Π°ΡΡΠ΅ΡΠ°.
Π ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ Π²ΡΠ΅Ρ ΡΡΠΈΡ ΠΈΡΡΠ»Π΅Π΄ΠΎΠ²Π°Π½ΠΈΠΉ, Ρ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎ Π²ΡΠ΄Π΅Π»ΡΠ» ΡΠΈΠ»ΠΎΡΠΎΡΠΈΡ KISS... Keep It Simple, Sidney... ΠΈ Ρ Π½Π°Π΄Π΅ΡΡΡ, ΡΡΠΎ ΠΊ Π½Π°ΡΡΠΎΡΡΠ΅ΠΌΡ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ Π²Ρ ΠΏΠΎΠ½ΡΠ»ΠΈ, Π½Π°ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΏΡΠΎΡΡΡΠΌΠΈ ΠΌΠΎΠ³ΡΡ Π² Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ Π±ΡΡΡ ΡΡΠΈ Π²Π΅ΡΠΈ. Π₯ΠΎΡΡ Π½Π°Π²Π΅ΡΠ½ΡΠΊΠ° ΠΈΠΌΠ΅ΡΡΡΡ ΠΎΠ±Π»Π°ΡΡΠΈ Π² ΡΠ΅ΠΎΡΠΈΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠ²Π»ΡΡΡΡΡ ΠΏΠΎ Π½Π°ΡΡΠΎΡΡΠ΅ΠΌΡ ΠΏΡΠ³Π°ΡΡΠΈΠΌΠΈ, ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΉ ΠΌΡΡΠ»ΡΡ ΡΡΠΎΠΉ ΡΠ΅ΡΠΈΠΈ ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠΎ, ΡΡΠΎ Π½Π° ΠΏΡΠ°ΠΊΡΠΈΠΊΠ΅ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΏΡΠΎΡΡΠΎ Π²Π΅ΠΆΠ»ΠΈΠ²ΠΎ ΠΎΠ±ΠΎΠΉΡΠΈ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ ΠΈΠ· ΡΡΠΈΡ ΠΎΠ±Π»Π°ΡΡΠ΅ΠΉ. ΠΡΠ»ΠΈ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΡΠ·ΡΠΊΠ° ΡΠΏΠΎΡΠΎΠ±ΡΡΠ²ΡΠ΅Ρ ΡΡΠΎΠΌΡ ΠΈΠ»ΠΈ, ΠΊΠ°ΠΊ Π² ΡΡΠΎΠΉ ΡΠ΅ΡΠΈΠΈ, Π΅ΡΠ»ΠΈ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ ΡΠ·ΡΠΊ ΠΏΠΎ Ρ ΠΎΠ΄Ρ Π΄Π΅Π»Π°, ΡΠΎ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΏΠΈΡΠ°ΡΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΡΠ·ΡΠΊΠ° Π² ΠΠΠ€ Ρ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΡΠΌ ΡΠ΄ΠΎΠ±ΡΡΠ²ΠΎΠΌ. Π, ΠΊΠ°ΠΊ ΠΌΡ Π²ΠΈΠ΄Π΅Π»ΠΈ, Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π²ΡΠ²Π΅ΡΡΠΈ ΠΏΡΠΎΡΠ΅Π΄ΡΡΡ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ Π°Π½Π°Π»ΠΈΠ·Π° ΠΈΠ· ΠΠΠ€ ΠΏΠΎΡΡΠΈ ΡΠ°ΠΊΠΆΠ΅ Π±ΡΡΡΡΠΎ, ΠΊΠ°ΠΊ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π½Π°Π±ΠΈΡΠ°ΡΡ Π½Π° ΠΊΠ»Π°Π²ΠΈΠ°ΡΡΡΠ΅.
ΠΠΎ ΠΌΠ΅ΡΠ΅ ΡΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Π½Π°Ρ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π» Π½Π΅ΠΊΠΎΡΠΎΡΡΡ ΡΠΎΡΠΌΡ, ΠΎΠ½ ΠΏΡΠΈΠΎΠ±ΡΠ΅ΡΠ°Π» Π±ΠΎΠ»ΡΡΠ΅ ΡΠ°ΡΡΠ΅ΠΉ, Π½ΠΎ ΠΊΠ°ΠΆΠ΄Π°Ρ ΡΠ°ΡΡΡ Π΄ΠΎΠ²ΠΎΠ»ΡΠ½ΠΎ ΠΌΠ°Π»Π° ΠΈ ΠΏΡΠΎΡΡΠ° ΠΈ ΠΎΡΠ΅Π½Ρ ΠΏΠΎΡ ΠΎΠΆΠ° Π½Π° Π²ΡΠ΅ Π΄ΡΡΠ³ΠΈΠ΅.
Π ΡΡΠΎΠΌΡ ΠΌΠΎΠΌΠ΅Π½ΡΡ Ρ Π½Π°Ρ Π΅ΡΡΡ ΠΌΠ½ΠΎΠ³ΠΎΠ΅ ΠΈΠ· ΡΠΎΠ³ΠΎ, ΡΡΠΎ ΡΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ Π½Π°ΡΡΠΎΡΡΠΈΠΉ ΠΏΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈΠΉ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ. Π€Π°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ, ΠΌΡ ΡΠΆΠ΅ ΠΈΠΌΠ΅Π΅ΠΌ Π²ΡΠ΅ ΡΡΠΎ Π½Π°ΠΌ Π½ΡΠΆΠ½ΠΎ Π΄Π»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΈΠ³ΡΡΡΠ΅ΡΠ½ΠΎΠ³ΠΎ ΡΠ·ΡΠΊΠ° ΡΡΠΎΠ»Ρ ΠΆΠ΅ ΠΌΠΎΡΠ½ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ, ΡΠΊΠ°ΠΆΠ΅ΠΌ, Tiny Basic. Π ΡΠ»Π΅Π΄ΡΡΡΠΈΡ Π΄Π²ΡΡ Π³Π»Π°Π²Π°Ρ ΠΌΡ ΠΏΠΎΠΉΠ΄Π΅ΠΌ Π²ΠΏΠ΅ΡΠ΅Π΄ ΠΈ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΠΌ ΡΡΠΎΡ ΡΠ·ΡΠΊ.
ΠΠ»Ρ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΡ ΡΡΠΎΠΉ ΡΠ΅ΡΠΈΠΈ, Ρ Π½Π°Ρ Π²ΡΠ΅ Π΅ΡΠ΅ Π΅ΡΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠ΅ΠΌ Π΄Π»Ρ ΡΠ°ΡΠΊΡΡΡΠΈΡ. ΠΠ½ΠΈ Π²ΠΊΠ»ΡΡΠ°ΡΡ:
β’ ΠΡΠ·ΠΎΠ²Ρ ΠΏΡΠΎΡΠ΅Π΄ΡΡ, Ρ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ°ΠΌΠΈ ΠΈ Π±Π΅Π·.
β’ ΠΠΎΠΊΠ°Π»ΡΠ½ΡΠ΅ ΠΈ Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΡΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅.
β’ ΠΠ°Π·ΠΎΠ²ΡΠ΅ ΡΠΈΠΏΡ, ΡΠ°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ ΡΠΈΠΌΠ²ΠΎΠ»ΡΠ½ΡΠ΅ ΠΈ ΡΠ΅Π»ΠΎΡΠΈΡΠ»Π΅Π½Π½ΡΠ΅ ΡΠΈΠΏΡ.
β’ ΠΠ°ΡΡΠΈΠ²Ρ.
β’ Π‘ΡΡΠΎΠΊΠΈ.
β’ Π’ΠΈΠΏΡ ΠΈ ΡΡΡΡΠΊΡΡΡΡ, ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΠΌΡΠ΅ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΌ.
β’ Π‘ΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ Π°Π½Π°Π»ΠΈΠ·Π°ΡΠΎΡΡ Ρ Π΄Π΅ΡΠ΅Π²ΡΡΠΌΠΈ ΠΈ ΠΏΡΠΎΠΌΠ΅ΠΆΡΡΠΎΡΠ½ΡΠ΅ ΡΠ·ΡΠΊΠΈ.
β’ ΠΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΡ.
ΠΡΠ΅ ΡΡΠΎ Π±ΡΠ΄Π΅Ρ ΡΠ°ΡΡΠΌΠΎΡΡΠ΅Π½ΠΎ Π² Π±ΡΠ΄ΡΡΠΈΡ Π³Π»Π°Π²Π°Ρ . ΠΠΎΠ³Π΄Π° ΠΌΡ Π·Π°ΠΊΠΎΠ½ΡΠΈΠΌ, Π²Ρ Π±ΡΠ΄Π΅ΡΠ΅ ΠΈΠΌΠ΅ΡΡ Π²ΡΠ΅ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΡ, Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡΠ΅ Π΄Π»Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ ΠΈ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΡΠ²ΠΎΠ΅Π³ΠΎ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΠΎΠ³ΠΎ ΡΠ·ΡΠΊΠ° ΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠΎΠ² Π΄Π»Ρ Π΅Π³ΠΎ ΡΡΠ°Π½ΡΠ»ΡΡΠΈΠΈ.