Π―Π·ΡΠΊ, ΠΊΠΎΡΠΎΡΡΠΉ Ρ ΠΏΡΠΈΠ΄ΡΠΌΠ°Π», ΡΠ°Π·Π΄Π΅Π»ΠΈΡ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ Ρ ΠΎΡΠΎΡΠΈΠ΅ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡΠΈ Pascal, C ΠΈ Ada. ΠΠΎΠ»ΡΡΠΈΠ² ΡΡΠΎΠΊ ΠΈΠ· ΡΡΠ°Π²Π½Π΅Π½ΠΈΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠΎΠ² Pascal ΠΈ C Π² ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠ΅ΠΉ Π³Π»Π°Π²Π΅, TINY Π²ΡΠ΅ ΠΆΠ΅ Π±ΡΠ΄Π΅Ρ ΠΈΠΌΠ΅ΡΡ ΠΏΡΠ΅ΠΈΠΌΡΡΠ΅ΡΡΠ²Π΅Π½Π½ΠΎ Π²ΠΊΡΡ ΠΠ°ΡΠΊΠ°Π»Ρ. ΠΠ΅Π·Π΄Π΅, Π³Π΄Π΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, ΡΡΡΡΠΊΡΡΡΠ° ΡΠ·ΡΠΊΠ° Π±ΡΠ΄Π΅Ρ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½Π° ΠΊΠ»ΡΡΠ΅Π²ΡΠΌΠΈ ΡΠ»ΠΎΠ²Π°ΠΌΠΈ ΠΈΠ»ΠΈ ΡΠΈΠΌΠ²ΠΎΠ»Π°ΠΌΠΈ, ΡΠ°ΠΊ ΡΡΠΎ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈΠΉ Π°Π½Π°Π»ΠΈΠ·Π°ΡΠΎΡ Π±ΡΠ΄Π΅Ρ Π·Π½Π°ΡΡ, ΡΡΠΎ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ Π±Π΅Π· Π΄ΠΎΠ³Π°Π΄ΠΎΠΊ.
ΠΡΡΠ³ΠΎΠ΅ ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠ΅ ΠΏΡΠ°Π²ΠΈΠ»ΠΎ: Π― Ρ ΠΎΡΠ΅Π» Π±Ρ ΡΡΠΎΠ±Ρ Π² ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ Π²ΡΠ΅ΠΉ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΠ» Π½Π°ΡΡΠΎΡΡΠΈΠΉ Π²ΡΠΏΠΎΠ»Π½ΠΈΠΌΡΠΉ ΠΊΠΎΠ΄. ΠΠ°ΠΆΠ΅ Π΅ΡΠ»ΠΈ Π΅Π³ΠΎ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΡΠ»ΠΈΡΠΊΠΎΠΌ ΠΌΠ½ΠΎΠ³ΠΎ Π² ΡΠ°ΠΌΠΎΠΌ Π½Π°ΡΠ°Π»Π΅, Π½ΠΎ ΠΏΠΎ ΠΊΡΠ°ΠΉΠ½Π΅ΠΉ ΠΌΠ΅ΡΠ΅ ΠΎΠ½ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±ΡΡΡ ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΡΠΌ.
ΠΠ°ΠΊΠΎΠ½Π΅Ρ, Ρ Π±ΡΠ΄Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΏΠ°ΡΡ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠΉ Pascal, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΈΠΌΠ΅ΡΡ ΡΠΌΡΡΠ»: ΠΡΠ΅ Π΄Π°Π½Π½ΡΠ΅ ΠΈ ΠΏΡΠΎΡΠ΅Π΄ΡΡΡ Π΄ΠΎΠ»ΠΆΠ½Ρ Π±ΡΡΡ ΠΎΠ±ΡΡΠ²Π»Π΅Π½Ρ ΠΏΠ΅ΡΠ΅Π΄ ΡΠ΅ΠΌ, ΠΊΠ°ΠΊ ΠΎΠ½ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ. ΠΡΠΎ ΠΈΠΌΠ΅Π΅Ρ Π±ΠΎΠ»ΡΡΠΎΠΉ ΡΠΌΡΡΠ», Π΄Π°ΠΆΠ΅ Π΅ΡΠ»ΠΈ ΡΠ΅ΠΉΡΠ°Ρ Π΅Π΄ΠΈΠ½ΡΡΠ²Π΅Π½Π½ΡΠΌ ΡΠΈΠΏΠΎΠΌ Π΄Π°Π½Π½ΡΡ , ΠΊΠΎΡΠΎΡΡΠΉ ΠΌΡ Π±ΡΠ΄Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ, Π±ΡΠ΄Π΅Ρ ΡΠ»ΠΎΠ²ΠΎ. ΠΡΠΎ ΠΏΡΠ°Π²ΠΈΠ»ΠΎ, Π² ΡΠ²ΠΎΡ ΠΎΡΠ΅ΡΠ΅Π΄Ρ, ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, ΡΡΠΎ Π΅Π΄ΠΈΠ½ΡΡΠ²Π΅Π½Π½ΠΎΠ΅ ΠΏΡΠΈΠ΅ΠΌΠ»Π΅ΠΌΠΎΠ΅ ΠΌΠ΅ΡΡΠΎ Π΄Π»Ρ ΡΠ°Π·ΠΌΠ΅ΡΠ΅Π½ΠΈΡ Π²ΡΠΏΠΎΠ»Π½ΠΈΠΌΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ β Π² ΠΊΠΎΠ½ΡΠ΅ Π»ΠΈΡΡΠΈΠ½Π³Π°.
ΠΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π²Π΅ΡΡ Π½Π΅Π³ΠΎ ΡΡΠΎΠ²Π½Ρ Π±ΡΠ΄Π΅Ρ Π°Π½Π°Π»ΠΎΠ³ΠΈΡΠ½ΠΎ Pascal:
<program> ::= PROGRAM <top-level decl> <main> '.'
ΠΡ ΡΠΆΠ΅ Π΄ΠΎΡΡΠΈΠ³Π»ΠΈ ΡΠ΅ΡΠ°ΡΡΠ΅ΠΉ ΡΠΎΡΠΊΠΈ. ΠΠΎΠ΅ΠΉ ΠΏΠ΅ΡΠ²ΠΎΠΉ ΠΌΡΡΠ»ΡΡ Π±ΡΠ»ΠΎ ΡΠ΄Π΅Π»Π°ΡΡ ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΉ Π±Π»ΠΎΠΊ Π½Π΅ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΡΠΌ. ΠΠ°ΠΆΠ΅ΡΡΡ Π±Π΅ΡΡΠΌΡΡΠ»Π΅Π½Π½ΡΠΌ ΠΏΠΈΡΠ°ΡΡ Β«ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡΒ» Π±Π΅Π· ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, Π½ΠΎ ΡΡΠΎ ΠΈΠΌΠ΅Π΅Ρ ΡΠΌΡΡΠ», Π΅ΡΠ»ΠΈ ΠΌΡ ΡΠ°Π·ΡΠ΅ΡΠΈΠΌ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²Π΅Π½Π½ΡΠ΅ ΠΌΠΎΠ΄ΡΠ»ΠΈ, ΡΠ²ΡΠ·Π°Π½Π½ΡΠ΅ Π²ΠΌΠ΅ΡΡΠ΅. Π€Π°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ Ρ ΠΏΡΠ΅Π΄ΠΏΠΎΠ»Π°Π³Π°Ρ ΡΡΠ΅ΡΡΡ ΡΡΠΎ Π² KISS. ΠΠΎ ΡΠΎΠ³Π΄Π° ΠΌΡ ΡΡΠΎΠ»ΠΊΠ½Π΅ΠΌΡΡ Ρ ΠΊΡΡΠ΅ΠΉ ΠΏΡΠΎΠ±Π»Π΅ΠΌ, ΠΊΠΎΡΠΎΡΡΠ΅ Ρ ΠΏΡΠ΅Π΄ΠΏΠΎΡΠ΅Π» Π±Ρ ΡΠ΅ΠΉΡΠ°Ρ Π½Π΅ Π·Π°ΡΡΠ°Π³ΠΈΠ²Π°ΡΡ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΠ΅ΡΠΌΠΈΠ½ Β«PROGRAMΒ» Π² Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡΡ Π½Π΅ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎ ΡΠΏΠΎΡΡΠ΅Π±Π»ΡΠ΅ΠΌΡΠΌ. MODULE ΠΈΠ· Modula-2 ΠΈΠ»ΠΈ UNIT ΠΈΠ· Turbo Pascal Π±ΡΠ»ΠΈ Π±Ρ Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΡΡΠΈΠΌΠΈ. ΠΠΎ-Π²ΡΠΎΡΡΡ , ΠΊΠ°ΠΊ Π½Π°ΡΡΠ΅Ρ ΠΏΡΠ°Π²ΠΈΠ» Π²ΠΈΠ΄ΠΈΠΌΠΎΡΡΠΈ? ΠΠ°ΠΌ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΡΠΎΠ³Π»Π°ΡΠ΅Π½ΠΈΠ΅ Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ Ρ Π²ΠΈΠ΄ΠΈΠΌΠΎΡΡΡΡ ΠΈΠΌΠ΅Π½ Π² ΠΌΠΎΠ΄ΡΠ»ΡΡ . ΠΠ° Π΄Π°Π½Π½ΡΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ Π»ΡΡΡΠ΅ ΠΏΡΠΎΡΡΠΎ ΡΠΎΡ ΡΠ°Π½ΠΈΡΡ ΠΏΡΠΎΡΡΠΎΡΡ ΠΈ ΡΠΎΠ²Π΅ΡΡΠ΅Π½Π½ΠΎ ΠΈΠ³Π½ΠΎΡΠΈΡΠΎΠ²Π°ΡΡ ΡΡΡ ΠΈΠ΄Π΅Ρ.
Π’Π°ΠΊΠΆΠ΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡΡΡ Ρ ΡΡΠ΅Π±ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ, ΡΡΠΎΠ±Ρ ΠΎΡΠ½ΠΎΠ²Π½Π°Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° Π±ΡΠ»Π° ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅ΠΉ. Π― ΠΈΠ³ΡΠ°Π» Ρ ΠΈΠ΄Π΅Π΅ΠΉ ΡΠ΄Π΅Π»Π°ΡΡ Π΅Π΅ ΡΠ°Π·ΠΌΠ΅ΡΠ΅Π½ΠΈΠ΅ Π½Π΅ΡΠΈΠΊΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠΌ ΠΊΠ°ΠΊ Π² C. Π₯Π°ΡΠ°ΠΊΡΠ΅Ρ SK*DOS, ΠΠ‘ ΠΏΠΎΠ΄ ΠΊΠΎΡΠΎΡΡΡ Ρ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΡΡ, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΡΠ΄Π΅Π»Π°ΡΡ ΡΡΠΎ ΠΎΡΠ΅Π½Ρ ΠΏΡΠΎΡΡΠΎ. ΠΠΎ ΡΡΠΎ Π² Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ Π±ΠΎΠ»ΡΡΠΎΠ³ΠΎ ΡΠΌΡΡΠ»Π° ΠΏΡΠΈΠ½ΠΈΠΌΠ°Ρ Π²ΠΎ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Pascal-ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎΠ΅ ΡΡΠ΅Π±ΠΎΠ²Π°Π½ΠΈΠ΅, ΡΡΠΎ Π²ΡΠ΅ Π΄Π°Π½Π½ΡΠ΅ ΠΈ ΠΏΡΠΎΡΠ΅Π΄ΡΡΡ Π΄ΠΎΠ»ΠΆΠ½Ρ Π±ΡΡΡ ΠΎΠ±ΡΡΠ²Π»Π΅Π½Ρ ΠΏΡΠ΅ΠΆΠ΄Π΅ ΡΠ΅ΠΌ ΠΎΠ½ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ. Π’Π°ΠΊ ΠΊΠ°ΠΊ ΠΎΡΠ½ΠΎΠ²Π½Π°Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° ΠΌΠΎΠΆΠ΅Ρ Π²ΡΠ·ΡΠ²Π°ΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΡΠ΅ ΠΏΡΠΎΡΠ΅Π΄ΡΡΡ, ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠΆΠ΅ Π±ΡΠ»ΠΈ ΠΎΠ±ΡΡΠ²Π»Π΅Π½Ρ, Π΅Π΄ΠΈΠ½ΡΡΠ²Π΅Π½Π½ΠΎΠ΅ ΠΌΠ΅ΡΡΠΎΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, ΠΈΠΌΠ΅ΡΡΠ΅Π΅ ΡΠΌΡΡΠ» β Π² ΠΊΠΎΠ½ΡΠ΅, a la Pascal.
ΠΠΎ Π΄Π°Π½Π½ΠΎΠΉ Π²ΡΡΠ΅ ΠΠΠ€ Π΄Π°Π²Π°ΠΉΡΠ΅ Π½Π°ΠΏΠΈΡΠ΅ΠΌ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈΠΉ Π°Π½Π°Π»ΠΈΠ·Π°ΡΠΎΡ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΡΠΎΡΡΠΎ ΡΠ°ΡΠΏΠΎΠ·Π½Π°Π΅Ρ ΡΠΊΠΎΠ±ΠΊΠΈ:
{β}
{ Parse and Translate a Program }
procedure Prog;
begin
Match('p');
Header;
Prolog;
Match('.');
Epilog;
end;
{β}
ΠΡΠΎΡΠ΅Π΄ΡΡΠ° Header ΠΏΡΠΎΡΡΠΎ Π²ΡΠ΄Π°Π΅Ρ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΎΠ½Π½ΡΠΉ ΠΊΠΎΠ΄, Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡΠΉ Π°ΡΡΠ΅ΠΌΠ±Π»Π΅ΡΡ:
{β}
{ Write Header Info }
procedure Header;
begin
WriteLn('WARMST', TAB, 'EQU $A01E');
end;
{β}
ΠΡΠΎΡΠ΅Π΄ΡΡΡ Prolog ΠΈ Epilog Π²ΡΠ΄Π°ΡΡ ΠΊΠΎΠ΄ Π΄Π»Ρ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΠΈ Π΄Π»Ρ Π²ΠΎΠ·Π²ΡΠ°ΡΠ΅Π½ΠΈΡ Π² ΠΠ‘:
{β}
{ Write the Prolog }
procedure Prolog;
begin
PostLabel('MAIN');
end;
{β}
{ Write the Epilog }
procedure Epilog;
begin
EmitLn('DC WARMST');
EmitLn('END MAIN');
end;
{β}
ΠΡΠ½ΠΎΠ²Π½Π°Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° ΠΏΡΠΎΡΡΠΎ Π²ΡΠ·ΡΠ²Π°Π΅Ρ Prog ΠΈ Π·Π°ΡΠ΅ΠΌ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅Ρ ΠΏΡΠΎΠ²Π΅ΡΠΊΡ Π½Π° ΡΠΈΡΡΠΎΠ΅ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΠ΅:
{β}
{ Main Program }
begin
Init;
Prog;
if Look <> CR then Abort('Unexpected data after ''.''');
end.
{β}
Π‘Π΅ΠΉΡΠ°Ρ TINY ΠΏΡΠΈΠΌΠ΅Ρ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ΄Π½Ρ Β«ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡΒ» β ΠΏΡΡΡΡΡ:
PROGRAM . (ΠΈΠ»ΠΈ 'p.' Π² Π½Π°ΡΠ΅ΠΉ ΡΡΠ΅Π½ΠΎΠ³ΡΠ°ΡΠΈΠΈ).
ΠΠ°ΠΌΠ΅ΡΡΡΠ΅, ΡΠ΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, ΡΡΠΎ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ Π³Π΅Π½Π΅ΡΠΈΡΡΠ΅Ρ Π΄Π»Ρ ΡΡΠΎΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΡΠΉ ΠΊΠΎΠ΄. ΠΠ½Π° Π±ΡΠ΄Π΅Ρ Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ ΠΈ Π΄Π΅Π»Π°ΡΡ ΡΠΎ, ΡΡΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠΆΠΈΠ΄Π°ΡΡ ΠΎΡ ΠΏΡΡΡΠΎΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, Ρ.Π΅. Π½ΠΈΡΠ΅Π³ΠΎ ΠΊΡΠΎΠΌΠ΅ ΡΠ»Π΅Π³Π°Π½ΡΠ½ΠΎΠ³ΠΎ Π²ΠΎΠ·Π²ΡΠ°ΡΠ΅Π½ΠΈΡ Π² ΠΠ‘.
ΠΠ΄ΠΈΠ½ ΠΈΠ· ΠΌΠΎΠΈΡ Π»ΡΠ±ΠΈΠΌΡΡ Π±Π΅Π½ΡΠΌΠ°ΡΠΊΠΎΠ² Π΄Π»Ρ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠΎΠ² Π·Π°ΠΊΠ»ΡΡΠ°Π΅ΡΡΡ Π² ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ, ΡΠ²ΡΠ·ΡΠ²Π°Π½ΠΈΠΈ ΠΈ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ ΠΏΡΡΡΠΎΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π΄Π»Ρ Π»ΡΠ±ΠΎΠ³ΠΎ ΡΠ·ΡΠΊΠ°. ΠΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΌΠ½ΠΎΠ³ΠΎΠ΅ ΡΠ·Π½Π°ΡΡ ΠΎ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΈΠ·ΠΌΠ΅ΡΡΡ ΠΏΡΠ΅Π΄Π΅Π» Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ, Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡΠΉ Π΄Π»Ρ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ ΡΡΠΈΠ²ΠΈΠ°Π»ΡΠ½ΠΎΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ. Π’Π°ΠΊΠΆΠ΅ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½ΠΎ ΠΈΠ·ΠΌΠ΅ΡΠΈΡΡ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΠΏΠΎΠ»ΡΡΠ΅Π½Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°. ΠΠΎ ΠΌΠ½ΠΎΠ³ΠΈΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠ°Ρ ΠΊΠΎΠ΄ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π΄ΠΎΠ²ΠΎΠ»ΡΠ½ΠΎ Π±ΠΎΠ»ΡΡΠΈΠΌ, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ ΠΎΠ½ΠΈ Π²ΡΠ΅Π³Π΄Π° Π²ΠΊΠ»ΡΡΠ°ΡΡ ΡΠ΅Π»ΡΡ run-time Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΡ Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΠΎ ΠΎΡ ΡΠΎΠ³ΠΎ, Π½ΡΠΆΠ΄Π°ΡΡΡΡ ΠΎΠ½ΠΈ Π² Π½Π΅ΠΉ ΠΈΠ»ΠΈ Π½Π΅Ρ. Π Π°Π½Π½ΠΈΠ΅ Π²Π΅ΡΡΠΈΠΈ Turbo Pascal Π² ΡΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΠ»ΠΈ ΠΎΠ±ΡΠ΅ΠΊΡΠ½ΡΠΉ ΡΠ°ΠΉΠ» 12Π. VAX C Π³Π΅Π½Π΅ΡΠΈΡΡΠ΅Ρ 50Π!
Π‘Π°ΠΌΡΠ΅ ΠΌΠ°Π»Π΅Π½ΡΠΊΠΈΠ΅ ΠΏΡΡΡΡΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΠΊΠ°ΠΊΠΈΠ΅ Ρ Π²ΠΈΠ΄Π΅Π», ΠΏΠΎΠ»ΡΡΠ΅Π½Ρ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠ°ΠΌΠΈ ΠΠΎΠ΄ΡΠ»Π°-2 ΠΈ ΠΎΠ½ΠΈ Π·Π°Π½ΠΈΠΌΠ°ΡΡ ΠΏΡΠΈΠΌΠ΅ΡΠ½ΠΎ 200-800 Π±Π°ΠΉΡ.
Π ΡΠ»ΡΡΠ°Π΅ TINY Ρ Π½Π°Ρ Π΅ΡΠ΅ Π½Π΅Ρ run-time Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ, ΡΠ°ΠΊ ΡΡΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠ½ΡΠΉ ΠΊΠΎΠ΄ Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎ ΠΊΡΠΎΡΠ΅ΡΠ½ΡΠΉ (tiny): Π΄Π²Π° Π±Π°ΠΉΡΠ°. ΠΡΠΎ ΡΡΠ°Π»ΠΎ ΡΠ΅ΠΊΠΎΡΠ΄ΠΎΠΌ, ΠΈ Π²Π΅ΡΠΎΡΡΠ½ΠΎ ΠΎΡΡΠ°Π½Π΅ΡΡΡ ΡΠ°ΠΊΠΎΠ²ΡΠΌ, ΡΠ°ΠΊ ΠΊΠ°ΠΊ ΡΡΠΎ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡΠ½ΡΠΉ ΡΠ°Π·ΠΌΠ΅Ρ, ΡΡΠ΅Π±ΡΠ΅ΠΌΡΠΉ ΠΠ‘.
Π‘Π»Π΅Π΄ΡΡΡΠΈΠΌ ΡΠ°Π³ΠΎΠΌ Π±ΡΠ΄Π΅Ρ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° ΠΊΠΎΠ΄Π° Π΄Π»Ρ ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ. Π― Π±ΡΠ΄Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π±Π»ΠΎΠΊ BEGIN ΠΈΠ· Pascal:
<main> ::= BEGIN <block> END
ΠΠ΄Π΅ΡΡ ΠΌΡ ΡΠ½ΠΎΠ²Π° ΠΏΡΠΈΠ½ΡΠ»ΠΈ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅. ΠΡ ΠΌΠΎΠ³Π»ΠΈ Π±Ρ ΠΏΠΎΡΡΠ΅Π±ΠΎΠ²Π°ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΠ΅ Π²ΠΈΠ΄Π° Β«PROCEDURE MAINΒ», ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎ C. Π― Π΄ΠΎΠ»ΠΆΠ΅Π½ Π΄ΠΎΠΏΡΡΡΠΈΡΡ, ΡΡΠΎ ΡΡΠΎ ΡΠΎΠ²ΡΠ΅ΠΌ Π½Π΅ΠΏΠ»ΠΎΡ Π°Ρ ΠΈΠ΄Π΅Ρ... ΠΠ½Π΅ Π½Π΅ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎ Π½ΡΠ°Π²ΠΈΡΡΡ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ ΠΠ°ΡΠΊΠ°Π»Ρ ΡΠ°ΠΊ ΠΊΠ°ΠΊ Ρ ΠΏΡΠ΅Π΄ΠΏΠΎΡΠΈΡΠ°Ρ Π½Π΅ ΠΈΠΌΠ΅ΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌ Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ΠΌ ΠΌΠ΅ΡΡΠΎΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π² Π»ΠΈΡΡΠΈΠ½Π³Π΅ ΠΠ°ΡΠΊΠ°Π»Ρ. ΠΠΎ Π°Π»ΡΡΠ΅ΡΠ½Π°ΡΠΈΠ²Π° ΡΠΎΠΆΠ΅ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ Π½Π΅ΡΠ΄ΠΎΠ±Π½Π°, ΡΠ°ΠΊ ΠΊΠ°ΠΊ Π²Ρ Π΄ΠΎΠ»ΠΆΠ½Ρ ΡΠ°Π±ΠΎΡΠ°ΡΡ Ρ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΎΠΉ ΠΎΡΠΈΠ±ΠΎΠΊ ΠΊΠΎΠ³Π΄Π° ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ ΠΎΠΏΡΡΡΠΈΡ ΠΎΡΠ½ΠΎΠ²Π½ΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΠΈΠ»ΠΈ ΡΠ΄Π΅Π»Π°Π΅Ρ ΠΎΡΡΠΎΠ³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΡΡ ΠΎΡΠΈΠ±ΠΊΡ Π² Π΅Π΅ Π½Π°Π·Π²Π°Π½ΠΈΠΈ. ΠΠ΄Π΅ΡΡ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ ΠΏΡΠΎΡΡΠΎΠΉ Π²ΡΡ ΠΎΠ΄.
ΠΡΡΠ³ΠΎΠ΅ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ Β«Π³Π΄Π΅ ΡΠ°ΡΠΏΠΎΠ»ΠΎΠΆΠ΅Π½Π° ΠΎΡΠ½ΠΎΠ²Π½Π°Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ°Β» ΠΌΠΎΠΆΠ΅Ρ Π·Π°ΠΊΠ»ΡΡΠ°ΡΡΡΡ Π² ΡΡΠ΅Π±ΠΎΠ²Π°Π½ΠΈΠΈ ΠΈΠΌΠ΅Π½ΠΈ Π΄Π»Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΠΈ Π·Π°ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π² ΡΠΊΠΎΠ±ΠΊΠΈ:
BEGIN <name>
END <name>
Π°Π½Π°Π»ΠΎΠ³ΠΈΡΠ½ΠΎ ΡΠΎΠ³Π»Π°ΡΠ΅Π½ΠΈΡ ΠΠΎΠ΄ΡΠ»Π°-2. ΠΡΠΎ Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅Ρ Π² ΡΠ·ΡΠΊ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ Β«ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ ΡΠ°Ρ Π°ΡΠ°Β». ΠΠΎΠ΄ΠΎΠ±Π½ΡΠ΅ Π²Π΅ΡΠΈ Π»Π΅Π³ΠΊΠΎ Π΄ΠΎΠ±Π°Π²Π»ΡΡΡ ΠΈ ΠΈΠ·ΠΌΠ΅Π½ΡΡΡ ΠΏΠΎ Π²Π°ΡΠΈΠΌ ΡΠΈΠΌΠΏΠ°ΡΠΈΡΠΌ Π΅ΡΠ»ΠΈ Π²Ρ ΡΠ°ΠΌΠΈ ΠΏΡΠΎΠ΅ΠΊΡΠΈΡΡΠ΅ΡΠ΅ ΡΠ·ΡΠΊ.
ΠΠ»Ρ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ Π°Π½Π°Π»ΠΈΠ·Π° ΡΠ°ΠΊΠΎΠ³ΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠ³ΠΎ Π±Π»ΠΎΠΊΠ° ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΠ΅ ΠΏΡΠΎΡΠ΅Π΄ΡΡΡ Prog ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ:
{β}
{ Parse and Translate a Program }
procedure Prog;
begin
Match('p');
Header;
Main;
Match('.');
end;
{β}
ΠΈ Π΄ΠΎΠ±Π°Π²ΡΡΠ΅ Π½ΠΎΠ²ΡΡ ΠΏΡΠΎΡΠ΅Π΄ΡΡΡ:
{β}
{ Parse and Translate a Main Program }
procedure Main;
begin
Match('b');
Prolog;
Match('e');
Epilog;
end;
{β}
Π’Π΅ΠΏΠ΅ΡΡ Π΅Π΄ΠΈΠ½ΡΡΠ²Π΅Π½Π½ΠΎΠΉ Π΄ΠΎΠΏΡΡΡΠΈΠΌΠΎΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΎΠΉ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ°:
PROGRAM BEGIN END. (ΠΈΠ»ΠΈ 'pbe.')
Π Π°Π·Π²Π΅ ΠΌΡ Π½Π΅ Π΄Π΅Π»Π°Π΅ΠΌ ΡΡΠΏΠ΅Ρ ΠΈ??? Π₯ΠΎΡΠΎΡΠΎ, ΠΊΠ°ΠΊ ΠΎΠ±ΡΡΠ½ΠΎ ΡΡΠΎ ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡΡ Π»ΡΡΡΠ΅. ΠΡ ΠΌΠΎΠ³Π»ΠΈ Π±Ρ ΠΏΠΎΠΏΡΠΎΠ±ΠΎΠ²Π°ΡΡ ΡΠ΄Π΅Π»Π°ΡΡ Π·Π΄Π΅ΡΡ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΡΠ΅Π΄Π½Π°ΠΌΠ΅ΡΠ΅Π½Π½ΡΠ΅ ΠΎΡΠΈΠ±ΠΊΠΈ ΠΏΠΎΠ΄ΠΎΠ±Π½ΡΠ΅ ΠΏΡΠΎΠΏΡΡΠΊΡ 'b' ΠΈΠ»ΠΈ 'e' ΠΈ ΠΏΠΎΡΠΌΠΎΡΡΠ΅ΡΡ ΡΡΠΎ ΡΠ»ΡΡΠΈΡΡΡ. ΠΠ°ΠΊ Π²ΡΠ΅Π³Π΄Π° ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΎΡΠΌΠ΅ΡΠΈΡΡ Π²ΡΠ΅ Π½Π΅Π΄ΠΎΠΏΡΡΡΠΈΠΌΡΠ΅ Π²Ρ ΠΎΠ΄Π½ΡΠ΅ ΡΠΈΠΌΠ²ΠΎΠ»Ρ.
ΠΠ±ΡΡΠ²Π»Π΅Π½ΠΈΡ
ΠΡΠ΅Π²ΠΈΠ΄Π½ΠΎ Π½Π° ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΌ ΡΠ°Π³Π΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΡΠ΅ΡΠΈΡΡ, ΡΡΠΎ ΠΌΡ ΠΏΠΎΠ΄ΡΠ°Π·ΡΠΌΠ΅Π²Π°Π΅ΠΌ ΠΏΠΎΠ΄ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΠ΅ΠΌ. Π― Π½Π°ΠΌΠ΅ΡΠ΅Π²Π°ΡΡΡ ΠΈΠΌΠ΅ΡΡ Π΄Π²Π° Π²ΠΈΠ΄Π° ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΠΉ: ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ ΠΈ ΠΏΡΠΎΡΠ΅Π΄ΡΡ/ΡΡΠ½ΠΊΡΠΈΠΉ. ΠΠ° Π²Π΅ΡΡ Π½Π΅ΠΌ ΡΡΠΎΠ²Π½Π΅ ΡΠ°Π·ΡΠ΅ΡΠ΅Π½Ρ ΡΠΎΠ»ΡΠΊΠΎ Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΡΠ΅ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΡ, ΡΠΎΡΠ½ΠΎ ΠΊΠ°ΠΊ Π² C.
Π‘Π΅ΠΉΡΠ°Ρ Π·Π΄Π΅ΡΡ ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ , ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΡΠΈΡΡΠ΅ΠΌΡΠ΅ ΠΏΠΎ ΠΊΠ»ΡΡΠ΅Π²ΠΎΠΌΡ ΡΠ»ΠΎΠ²Ρ VAR (ΡΠΎΠΊΡΠ°ΡΠ΅Π½Π½ΠΎ "v").
<top-level decls> ::= ( <data declaration> )*
<data declaration> ::= VAR <var-list>
ΠΠ±ΡΠ°ΡΠΈΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, ΡΡΠΎ ΡΠ°ΠΊ ΠΊΠ°ΠΊ ΠΈΠΌΠ΅Π΅ΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ΄ΠΈΠ½ ΡΠΈΠΏ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ , Π½Π΅Ρ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΠΈ ΠΎΠ±ΡΡΠ²Π»ΡΡΡ ΡΡΠΎΡ ΡΠΈΠΏ. ΠΠΎΠ·Π΄Π½Π΅Π΅, Π΄Π»Ρ ΠΏΠΎΠ»Π½ΠΎΠΉ Π²Π΅ΡΡΠΈΠΈ KISS, ΠΌΡ ΡΠΌΠΎΠΆΠ΅ΠΌ Π»Π΅Π³ΠΊΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΡΠΈΠΏΠ°.
ΠΡΠΎΡΠ΅Π΄ΡΡΠ° Prog ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡΡ:
{β}
{ Parse and Translate a Program }
procedure Prog;
begin
Match('p');
Header;
TopDecls;
Main;
Match('.');
end;
{β}
Π’Π΅ΠΏΠ΅ΡΡ Π΄ΠΎΠ±Π°Π²ΡΡΠ΅ Π΄Π²Π΅ Π½ΠΎΠ²ΡΠ΅ ΠΏΡΠΎΡΠ΅Π΄ΡΡΡ:
{β}
{ Process a Data Declaration }
procedure Decl;
begin
Match('v');
GetChar;
end;
{β}
{ Parse and Translate Global Declarations }
procedure TopDecls;
begin
while Look <> 'b' do
case Look of
'v': Decl;
else Abort('Unrecognized Keyword ''' + Look + '''');
end;
end;
{β}
ΠΠ°ΠΌΠ΅ΡΡΡΠ΅, ΡΡΠΎ Π½Π° Π΄Π°Π½Π½ΡΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ Decl β ΠΏΡΠΎΡΡΠΎ Π·Π°Π³Π»ΡΡΠΊΠ°. ΠΠ½Π° Π½Π΅ Π³Π΅Π½Π΅ΡΠΈΡΡΠ΅Ρ Π½ΠΈΠΊΠ°ΠΊΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° ΠΈ Π½Π΅ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°Π΅Ρ ΡΠΏΠΈΡΠΎΠΊ... ΠΊΠ°ΠΆΠ΄Π°Ρ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ Π΄ΠΎΠ»ΠΆΠ½Π° Π±ΡΡΡ Π² ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎΠΌ ΡΡΠ²Π΅ΡΠΆΠ΄Π΅Π½ΠΈΠΈ VAR.
ΠΠ, ΡΠ΅ΠΏΠ΅ΡΡ Ρ Π½Π°Ρ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π»ΡΠ±ΠΎΠ΅ ΡΠΈΡΠ»ΠΎ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΠΉ Π΄Π°Π½Π½ΡΡ , ΠΊΠ°ΠΆΠ΄ΠΎΠ΅ Π½Π°ΡΠΈΠ½Π°Π΅ΡΡΡ Ρ "v" Π²ΠΌΠ΅ΡΡΠΎ VAR, ΠΏΠ΅ΡΠ΅Π΄ Π±Π»ΠΎΠΊΠΎΠΌ BEGIN. ΠΠΎΠΏΡΠΎΠ±ΡΠΉΡΠ΅ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ Π²Π°ΡΠΈΠ°Π½ΡΠΎΠ² ΠΈ ΠΏΠΎΡΠΌΠΎΡΡΠΈΡΠ΅, ΡΡΠΎ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ.
ΠΠ±ΡΡΠ²Π»Π΅Π½ΠΈΡ ΠΈ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΡ
ΠΡΠΎ Π²ΡΠ³Π»ΡΠ΄ΠΈΡ Π΄ΠΎΠ²ΠΎΠ»ΡΠ½ΠΎ Ρ ΠΎΡΠΎΡΠΎ, Π½ΠΎ ΠΌΡ Π²ΡΠ΅ Π΅ΡΠ΅ Π³Π΅Π½Π΅ΡΠΈΡΡΠ΅ΠΌ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΡΡΡΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ. ΠΠ°ΡΡΠΎΡΡΠΈΠΉ Π°ΡΡΠ΅ΠΌΠ±Π»Π΅Ρ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π²ΡΠ΄Π°Π²Π°ΡΡ Π΄ΠΈΡΠ΅ΠΊΡΠΈΠ²Ρ Π°ΡΡΠ΅ΠΌΠ±Π»Π΅ΡΠ° Π΄Π»Ρ ΡΠ°ΡΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ ΠΏΠ°ΠΌΡΡΠΈ ΠΏΠΎΠ΄ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅. ΠΡΠΈΡΠ»ΠΎ Π²ΡΠ΅ΠΌΡ Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΠΊΠ°ΠΊΠΎΠΉ-Π½ΠΈΠ±ΡΠ΄Ρ ΠΊΠΎΠ΄.
Π‘ Π½Π΅Π±ΠΎΠ»ΡΡΠΈΠΌ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠΌ ΠΊΠΎΠ΄ΠΎΠΌ ΡΡΠΎ Π»Π΅Π³ΠΊΠΎ ΡΠ΄Π΅Π»Π°ΡΡ Π² ΠΏΡΠΎΡΠ΅Π΄ΡΡΠ΅ Decl. ΠΠ·ΠΌΠ΅Π½ΠΈΡΠ΅ Π΅Π΅ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ:
{β}
{ Parse and Translate a Data Declaration }
procedure Decl;
var Name: char;
begin
Match('v');
Alloc(GetName);
end;
{β}
ΠΡΠΎΡΠ΅Π΄ΡΡΠ° Alloc ΠΏΡΠΎΡΡΠΎ Π²ΡΠ΄Π°Π΅Ρ ΠΊΠΎΠΌΠ°Π½Π΄Ρ Π°ΡΡΠ΅ΠΌΠ±Π»Π΅ΡΡ Π΄Π»Ρ ΡΠ°ΡΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ ΠΏΠ°ΠΌΡΡΠΈ:
{β}
{ Allocate Storage for a Variable }
procedure Alloc(N: char);
begin
WriteLn(N, ':', TAB, 'DC 0');
end;
{β}
ΠΠΎΠ³ΠΎΠ½ΡΠΉΡΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ. ΠΠΎΠΏΡΠΎΠ±ΡΠΉΡΠ΅ Π²Ρ ΠΎΠ΄Π½ΡΡ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΡ, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΎΠ±ΡΡΠ²Π»ΡΠ΅Ρ ΠΊΠ°ΠΊΠΈΠ΅-Π½ΠΈΠ±ΡΠ΄Ρ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ:
pvxvyvzbe.
ΠΠΈΠ΄ΠΈΡΠ΅, ΠΊΠ°ΠΊ ΡΠ°ΡΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΡΡΡ ΠΏΠ°ΠΌΡΡΡ? ΠΡΠΎΡΡΠΎ, Π΄Π°? ΠΠ°ΠΌΠ΅ΡΡΡΠ΅ ΡΠ°ΠΊΠΆΠ΅, ΡΡΠΎ ΡΠΎΡΠΊΠ° Π²Ρ ΠΎΠ΄Π° Β«MAINΒ» ΠΏΠΎΡΠ²Π»ΡΠ΅ΡΡΡ Π² ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎΠΌ ΠΌΠ΅ΡΡΠ΅.
ΠΡΡΠ°ΡΠΈ, Β«Π½Π°ΡΡΠΎΡΡΠΈΠΉΒ» ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ ΠΈΠΌΠ΅Π» Π±Ρ ΡΠ°ΠΊΠΆΠ΅ ΡΠ°Π±Π»ΠΈΡΡ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΠΎΠ² Π΄Π»Ρ Π·Π°ΠΏΠΈΡΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ . ΠΠ±ΡΡΠ½ΠΎ, ΡΠ°Π±Π»ΠΈΡΠ° ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΠΎΠ² Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠ° Π΄Π»Ρ Π·Π°ΠΏΠΈΡΠΈ ΡΠΈΠΏΠ° ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ. ΠΠΎ ΡΠ°ΠΊ ΠΊΠ°ΠΊ Π² Π½Π°ΡΠ΅ΠΌ ΡΠ»ΡΡΠ°Π΅ Π²ΡΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ ΠΈΠΌΠ΅ΡΡ ΠΎΠ΄ΠΈΠ½ ΠΈ ΡΠΎΡ ΠΆΠ΅ ΡΠΈΠΏ, Π½Π°ΠΌ Π½Π΅ Π½ΡΠΆΠ½Π° ΡΠ°Π±Π»ΠΈΡΠ° ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΠΎΠ². ΠΠΊΠ°Π·ΡΠ²Π°Π΅ΡΡΡ, ΠΌΡ ΡΠΌΠΎΠ³Π»ΠΈ Π±Ρ Π½Π°Ρ ΠΎΠ΄ΠΈΡΡ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ Π΄Π°ΠΆΠ΅ Π±Π΅Π· ΡΠ°Π·Π»ΠΈΡΠΈΡ ΡΠΈΠΏΠΎΠ², Π½ΠΎ Π΄Π°Π²Π°ΠΉΡΠ΅ ΠΎΡΠ»ΠΎΠΆΠΈΠΌ ΡΡΠΎ ΠΏΠΎΠΊΠ° Π½Π΅ Π²ΠΎΠ·Π½ΠΈΠΊΠ½Π΅Ρ ΡΠ°ΠΊΠ°Ρ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΡ.