ΠŸΠΎΠΌΠΎΡ‰ΡŒ Π² написании студСнчСских Ρ€Π°Π±ΠΎΡ‚
АнтистрСссовый сСрвис

НаписаниС транслятора для языка Π‘

ΠšΡƒΡ€ΡΠΎΠ²Π°ΡΠŸΠΎΠΌΠΎΡ‰ΡŒ Π² Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΠΈΠ£Π·Π½Π°Ρ‚ΡŒ ΡΡ‚ΠΎΠΈΠΌΠΎΡΡ‚ΡŒΠΌΠΎΠ΅ΠΉ Ρ€Π°Π±ΠΎΡ‚Ρ‹

БинтаксичСский Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ осущСствляСт Ρ€Π°Π·Π±ΠΎΡ€ исходной ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΏΠΎΡΡ‚ΡƒΠΏΠ°ΡŽΡ‰ΠΈΠ΅ лСксСмы, построСниС синтаксичСской структуры ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. Π Π°ΡΠΏΠΎΠ·Π½Π°Π²Π°Ρ‚Π΅Π»ΡŒ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ Ρ†Π΅ΠΏΠΎΡ‡ΠΊΡƒ лСксСм ΠΈ Π½Π° Π΅Π΅ основС осущСствляСт Ρ€Π°Π·Π±ΠΎΡ€ Π² ΡΠΎΠΎΡ‚вСтствии с ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹ΠΌΠΈ ΠΏΡ€Π°Π²ΠΈΠ»Π°ΠΌΠΈ. ЛСксСмы, ΠΏΡ€ΠΈ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎΠΌ Ρ€Π°Π·Π±ΠΎΡ€Π΅ ΠΏΡ€Π°Π²ΠΈΠ», ΠΏΠ΅Ρ€Π΅Π΄Π°ΡŽΡ‚ΡΡ сСмантичСскому Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€Ρƒ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ строит Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ ΠΈΠΌΠ΅Π½ ΠΈ Ρ„иксируСт Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Ρ‹… Π§ΠΈΡ‚Π°Ρ‚ΡŒ Π΅Ρ‰Ρ‘ >

НаписаниС транслятора для языка Π‘ (Ρ€Π΅Ρ„Π΅Ρ€Π°Ρ‚, курсовая, Π΄ΠΈΠΏΠ»ΠΎΠΌ, ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½Π°Ρ)

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

НСсмотря Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΊ Π½Π°ΡΡ‚оящСму Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π½Ρ‹ тысячи Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… языков ΠΈ ΠΈΡ… Ρ‚рансляторов, процСсс создания Π½ΠΎΠ²Ρ‹Ρ… ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Π² ΡΡ‚ΠΎΠΉ области Π½Π΅ ΠΏΡ€Π΅ΠΊΡ€Π°Ρ‰Π°Π΅Ρ‚ся. Π­Ρ‚ΠΎ связно ΠΊΠ°ΠΊ с Ρ€Π°Π·Π²ΠΈΡ‚ΠΈΠ΅ΠΌ Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ производства Π²Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… систСм, Ρ‚Π°ΠΊ ΠΈ Ρ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒΡŽ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ всС Π±ΠΎΠ»Π΅Π΅ слоТных ΠΏΡ€ΠΈΠΊΠ»Π°Π΄Π½Ρ‹Ρ… Π·Π°Π΄Π°Ρ‡. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, элСмСнты Ρ‚Π΅ΠΎΡ€ΠΈΠΈ языков ΠΈ Ρ„ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½Ρ‹Ρ… Π³Ρ€Π°ΠΌΠΌΠ°Ρ‚ΠΈΠΊ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΠΌΡ‹ ΠΈ Π² Π΄Ρ€ΡƒΠ³ΠΈΡ… Ρ€Π°Π·Π½ΠΎΠΎΠ±Ρ€Π°Π·Π½Ρ‹Ρ… областях, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΏΡ€ΠΈ описании структур Π΄Π°Π½Π½Ρ‹Ρ…, Ρ„Π°ΠΉΠ»ΠΎΠ², ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ, прСдставлСнных Π½Π΅ Π² Ρ‚Скстовом, Π° Π΄Π²ΠΎΠΈΡ‡Π½ΠΎΠΌ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅. Π­Ρ‚ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ ΠΈ ΠΏΡ€ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ своих трансляторов Π΄Π°ΠΆΠ΅ Ρ‚Π°ΠΌ, Π³Π΄Π΅ ΡƒΠΆΠ΅ ΠΈΠΌΠ΅ΡŽΡ‚ΡΡ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ Π°Π½Π°Π»ΠΎΠ³ΠΈ. Вакая Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ обусловлСна Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹ΠΌΠΈ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π°ΠΌΠΈ, Π² Ρ‡Π°ΡΡ‚ности, Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹ΠΌΠΈ ограничСниями, отсутствиСм Π»ΠΎΠΊΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ, Π½ΠΈΠ·ΠΊΠΎΠΉ ΡΡ„Ρ„Π΅ΠΊΡ‚ΠΈΠ²Π½ΠΎΡΡ‚ΡŒΡŽ.

Π’ Π΄Π°Π½Π½ΠΎΠΉ Ρ€Π°Π±ΠΎΡ‚Π΅ Π±ΡƒΠ΄Π΅Ρ‚ прСдставлСна частичная рСализация транслятора для языка «Π‘» с ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ языка «Π‘++». Π”Π°Π½Π½Ρ‹ΠΉ транслятор Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚ΡŒ Π΄Π²Π΅ стадии Π°Π½Π°Π»ΠΈΠ·Π° лСксичСский ΠΈ ΡΠΈΠ½Ρ‚аксичСский.

1. ΠŸΠΎΡΡ‚Π°Π½ΠΎΠ²ΠΊΠ° Π·Π°Π΄Π°Ρ‡ΠΈ

Π’ Ρ€Π°ΠΌΠΊΠ°Ρ… Π΄Π°Π½Π½ΠΎΠΉ Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ транслятор языка «Π‘». Он Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚ΡŒ Ρ€Π°Π·Π±ΠΈΠ΅Π½ΠΈΠ΅ Π½Π° ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹Π΅ Π½Π΅Π΄Π΅Π»ΠΈΠΌΡ‹Π΅ конструкции языка исходной Ρ†Π΅ΠΏΠΎΡ‡ΠΊΠΈ символов ΠΎΡΠ½ΠΎΠ²Ρ‹Π²Π°ΡΡΡŒ Π½Π° Π»Π΅ΠΊΡΠΈΠΊΠ΅ языка, ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΈΡ… ΠΏΠΎΠ΄Ρ€Π°Π·Π΄Π΅Π»Π΅Π½ΠΈΡ Π½Π° ΠΊΠ»Π°ΡΡΡ‹ ΠΈ Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ΡŒ Π² Π²ΠΈΠ΄Π΅ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠ². Π’Π°ΠΊΠΆΠ΅ ΠΎΠ½ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚ΡŒ построСниС ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½ΠΎΠ³ΠΎ Π΄Π΅Ρ€Π΅Π²Π° Ρ€Π°Π·Π±ΠΎΡ€Π° для основных конструкций языка. ΠŸΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ транслятор Π΄ΠΎΠ»ΠΆΠ΅Π½ Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ΡŒ свСдСнья ΠΎ Π»Π΅ΠΊΡΠΈΡ‡Π΅ΡΠΊΠΈΡ… ΠΈ ΡΠΈΠ½Ρ‚аксичСских ΠΎΡˆΠΈΠ±ΠΊΠ°Ρ….

Для дСмонстрации Ρ€Π°Π±ΠΎΡ‚Ρ‹ транслятора Π²ΠΎΠ·ΡŒΠΌΡ‘ΠΌ Π² ΠΊΠ°Ρ‡Π΅ΡΡ‚Π²Π΅ Π°Π½Π°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅ΠΌΠΎΠ³ΠΎ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠ΄ Π½Π° ΡΠ·Ρ‹ΠΊΠ΅ «Π‘»:

#include «dim.h»

int a;

char b='x56';

AnsiString s=" «k'abcd'k» n a 56×56″;

bool c=true;

bool Dim1 (int v, int e, int d);

void main()

{/* ΠœΠ½ΠΎΠ³ΠΎΡΡ‚Ρ€ΠΎΡ‡Π½Ρ‹ΠΉ

ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ/*

// ΠžΠ΄Π½ΠΎΡΡ‚Ρ€ΠΎΡ‡Π½Ρ‹ΠΉ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ

double i_dim78=5465.56, d=321;

double c1=(013+0Xab+1.*12)*5;

char sim='b';

int i=5*(6+7)+8*sim+++-a;

while (a)

{

switch (sim)

{

case 2: sim='a'; break;

case 3: sim='n'; break;

default: a*=0x56;

}

if (sim==7||sim==8||sim==9)

{

if (sim==-7) {sim++; sim/=2;}

else sim/=2;

if (sim==8) {sim++; sim/=03;}

else sim/=02;

}

else — sim;

a++;

}

for (int j=0; j<3; j++)

Dim1 (2,4,8);

return 0;

}

bool Dim1 (int v, int e, int d)

{

return 1;

}

2. ΠžΠ±Ρ‰ΠΈΠ΅ свСдСния

ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° транслятор язык лСксика

Вранслятор — ΠΎΠ±ΡΠ»ΡƒΠΆΠΈΠ²Π°ΡŽΡ‰Π°Ρ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°, ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΡŽΡ‰Π°Ρ ΠΈΡΡ…ΠΎΠ΄Π½ΡƒΡŽ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ, ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»Π΅Π½Π½ΡƒΡŽ Π½Π° Π²Ρ…ΠΎΠ΄Π½ΠΎΠΌ языкС программирования, Π² Ρ€Π°Π±ΠΎΡ‡ΡƒΡŽ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ, ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»Π΅Π½Π½ΡƒΡŽ Π½Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎΠΌ языкС. Однако Ρƒ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΠ· Ρ‚Π°ΠΊΠΈΡ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΠΌΠ΅Ρ‚ΡŒΡΡ свои особСнности ΠΏΠΎ ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ процСсса трансляции. Π’ Π½Π°ΡΡ‚оящСС врСмя трансляторы Ρ€Π°Π·Π΄Π΅Π»ΡΡŽΡ‚ΡΡ Π½Π° Ρ‚Ρ€ΠΈ основныС Π³Ρ€ΡƒΠΏΠΏΡ‹: ассСмблСры, компиляторы ΠΈ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Ρ‹.

ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€ — это ΠΎΠ±ΡΠ»ΡƒΠΆΠΈΠ²Π°ΡŽΡ‰Π°Ρ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°, Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‰Π°Ρ Ρ‚Ρ€Π°Π½ΡΠ»ΡΡ†ΠΈΡŽ Π½Π° ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ язык ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, записанной Π½Π° ΠΈΡΡ…ΠΎΠ΄Π½ΠΎΠΌ языкС программирования. ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€ обСспСчиваСт ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ с ΠΎΠ΄Π½ΠΎΠ³ΠΎ языка Π½Π° Π΄Ρ€ΡƒΠ³ΠΎΠΉ (Ρ‡Π°Ρ‰Π΅ всСго, Π² ΡΠ·Ρ‹ΠΊ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠ³ΠΎ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π°). ВмСстС с Ρ‚Π΅ΠΌ, ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ исходного языка Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΎΡ‚Π»ΠΈΡ‡Π°ΡŽΡ‚ΡΡ ΠΏΠΎ ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΈ ΠΌΠΎΡ‰Π½ΠΎΡΡ‚ΠΈ ΠΎΡ‚ ΠΊΠΎΠΌΠ°Π½Π΄ машинного языка. Π‘ΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ языки, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΎΠ΄Π½Π° ΠΊΠΎΠΌΠ°Π½Π΄Π° исходного языка транслируСтся Π² 7−10 ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹Ρ… ΠΊΠΎΠΌΠ°Π½Π΄. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, Π² ΠΈΡΡ…ΠΎΠ΄Π½Ρ‹Ρ… языках достаточно часто ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ строгая типизация Π΄Π°Π½Π½Ρ‹Ρ…, осущСствляСмая Ρ‡Π΅Ρ€Π΅Π· ΠΈΡ… ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ описаниС. ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠΏΠΈΡ€Π°Ρ‚ΡŒΡΡ Π½Π΅ Π½Π° ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ°, Π° Π½Π° Ρ‚Ρ‰Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ ΠΎΠ±Π΄ΡƒΠΌΡ‹Π²Π°Π½ΠΈΠ΅ структур Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΠ»ΠΈ классов. ΠŸΡ€ΠΎΡ†Π΅ΡΡ трансляции с Ρ‚Π°ΠΊΠΈΡ… языков ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ называСтся компиляциСй, Π° ΠΈΡΡ…ΠΎΠ΄Π½Ρ‹Π΅ языки ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ относятся ΠΊ ΡΠ·Ρ‹ΠΊΠ°ΠΌ программирования высокого уровня (ΠΈΠ»ΠΈ высокоуровнСвым языкам). АбстрагированиС языка программирования ΠΎΡ‚ ΡΠΈΡΡ‚Π΅ΠΌΡ‹ ΠΊΠΎΠΌΠ°Π½Π΄ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π° ΠΏΡ€ΠΈΠ²Π΅Π»ΠΎ ΠΊ Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΠΎΠΌΡƒ созданию самых Ρ€Π°Π·Π½ΠΎΠΎΠ±Ρ€Π°Π·Π½Ρ‹Ρ… языков, ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… Π½Π° Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹Ρ… Π·Π°Π΄Π°Ρ‡. Появились языки для Π½Π°ΡƒΡ‡Π½Ρ‹Ρ… расчСтов, экономичСских расчСтов, доступа ΠΊ Π±Π°Π·Π°ΠΌ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅. Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π° компилятора с ΠΎΡΠ½ΠΎΠ²Π½Ρ‹ΠΌΠΈ Ρ„Π°Π·Π°ΠΌΠΈ компиляции ΠΏΠΎΠΊΠ°Π·Π°Π½Π° Π½Π° Ρ€ΠΈΡΡƒΠ½ΠΊΠ΅ 1.1.

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

Рисунок 1.1. ΠžΠ±ΠΎΠ±Ρ‰Π΅Π½Π½Π°Ρ структура компилятора

БинтаксичСский Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ осущСствляСт Ρ€Π°Π·Π±ΠΎΡ€ исходной ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΏΠΎΡΡ‚ΡƒΠΏΠ°ΡŽΡ‰ΠΈΠ΅ лСксСмы, построСниС синтаксичСской структуры ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. Π Π°ΡΠΏΠΎΠ·Π½Π°Π²Π°Ρ‚Π΅Π»ΡŒ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ Ρ†Π΅ΠΏΠΎΡ‡ΠΊΡƒ лСксСм ΠΈ Π½Π° Π΅Π΅ основС осущСствляСт Ρ€Π°Π·Π±ΠΎΡ€ Π² ΡΠΎΠΎΡ‚вСтствии с ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹ΠΌΠΈ ΠΏΡ€Π°Π²ΠΈΠ»Π°ΠΌΠΈ. ЛСксСмы, ΠΏΡ€ΠΈ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎΠΌ Ρ€Π°Π·Π±ΠΎΡ€Π΅ ΠΏΡ€Π°Π²ΠΈΠ», ΠΏΠ΅Ρ€Π΅Π΄Π°ΡŽΡ‚ΡΡ сСмантичСскому Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€Ρƒ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ строит Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ ΠΈΠΌΠ΅Π½ ΠΈ Ρ„иксируСт Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Ρ‹ синтаксичСской структуры. ΠšΡ€ΠΎΠΌΠ΅ этого, ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ‚Π°Π±Π»ΠΈΡ†Π΅ΠΉ ΠΈΠΌΠ΅Π½ ΠΈ ΡΠΈΠ½Ρ‚аксичСской структурой Ρ„ΠΈΠΊΡΠΈΡ€ΡƒΡŽΡ‚ΡΡ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ сСмантичСскиС связи. Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ формируСтся ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Π°Ρ модСль ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, освобоТдСнная ΠΎΡ‚ ΠΏΡ€ΠΈΠ²ΡΠ·ΠΊΠΈ ΠΊ ΡΠΈΠ½Ρ‚аксису языка программирования. Достаточно часто вмСсто синтаксичСской структуры, ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ ΠΊΠΎΠΏΠΈΡ€ΡƒΡŽΡ‰Π΅ΠΉ ΠΈΠ΅Ρ€Π°Ρ€Ρ…ΠΈΡŽ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² языка, создаСтся Π΅Π΅ ΡƒΠΏΡ€ΠΎΡ‰Π΅Π½Π½Ρ‹ΠΉ Π°Π½Π°Π»ΠΎΠ³, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ называСтся ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½Ρ‹ΠΌ прСдставлСниСм. Π’ ΠΏΡ€ΠΎΡ†Π΅ΡΡΠ΅ синтаксичСского Π°Π½Π°Π»ΠΈΠ·Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΠ²Π°ΡŽΡ‚ΡΡ ошибки, связанныС со ΡΡ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€ΠΎΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.

Анализатор ошибок ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎΠ± ΠΎΡˆΠΈΠ±ΠΊΠ°Ρ…, Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡŽΡ‰ΠΈΡ… Π² Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… Π±Π»ΠΎΠΊΠ°Ρ… транслятора. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½ΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ, ΠΎΠ½ Ρ„ΠΎΡ€ΠΌΠΈΡ€ΡƒΠ΅Ρ‚ сообщСния ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŽ. ΠšΡ€ΠΎΠΌΠ΅ этого, Π΄Π°Π½Π½Ρ‹ΠΉ Π±Π»ΠΎΠΊ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠΏΡ‹Ρ‚Π°Ρ‚ΡŒΡΡ ΠΈΡΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ ΠΎΡˆΠΈΠ±ΠΊΡƒ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠΈΡ‚ΡŒ Ρ€Π°Π·Π±ΠΎΡ€ дальшС. На Π½Π΅Π³ΠΎ Ρ‚Π°ΠΊΠΆΠ΅ Π²ΠΎΠ·Π»Π°Π³Π°ΡŽΡ‚ΡΡ дСйствия, связанныС с ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½Ρ‹ΠΌ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΠ΅ΠΌ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π² ΡΠ»ΡƒΡ‡Π°Π΅, ΠΊΠΎΠ³Π΄Π° Π΄Π°Π»ΡŒΠ½Π΅ΠΉΡˆΡƒΡŽ Ρ‚Ρ€Π°Π½ΡΠ»ΡΡ†ΠΈΡŽ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Ρ‚ΡŒ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ.

На ΡΡ‚Π°ΠΏΠ΅ сСмантичСского Π°Π½Π°Π»ΠΈΠ·Π° Π²Ρ‹ΡΠ²Π»ΡΡŽΡ‚ΡΡ зависимости ΠΌΠ΅ΠΆΠ΄Ρƒ частями ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ описаны контСкстно-свободным синтаксисом. Π­Ρ‚ΠΎ Π² ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΌ связи «ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅-использованиС», Π² Ρ‡Π°ΡΡ‚ности Π°Π½Π°Π»ΠΈΠ· Ρ‚ΠΈΠΏΠΎΠ² ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², Π°Π½Π°Π»ΠΈΠ· областСй видимости, соотвСтствиС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ², ΠΌΠ΅Ρ‚ΠΊΠΈ ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅. Π’ ΠΏΡ€ΠΎΡ†Π΅ΡΡΠ΅ контСкстного Π°Π½Π°Π»ΠΈΠ·Π° строится Ρ‚Π°Π±Π»ΠΈΡ†Π° символов, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒ ΠΊΠ°ΠΊ Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ ΠΈΠΌΠ΅Π½, ΠΏΠΎΠΏΠΎΠ»Π½Π΅Π½Π½ΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠ΅ΠΉ ΠΎΠ± ΠΎΠΏΠΈΡΠ°Π½ΠΈΡΡ… (свойствах) ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠΌ Ρ€Π°Π±ΠΎΡ‚Ρ‹ Ρ„Π°Π·Ρ‹ контСкстного Π°Π½Π°Π»ΠΈΠ·Π° являСтся Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ΅ Π΄Π΅Ρ€Π΅Π²ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. Π˜Π½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡ ΠΎΠ± ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°Ρ… ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΊΠ°ΠΊ рассрСдоточСна Π² ΡΠ°ΠΌΠΎΠΌ Π΄Π΅Ρ€Π΅Π²Π΅, Ρ‚Π°ΠΊ ΠΈ ΡΠΎΡΡ€Π΅Π΄ΠΎΡ‚ΠΎΡ‡Π΅Π½Π° Π² ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Ρ… Ρ‚Π°Π±Π»ΠΈΡ†Π°Ρ… символов. Π’ ΠΏΡ€ΠΎΡ†Π΅ΡΡΠ΅ контСкстного Π°Π½Π°Π»ΠΈΠ·Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠ΅Π½Ρ‹ ошибки, связанныС с Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹ΠΌ использованиСм ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ².

Π“Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€ ΠΊΠΎΠ΄Π° строит ΠΊΠΎΠ΄ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎΠΉ ΠΌΠ°ΡˆΠΈΠ½Ρ‹ Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ Π°Π½Π°Π»ΠΈΠ·Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎΠΉ ΠΌΠΎΠ΄Π΅Π»ΠΈ ΠΈΠ»ΠΈ ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½ΠΎΠ³ΠΎ прСдставлСния. ΠŸΠΎΡΡ‚Ρ€ΠΎΠ΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° сопровоТдаСтся Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ сСмантичСским Π°Π½Π°Π»ΠΈΠ·ΠΎΠΌ, связанным с Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒΡŽ прСобразования ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½Π½Ρ‹Ρ… ΠΊΠΎΠΌΠ°Π½Π΄ Π² ΠΊΠΎΠ΄Ρ‹ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΉ Π²Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ ΠΌΠ°ΡˆΠΈΠ½Ρ‹ ΠΈ ΠΈΡ… ΠΎΠΏΡ‚имизация. На ΡΡ‚Π°ΠΏΠ΅ Ρ‚Π°ΠΊΠΎΠ³ΠΎ Π°Π½Π°Π»ΠΈΠ·Π° ΠΎΠΊΠΎΠ½Ρ‡Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ опрСдСляСтся Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ прСобразования, ΠΈ Π²Ρ‹Π±ΠΈΡ€Π°ΡŽΡ‚ся эффСктивныС Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹. Π‘Π°ΠΌΠ° гСнСрация ΠΊΠΎΠ΄Π° являСтся ΠΏΠ΅Ρ€Π΅ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΠΎΠΉ ΠΎΠ΄Π½ΠΈΡ… ΠΊΠΎΠΌΠ°Π½Π΄ Π² Π΄Ρ€ΡƒΠ³ΠΈΠ΅.

3. РСшСниС Π·Π°Π΄Π°Ρ‡ΠΈ

ΠžΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΡ процСссов трансляции, ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‰Π°Ρ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ основных Ρ„Π°Π·, ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΡΡƒΡ‰Π΅ΡΡ‚Π²Π»ΡΡ‚ΡŒΡΡ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹ΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ. Π­Ρ‚ΠΎ опрСдСляСтся Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹ΠΌΠΈ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π°ΠΌΠΈ взаимодСйствия Π±Π»ΠΎΠΊΠΎΠ² транслятора: лСксичСского Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€Π°, синтаксичСского Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€Π° ΠΈ Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Π° ΠΊΠΎΠ΄Π°. НСсмотря Π½Π° ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹ΠΉ ΠΊΠΎΠ½Π΅Ρ‡Π½Ρ‹ΠΉ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚, Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹ взаимодСйствия Π±Π»ΠΎΠΊΠΎΠ² транслятора ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°ΡŽΡ‚ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹ хранСния ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ….

Для Π΄Π°Π½Π½ΠΎΠ³ΠΎ транслятора Π±Ρ‹Π»Π° Π²Ρ‹Π±Ρ€Π°Π½Π° многопроходная организация взаимодСйствия Π±Π»ΠΎΠΊΠΎΠ² транслятора. Π”Π°Π½Π½Ρ‹ΠΉ транслятор выполняСт ΡΡ‚Π°Π΄ΠΈΡŽ лСксичСского ΠΈ ΡΡ‚Π°Π΄ΠΈΡŽ синтаксичСского Π°Π½Π°Π»ΠΈΠ·Π°. Π”Π°Π½Π½Ρ‹ΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ взаимодСйствия Π±Π»ΠΎΠΊΠΎΠ², Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ компилятора, прСдставлСн Π½Π° Ρ€ΠΈΡΡƒΠ½ΠΊΠ΅ 3.1.

Рисунок 3.1 — ΠžΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΡ взаимодСйствия Π±Π»ΠΎΠΊΠΎΠ² транслятора.

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

К Π΄ΠΎΡΡ‚ΠΎΠΈΠ½ΡΡ‚Π²Π°ΠΌ Ρ‚Π°ΠΊΠΎΠ³ΠΎ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π° ΠΌΠΎΠΆΠ½ΠΎ отнСсти:

- ΠžΠ±ΠΎΡΠΎΠ±Π»Π΅Π½Π½ΠΎΡΡ‚ΡŒ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Ρ… Ρ„Π°Π·, Ρ‡Ρ‚ΠΎ позволяСт ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΡ‚ΡŒ ΠΈΡ… Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΡƒΡŽ Π΄Ρ€ΡƒΠ³ ΠΎΡ‚ Π΄Ρ€ΡƒΠ³Π° Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½ΠΈΠ΅.

— Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ хранСния Π΄Π°Π½Π½Ρ‹Ρ…, ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌΡ‹Ρ… Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΠ· Ρ„Π°Π·, Π½Π° Π²Π½Π΅ΡˆΠ½ΠΈΡ… Π·Π°ΠΏΠΎΠΌΠΈΠ½Π°ΡŽΡ‰ΠΈΡ… устройствах ΠΈ ΠΈΡ… ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½ΠΈΡ ΠΏΠΎ ΠΌΠ΅Ρ€Π΅ надобности.

— Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΡƒΠΌΠ΅Π½ΡŒΡˆΠ΅Π½ΠΈΡ объСма ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½ΠΎΠΉ памяти, Ρ‚Ρ€Π΅Π±ΡƒΠ΅ΠΌΠΎΠΉ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ транслятора, Π·Π° ΡΡ‡Π΅Ρ‚ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ Π²Ρ‹Π·ΠΎΠ²Π° Ρ„Π°Π·.

К Π½Π΅Π΄ΠΎΡΡ‚Π°Ρ‚ΠΊΠ°ΠΌ слСдуСт отнСсти:

— ΠΠ°Π»ΠΈΡ‡ΠΈΠ΅ Π±ΠΎΠ»ΡŒΡˆΠΈΡ… объСмов ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½ΠΎΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ, ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π² Π΄Π°Π½Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ трСбуСтся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ нСбольшая Ρ‡Π°ΡΡ‚ΡŒ.

— Π—Π°ΠΌΠ΅Π΄Π»Π΅Π½ΠΈΠ΅ скорости трансляции ΠΈΠ·-Π·Π° ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ выполнСния Ρ„Π°Π· ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½ΠΈΡ для экономии ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½ΠΎΠΉ памяти Π²Π½Π΅ΡˆΠ½ΠΈΡ… Π·Π°ΠΏΠΎΠΌΠΈΠ½Π°ΡŽΡ‰ΠΈΡ… устройств.

ЛСксичСский Π°Π½Π°Π»ΠΈΠ·

ЛСксичСский Π°Π½Π°Π»ΠΈΠ· — пСрвая Ρ„Π°Π·Π° процСсса трансляции, прСдназначСнная для Π³Ρ€ΡƒΠΏΠΏΠΈΡ€ΠΎΠ²ΠΊΠΈ символов Π²Ρ…ΠΎΠ΄Π½ΠΎΠΉ Ρ†Π΅ΠΏΠΎΡ‡ΠΊΠΈ Π² Π±ΠΎΠ»Π΅Π΅ ΠΊΡ€ΡƒΠΏΠ½Ρ‹Π΅ конструкции, Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹Π΅ лСксСмами. Π‘ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ лСксСмой связано Π΄Π²Π° понятия:

- класс лСксСмы, ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‰ΠΈΠΉ ΠΎΠ±Ρ‰Π΅Π΅ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ для ΠΊΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΠΈ элСмСнтов, ΠΎΠ±Π»Π°Π΄Π°ΡŽΡ‰ΠΈΡ… ΠΎΠ±Ρ‰ΠΈΠΌΠΈ свойствами (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€, Ρ†Π΅Π»ΠΎΠ΅ число, строка символов ΠΈ Ρ‚. Π΄.);

— Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ лСксСмы, ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‰Π΅Π΅ подстроку символов Π²Ρ…ΠΎΠ΄Π½ΠΎΠΉ Ρ†Π΅ΠΏΠΎΡ‡ΠΊΠΈ, ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… распознанному классу лСксСмы. Π’ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΠΈ ΠΎΡ‚ ΠΊΠ»Π°ΡΡΠ°, Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ лСксСмы ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΎ Π²ΠΎ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅Π΅ прСдставлСниС ΡƒΠΆΠ΅ Π½Π° ΡΡ‚Π°ΠΏΠ΅ лСксичСского Π°Π½Π°Π»ΠΈΠ·Π°. Π’Π°ΠΊ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΏΠΎΡΡ‚ΡƒΠΏΠ°ΡŽΡ‚ с Ρ‡ΠΈΡΠ»Π°ΠΌΠΈ, прСобразуя ΠΈΡ… Π² Π΄Π²ΠΎΠΈΡ‡Π½ΠΎΠ΅ машинноС прСдставлСниС, Ρ‡Ρ‚ΠΎ обСспСчиваСт Π±ΠΎΠ»Π΅Π΅ ΠΊΠΎΠΌΠΏΠ°ΠΊΡ‚Π½ΠΎΠ΅ Ρ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅ ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΡƒ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΡΡ‚ΠΈ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π° Π½Π° Ρ€Π°Π½Π½Π΅ΠΉ стадии Π°Π½Π°Π»ΠΈΠ·Π°.

Π’Ρ‹Π΄Π΅Π»ΡΡŽΡ‚ΡΡ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ нСпрямого ΠΈ ΠΏΡ€ΡΠΌΠΎΠ³ΠΎ лСксичСского Π°Π½Π°Π»ΠΈΠ·Π°. НСпрямой лСксичСский Π°Π½Π°Π»ΠΈΠ·, ΠΈΠ»ΠΈ лСксичСский Π°Π½Π°Π»ΠΈΠ· с Π²ΠΎΠ·Π²Ρ€Π°Ρ‚Π°ΠΌΠΈ, Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠΉ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ΅ вСрсий ΠΎ ΠΊΠ»Π°ΡΡΠ°Ρ… лСксСм. Если ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ вСрсии Π½Π΅ ΠΏΠΎΠ΄Ρ‚вСрТдаСтся, Ρ‚ΠΎ ΠΏΡ€ΠΎΠΈΡΡ…ΠΎΠ΄ΠΈΡ‚ ΠΎΡ‚ΠΊΠ°Ρ‚ Π½Π°Π·Π°Π΄ ΠΏΠΎ Ρ†Π΅ΠΏΠΎΡ‡ΠΊΠ΅ символов ΠΈ ΠΎΡΡƒΡ‰Π΅ΡΡ‚вляСтся ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ вСрсии. ΠŸΡ€ΡΠΌΠΎΠΉ лСксичСский Π°Π½Π°Π»ΠΈΠ· позволяСт ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ лСксСмы Π±Π΅Π· ΠΎΡ‚ΠΊΠ°Ρ‚ΠΎΠ² Π½Π°Π·Π°Π΄ ΠΏΠΎ Ρ†Π΅ΠΏΠΎΡ‡ΠΊΠ΅ символов.

Для Π΄Π°Π½Π½ΠΎΠ³ΠΎ транслятора Π±Ρ‹Π» Π²Ρ‹Π±Ρ€Π°Π½ прямой ΠΌΠ΅Ρ‚ΠΎΠ΄ лСксичСского Π°Π½Π°Π»ΠΈΠ·Π°. ΠŸΡ€ΡΠΌΠΎΠΉ лСксичСский Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ строится Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ Π΄Π΅Ρ‚Π΅Ρ€ΠΌΠΈΠ½ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚Π°, ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΡΡŽΡ‰Π΅Π³ΠΎ мноТСство Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΎΠ², Ρ€Π°ΡΠΏΠΎΠ·Π½Π°ΡŽΡ‰ΠΈΡ… ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Π΅ лСксСмы. Π’Π°ΠΊΠΎΠΉ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ Π½Π° ΠΊΠ°ΠΆΠ΄ΠΎΠΌ шагС Ρ‡ΠΈΡ‚Π°Π΅Ρ‚ ΠΎΠ΄ΠΈΠ½ Π²Ρ…ΠΎΠ΄Π½ΠΎΠΉ символ ΠΈ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΈΡ‚ Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅ состояниС, ΠΏΡ€ΠΈΠ±Π»ΠΈΠΆΠ°ΡŽΡ‰Π΅Π΅ Π΅Π³ΠΎ ΠΊ Ρ€Π°ΡΠΏΠΎΠ·Π½Π°Π²Π°Π½ΠΈΡŽ Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ лСксСмы ΠΈΠ»ΠΈ Ρ„ΠΎΡ€ΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡŽ ошибки. Для лСксСм, ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΡ… ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹Π΅ ΠΏΠΎΠ΄Ρ†Π΅ΠΏΠΎΡ‡ΠΊΠΈ, Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ ΠΈΠΌΠ΅Π΅Ρ‚ ΠΎΠ±Ρ‰ΠΈΠ΅ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Ρ‹, Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‰ΠΈΠ΅ Π΅Π΄ΠΈΠ½ΠΎΠ΅ мноТСство состояний. ΠžΡ‚Π»ΠΈΡ‡Π°ΡŽΡ‰ΠΈΠ΅ΡΡ части Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‚ΡΡ своими Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Π°ΠΌΠΈ. ΠžΠ±ΠΎΠ±Ρ‰Π΅Π½Π½Π°Ρ структура прямого лСксичСского Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€Π° ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π° Π½Π° Ρ€ΠΈΡΡƒΠ½ΠΊΠ΅ 3.2.

Рисунок 3.2 — ΠŸΡ€ΡΠΌΠΎΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ лСксичСского Π°Π½Π°Π»ΠΈΠ·Π°.

Он ΡΠΎΠ΄Π΅Ρ€ΠΆΠΈΡ‚ Π²Ρ…ΠΎΠ΄Π½ΡƒΡŽ Π³ΠΎΠ»ΠΎΠ²ΠΊΡƒ, которая ΠΏΠ΅Ρ€Π΅Π΄Π°Π΅Ρ‚ Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ Π²Ρ…ΠΎΠ΄Π½ΠΎΠΉ символ Π² ΠΏΠ΅Ρ€Π²ΠΎΠ΅ состояниС ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ· Π½Π°Ρ‡Π°Π»ΡŒΠ½Ρ‹Ρ… Π±Π»ΠΎΠΊΠΎΠ², Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‰Π΅Π³ΠΎ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚ Π΄Π΅Ρ‚Π΅Ρ€ΠΌΠΈΠ½ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚Π°. КаТдоС ΠΈΠ· Ρ‚Π°ΠΊΠΈΡ… состояний распознаСт мноТСство Π²Ρ…ΠΎΠ΄Π½Ρ‹Ρ… символов, Π½Π΅ ΠΏΠ΅Ρ€Π΅ΡΠ΅ΠΊΠ°ΡŽΡ‰ΠΈΡ…ся с ΠΌΠ½ΠΎΠΆΠ΅ΡΡ‚Π²ΠΎΠΌ Π²Ρ…ΠΎΠ΄Π½Ρ‹Ρ… символов Π΄Ρ€ΡƒΠ³ΠΈΡ… состояний. Π Π°Π·Π±ΠΈΠ΅Π½ΠΈΠ΅ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚Π° Π½Π° Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Ρ‹ проводится Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ выдСлСния состояний, ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΡŽΡ‰ΠΈΡ…ΡΡ Π½Π° Ρ€Π°ΡΠΏΠΎΠ·Π½Π°Π²Π°Π½ΠΈΠΈ ΠΎΠ±Ρ‰ΠΈΡ… ΠΈΠ»ΠΈ частных ΠΏΠΎΠ΄Ρ†Π΅ΠΏΠΎΡ‡Π΅ΠΊ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Ρ… лСксСм. Π’ ΡΠ°ΠΌΠΎΠΌ ΠΎΠ±Ρ‰Π΅ΠΌ случаС прямой лСксичСский Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ ΠΌΠΎΠΆΠ΅Ρ‚ Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒΡΡ ΠΊΠ°ΠΊ Π΅Π΄ΠΈΠ½Ρ‹ΠΉ нСструктурированный Π±Π»ΠΎΠΊ. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Π΅Π³ΠΎ Π΄Ρ€ΠΎΠ±Π»Π΅Π½ΠΈΠ΅ Π½Π° ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Π΅ Π±Π»ΠΎΠΊΠΈ достаточно условно. ΠžΡ‡Π΅Ρ€Π΅Π΄Π½ΠΎΠΉ символ читаСтся ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΌ состояниСм Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚Π°. Π’ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Π΅ условно ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹Π΄Π΅Π»ΠΈΡ‚ΡŒ Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠ΅ состояниС, с ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ начинаСтся Ρ€Π°Π·Π±ΠΎΡ€ ΠΏΠΎΠ΄Ρ†Π΅ΠΏΠΎΡ‡ΠΊΠΈ, Π·Π°ΠΊΡ€Π΅ΠΏΠ»Π΅Π½Π½ΠΎΠΉ Π·Π° Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚ΠΎΠΌ. Если символ Π½Π΅ Π²Ρ…ΠΎΠ΄ΠΈΡ‚ Π² Π³Ρ€ΡƒΠΏΠΏΡƒ, распознаваСмых Π½Π°Ρ‡Π°Π»ΡŒΠ½Ρ‹ΠΌ состояниСм Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Π°, Ρ‚ΠΎ ΠΏΡ€ΠΎΠΈΡΡ…ΠΎΠ΄ΠΈΡ‚ ΠΎΡ‚ΠΊΠ°Π· ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Π° управлСния Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠΌΡƒ ΡΠΎΡΡ‚ΠΎΡΠ½ΠΈΡŽ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π³ΠΎ Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π½ΠΎΠ³ΠΎ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Π°, Π°Π½Π°Π»ΠΈΠ·ΠΈΡ€ΡƒΡŽΡ‰Π΅Π³ΠΎ Π΄Ρ€ΡƒΠ³ΡƒΡŽ Π³Ρ€ΡƒΠΏΠΏΡƒ Π²Ρ…ΠΎΠ΄Π½Ρ‹Ρ… символов. Если Π²Ρ…ΠΎΠ΄Π½ΠΎΠΉ символ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ распознан Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ состояниями Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Π°, Ρ‚ΠΎ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΎΡ‚ΠΊΠ°Π·Π° пСрСдаСтся ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΡƒ ошибок, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Ρ„ΠΎΡ€ΠΌΠΈΡ€ΡƒΠ΅Ρ‚ ΠΎΡˆΠΈΠ±ΠΎΡ‡Π½ΡƒΡŽ лСксСму ΠΈ Π½Π΅ΠΉΡ‚Ρ€Π°Π»ΠΈΠ·ΡƒΠ΅Ρ‚ ΠΎΡˆΠΈΠ±ΠΊΡƒ принятым способом. ΠŸΠ΅Ρ€Π΅Π΄Π°Ρ‡Π° управлСния ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΡƒ ошибок осущСствляСтся ΠΈ Π² Ρ‚ΠΎΠΌ случаС, Ссли всС Π½Π°Ρ‡Π°Π»ΡŒΠ½Ρ‹Π΅ состояния связанных ΠΌΠ΅ΠΆΠ΄Ρƒ собой Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚ΠΎΠ² Ρ„ΠΎΡ€ΠΌΠΈΡ€ΡƒΡŽΡ‚ ΠΎΡ‚ΠΊΠ°Π·. Π Π°Π·Π±ΠΎΡ€ заканчиваСтся Π²Ρ‹Π΄Π°Ρ‡Π΅ΠΉ распознанной ΠΈΠ»ΠΈ ΠΎΡˆΠΈΠ±ΠΎΡ‡Π½ΠΎΠΉ лСксСмы.

Π”Π°Π»Π΅Π΅ прСдставим Ρ‡Π°ΡΡ‚ΡŒ ΠΊΠΎΠ΄Π° лСксичСского Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€Π° (ΠΊΠΎΠ΄ Π³Π»Π°Π²Π½ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈ ΠΎΡΠ½ΠΎΠ²Π½Ρ‹Ρ… Π΄Π΅Ρ‚Π΅Ρ€ΠΌΠΈΠ½ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΎΠ² ΠΏΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΡŽ лСксСм). Π˜ΠΌΠ΅Π΅Ρ‚ΡΡ основная функция, которая ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‘Ρ‚ управлСния Π²ΡΠΏΠΎΠΌΠΎΠ³Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ функция для дальнСйшСго Ρ€Π°Π·Π±ΠΎΡ€Π° Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΠΈ ΠΎΡ‚ Π²ΡΡ‚Ρ€Π΅Ρ‡Π΅Π½Π½ΠΎΠ³ΠΎ символа. Π’ Π²ΡΠΏΠΎΠΌΠΎΠ³Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… функциях происходит распознавания лСксСмы (класса ΠΈ Ρ‚ΠΈΠΏΠ°) ΠΈ Π·Π°Π½ΠΎΡΠΈΡ‚ся запись Π² Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ лСксСм.

void TScan: MainLex()

str[i]=='.'

// ;

int TScan: Strings (int pos)

{char *endptr;

AnsiString result="", tmp_s="";

int res_i, len=1; /*" */

for (int i=pos+1; str[i]≠'" '; i++)

{

if (str[i]=='\')

{

i++; len++; /*/*/

switch (str[i])

{

case 'a':

{result+='a'; len++; break;}

case 'b':

{result+='b'; len++; break;}

case 'f':

{result+='f'; len++; break;}

case 'n':

{result+='n'; len++; break;}

case 'r':

{result+='r'; len++; break;}

case 't':

{result+='t'; len++; break;}

case 'v':

{result+='v'; len++; break;}

case '\':case ''':case '" ':case '?':

{result+=str[i]; len++; break;}

case '0': {tmp_s= «0»; len++;

if (LowerCase (str[i+1])=='x')

{tmp_s+= «x»; i++; len++;

for (int j=i; isdigit (str[j+1])||(LowerCase (str[j+1])>='a'&&LowerCase (str[j+1])<='f'); tmp_s+=str [j+1], len++, j++, i++){}

res_i=strtol (tmp_s.c_str(),&endptr, 0);

if (res_i>256) {PrintError («Π”ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ Char», pos); break;}

else

result+=(char) res_i; break;

}

if (LowerCase (str[i+1])≠'x')

{

for (int j=i; isdigit (str[j+1]); j++)

{

if (str [j+1]>='0'&&str [j+1]<='7')

{tmp_s+=str [j+1];

i++; len++;

}

else {PrintError («ΠžΡˆΠΈΠ±ΠΊΠ° Π² ΡƒΠΏΡ€Π°Π²Π»ΡΡŽΡ‰Π΅ΠΉ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ!», pos); break;}

}

res_i=strtol (tmp_s.c_str(),&endptr, 0);

if (res_i>256) {PrintError («Π”ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ Char Π² ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ», pos); break;}

else

result+=(char) res_i; break;

}

}

default: PrintError («ΠžΡˆΠΈΠ±ΠΊΠ° Π² ΡƒΠΏΡ€Π°Π²Π»ΡΡŽΡ‰Π΅ΠΉ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ.», pos);

}

}

else {result+=str[i]; len++;}

if (i+1==str. Length())

{

PrintError («ΠžΡ‚сутствуСт ΠΊΠΎΠ½Π΅Ρ† строки», pos);

break;

}

}

len++; /*" */

ScanLEX->Lex->Add (new TLexema (ltStr, lpNone, String(result), pos, len));

return len/*" «*/;

}

// ;

int TScan: Comment (int pos) // ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ

{

AnsiString result=str[pos];

if (str [pos+1]=='*') /**/

{result+=str [pos+1];

for (int i=pos+2;)

{if (str[i]=='*'&&str [i+1]=='/') break;

else result+=str[i];

if (i+1==str. Length())

{

PrintError («ΠžΡ‚сутствуСт ΠΊΠΎΠ½Π΅Ρ† коммСнтария», pos);

break;

}

i++;

}

result+= «*/»;

}

if (str [pos+1]=='/') //

{for (int i=pos+1; str. SubString (i, 2)≠«rn»&&i+1str. Length(); result+=str[i], i++){}

result+=«rn»;

}

return result. Length();

}

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Ρ€Π°Π±ΠΎΡ‚Ρ‹ транслятора Π½Π° Ρ„Π°Π·Π΅ лСксичСского Π°Π½Π°Π»ΠΈΠ·Π° для тСстового ΠΊΠΎΠ΄Π° прСдставлСн Π½Π° Ρ€ΠΈΡΡƒΠ½ΠΊΠ΅ 3.3.

Рисунок 3.3 — Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ транслятора Π½Π° Ρ„Π°Π·Π΅ лСксичСского Π°Π½Π°Π»ΠΈΠ·Π°.

БинтаксичСский Π°Π½Π°Π»ΠΈΠ·

БинтаксичСский Ρ€Π°Π·Π±ΠΎΡ€ (распознаваниС) являСтся ΠΏΠ΅Ρ€Π²Ρ‹ΠΌ этапом синтаксичСского Π°Π½Π°Π»ΠΈΠ·Π°. ИмСнно ΠΏΡ€ΠΈ Π΅Π³ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ осущСствляСтся ΠΏΠΎΠ΄Ρ‚Π²Π΅Ρ€ΠΆΠ΄Π΅Π½ΠΈΠ΅ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ входная Ρ†Π΅ΠΏΠΎΡ‡ΠΊΠ° символов являСтся ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΎΠΉ, Π° ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠΎΠ΄Ρ†Π΅ΠΏΠΎΡ‡ΠΊΠΈ ΡΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‚ синтаксичСски ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹. ВслСд Π·Π° Ρ€Π°ΡΠΏΠΎΠ·Π½Π°Π²Π°Π½ΠΈΠ΅ΠΌ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Ρ… ΠΏΠΎΠ΄Ρ†Π΅ΠΏΠΎΡ‡Π΅ΠΊ осущСствляСтся Π°Π½Π°Π»ΠΈΠ· ΠΈΡ… ΡΠ΅ΠΌΠ°Π½Ρ‚ичСской коррСктности Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ Π½Π°ΠΊΠΎΠΏΠ»Π΅Π½Π½ΠΎΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ. Π—Π°Ρ‚Π΅ΠΌ проводится Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ Π½ΠΎΠ²Ρ‹Ρ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Π² ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΡƒΡŽ модСль ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΈΠ»ΠΈ Π² ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½ΠΎΠ΅ прСдставлСниС.

Π Π°Π·Π±ΠΎΡ€ ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½ для Π΄ΠΎΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒΡΡ‚Π²Π° Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ анализируСмая входная Ρ†Π΅ΠΏΠΎΡ‡ΠΊΠ°, записанная Π½Π° Π²Ρ…ΠΎΠ΄Π½ΠΎΠΉ Π»Π΅Π½Ρ‚Π΅, ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠΈΡ‚ ΠΈΠ»ΠΈ Π½Π΅ ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠΈΡ‚ мноТСству Ρ†Π΅ΠΏΠΎΡ‡Π΅ΠΊ ΠΏΠΎΡ€ΠΎΠΆΠ΄Π°Π΅ΠΌΡ‹Ρ… Π³Ρ€Π°ΠΌΠΌΠ°Ρ‚ΠΈΠΊΠΎΠΉ Π΄Π°Π½Π½ΠΎΠ³ΠΎ языка. Π’Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ синтаксичСского Ρ€Π°Π·Π±ΠΎΡ€Π° осущСствляСтся распознаватСлями, ΡΠ²Π»ΡΡŽΡ‰ΠΈΠΌΠΈΡΡ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚Π°ΠΌΠΈ. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Π΄Π°Π½Π½Ρ‹ΠΉ процСсс Ρ‚Π°ΠΊΠΆΠ΅ называСтся распознаваниСм Π²Ρ…ΠΎΠ΄Π½ΠΎΠΉ Ρ†Π΅ΠΏΠΎΡ‡ΠΊΠΈ. ЦСль Π΄ΠΎΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒΡΡ‚Π²Π° Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΡ‚Π²Π΅Ρ‚ΠΈΡ‚ΡŒ Π½Π° Π²ΠΎΠΏΡ€ΠΎΡ: ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠΈΡ‚ Π»ΠΈ анализируСмая Ρ†Π΅ΠΏΠΎΡ‡ΠΊΠ° мноТСству ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹Ρ… Ρ†Π΅ΠΏΠΎΡ‡Π΅ΠΊ Π·Π°Π΄Π°Π½Π½ΠΎΠ³ΠΎ языка. ΠžΡ‚Π²Π΅Ρ‚ «Π΄Π°» даСтся, Ссли такая ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠ½ΠΎΡΡ‚ΡŒ установлСна. Π’ ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС даСтся ΠΎΡ‚Π²Π΅Ρ‚ «Π½Π΅Ρ‚». ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ ΠΎΡ‚Π²Π΅Ρ‚Π° «Π½Π΅Ρ‚» связано с ΠΏΠΎΠ½ΡΡ‚иям ΠΎΡ‚ΠΊΠ°Π·Π°. ЕдинствСнный ΠΎΡ‚ΠΊΠ°Π· Π½Π° Π»ΡŽΠ±ΠΎΠΌ ΡƒΡ€ΠΎΠ²Π½Π΅ Π²Π΅Π΄Π΅Ρ‚ ΠΊ ΠΎΠ±Ρ‰Π΅ΠΌΡƒ ΠΎΡ‚ΠΊΠ°Π·Ρƒ.

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΎΡ‚Π²Π΅Ρ‚ «Π΄Π°» ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ всСй Ρ†Π΅ΠΏΠΎΡ‡ΠΊΠΈ, Π½Π°Π΄ΠΎ Π΅Π³ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΏΡ€Π°Π²ΠΈΠ»Π°, ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°ΡŽΡ‰Π΅Π³ΠΎ Ρ€Π°Π·Π±ΠΎΡ€ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠΉ ΠΏΠΎΠ΄Ρ†Π΅ΠΏΠΎΡ‡ΠΊΠΈ. Π’Π°ΠΊ ΠΊΠ°ΠΊ мноТСство ΠΏΡ€Π°Π²ΠΈΠ» ΠΎΠ±Ρ€Π°Π·ΡƒΡŽΡ‚ ΠΈΠ΅Ρ€Π°Ρ€Ρ…ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ структуру, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ с Ρ€Π΅ΠΊΡƒΡ€ΡΠΈΡΠΌΠΈ, Ρ‚ΠΎ ΠΏΡ€ΠΎΡ†Π΅ΡΡ получСния ΠΎΠ±Ρ‰Π΅Π³ΠΎ ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΎΡ‚Π²Π΅Ρ‚Π° ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠ°ΠΊ сбор ΠΏΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΌΡƒ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΡƒ ΠΎΡ‚Π²Π΅Ρ‚ΠΎΠ² для Π»ΠΈΡΡ‚ΡŒΠ΅Π², Π»Π΅ΠΆΠ°Ρ‰ΠΈΡ… Π² ΠΎΡΠ½ΠΎΠ²Π΅ Π΄Π΅Ρ€Π΅Π²Π° Ρ€Π°Π·Π±ΠΎΡ€Π°, Ρ‡Ρ‚ΠΎ Π΄Π°Π΅Ρ‚ ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΠΎΡ‚Π²Π΅Ρ‚ для ΡƒΠ·Π»Π°, содСрТащСго эти Π»ΠΈΡΡ‚ΡŒΡ. Π”Π°Π»Π΅Π΅ Π°Π½Π°Π»ΠΈΠ·ΠΈΡ€ΡƒΡŽΡ‚ΡΡ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π½Π½Ρ‹Π΅ ΡƒΠ·Π»Ρ‹, ΠΈ ΡƒΠΆΠ΅ Π² Π½ΠΈΡ… ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹Π΅ ΠΎΡ‚Π²Π΅Ρ‚Ρ‹ ΡΠΊΠ»Π°Π΄Ρ‹Π²Π°ΡŽΡ‚ΡΡ Π² ΠΎΠ±Ρ‰ΠΈΠΉ ΠΎΡ‚Π²Π΅Ρ‚ Π½ΠΎΠ²ΠΎΠ³ΠΎ ΡƒΠ·Π»Π°. И Ρ‚Π°ΠΊ Π΄Π°Π»Π΅Π΅ Π΄ΠΎ ΡΠ°ΠΌΠΎΠΉ Π²Π΅Ρ€ΡˆΠΈΠ½Ρ‹. Π”Π°Π½Π½Ρ‹ΠΉ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ сильно Π½Π°ΠΏΠΎΠΌΠΈΠ½Π°Π΅Ρ‚ Π±ΡŽΡ€ΠΎΠΊΡ€Π°Ρ‚ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ систСму, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡƒΡŽ Π² ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΌ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠΈ любого прСдприятия. Π’Π°ΠΊ поднимаСтся Π½Π°Π²Π΅Ρ€Ρ… информация, ΠΏΠΎΠ΄Ρ‚Π²Π΅Ρ€ΠΆΠ΄Π°ΡŽΡ‰Π°Ρ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ указания Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΈΠΊΠ° ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ. Π”ΠΎ ΡΡ‚ΠΎΠ³ΠΎ, Ρ‚Π΅ΠΌΠΈ ΠΆΠ΅ путями, Π²Π½ΠΈΠ· ΡΠΏΡƒΡΠΊΠ°Π»ΠΎΡΡŒ ΠΈ Ρ€Π°Π·Π΄Π΅Π»ΡΠ»ΠΎΡΡŒ исходноС ΡƒΠΊΠ°Π·Π°Π½ΠΈΠ΅.

Π’Ρ‹Π΄Π΅Π»ΡΡŽΡ‚ΡΡ Π΄Π²Π° основных ΠΌΠ΅Ρ‚ΠΎΠ΄Π° синтаксичСского Ρ€Π°Π·Π±ΠΎΡ€Π°: нисходящий Ρ€Π°Π·Π±ΠΎΡ€, восходящий Ρ€Π°Π·Π±ΠΎΡ€. ΠšΡ€ΠΎΠΌΠ΅ этого ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ Ρ€Π°Π·Π±ΠΎΡ€, ΡΠΎΡ‡Π΅Ρ‚Π°ΡŽΡ‰ΠΈΠΉ особСнности Π΄Π²ΡƒΡ… ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΡ…. Для Π΄Π°Π½Π½ΠΎΠ³ΠΎ компилятора Π±Ρ‹Π» Π²Ρ‹Π±Ρ€Π°Π½ нисходящий ΠΌΠ΅Ρ‚ΠΎΠ΄ Ρ€Π°Π·Π±ΠΎΡ€Π° с ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒΡŽ Ρ€Π°Π·Π±ΠΎΡ€Π° слСва Π½Π° ΠΏΡ€Π°Π²ΠΎ (рисунок 3.4).

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

Π”Π°Π»Π΅Π΅ прСдставим основныС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΏΠΎ ΡΠΎΠ·Π΄Π°Π½ΠΈΡŽ ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½ΠΎΠ³ΠΎ прСдставлСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π½Π° ΡΡ‚Π°ΠΏΠ΅ синтаксиса. ВсС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‚ значСния Ρ‚ΠΈΠΏΠ° bool. Если ΠΊΠ°ΠΊ-Π»ΠΈΠ±ΠΎ Π²ΡΠΏΠΎΠΌΠΎΠ³Π°Ρ‚Π΅Π»ΡŒΠ½Π°Ρ функция ΠΏΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΡŽ конструкций Π½Π΅ ΡΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, Ρ‚ΠΎ ΠΎΠ½Π° Π²Ρ‹Π²Π΅Π΄Π΅Ρ‚ свСдСнья ΠΎΠ± ΠΎΡˆΠΈΠ±ΠΊΠΈ ΠΈ Π²Π΅Ρ€Π½Ρ‘Ρ‚ Π½Π΅ΡƒΠ΄Π°Ρ‡Ρƒ Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈΠ²Π΅Π΄Ρ‘Ρ‚ ΠΊ ΠΏΠΎΠ»Π½ΠΎΠΉ остановки дальнСйшСго синтаксичСского Ρ€Π°Π·Π±ΠΎΡ€Π°

bool TSyntax:statement (TTreeNode* tn)

{

if (match (ltSepar, lpNone)) {MainForm->TreeView->Items->AddChild (tn, «ΠΏΡƒΡΡ‚ΠΎΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€»); return true;}

if (Lev0 (tn)&&match (ltSepar, lpNone)) return true;

if (Declare (tn, false)) return true;

if (match (ltReservedWord, lpIf)) return sIf(tn);

if (match (ltReservedWord, lpFor)) return sFor(tn);

if (match (ltReservedWord, lpDo)) return sDo(tn);

if (match (ltReservedWord, lpWhile)) return sWhile(tn);

if (match (ltReservedWord, lpSwitch)) return sSwitch(tn);

if (match (ltBracket, lpLFigBracket)) return sCompose(tn);

if (match (ltReservedWord, lpBreak)&&match (ltSepar, lpNone)&&in_cycle>0)

{MainForm->TreeView->Items->AddChild (tn, «break»); return true;}

if (match (ltReservedWord, lpContinue)&&match (ltSepar, lpNone)&&in_cycle>0)

{MainForm->TreeView->Items->AddChild (tn, «continue»); return true;}

if (match (ltReservedWord, lpReturn))

{TTreeNode *root=MainForm->TreeView->Items->AddChild (tn, «return»);

return Lev1 (root)&&match (ltSepar, lpNone);}

return false;

}

Рисунок 3.4 — Нисходящий Ρ€Π°Π·Π±ΠΎΡ€ слСва Π½Π° ΠΏΡ€Π°Π²ΠΎ

// ;

bool TSyntax:sIf (TTreeNode* n)

{

TList *LastBlock=new TList;

Synt->ListBlock->Add(LastBlock);

TTreeNode *root=MainForm->TreeView->Items->AddChild (n, «IF»);

if (! match (ltBracket, lpLCirBracket)) return false;

TTreeNode *root2=MainForm->TreeView->Items->AddChild (root, «ΡƒΡΠ»ΠΎΠ²ΠΈΠ΅»);

if (! Lev1 (root2)) return false;

if (! match (ltBracket, lpRCirBracket)) return false;

TTreeNode *root3=MainForm->TreeView->Items->AddChild (root, «then»);

if (! statement(root3)) {PrintError («ΠΠ΅Ρ‚;»); return false;}

if (match (ltReservedWord, lpElse))

{

TTreeNode *root4=MainForm->TreeView->Items->AddChild (root, «else»);

if (! statement(root4)) return false;

}

return true;

}

// ;

bool TSyntax:sFor (TTreeNode* n)

{

TList *LastBlock=new TList;

Synt->ListBlock->Add(LastBlock);

TTreeNode *root=MainForm->TreeView->Items->AddChild (n, «FOR»);

if (! match (ltBracket, lpLCirBracket)) return false;

// Π½Π΅Ρ‚ объявлСния

if (match (ltSepar, lpNone));

else

if (! (Lev1 (root)&&match (ltSepar, lpNone))&&! Declare (root, false)) return false;

TTreeNode *root3=MainForm->TreeView->Items->AddChild (root, «exit»);

if (! Lev1 (root3)) return false;

if (! match (ltSepar, lpNone)) {PrintError («ΠΠ΅Ρ‚;»); return false;}

// Π½Π΅Ρ‚ дСйствий послС Ρ†ΠΈΠΊΠ»Π°

if (match (ltBracket, lpRCirBracket));

else

{

TTreeNode *root4=MainForm->TreeView->Items->AddChild (root, «Π΄Π΅ΠΉΡΡ‚вия послС Ρ†ΠΈΠΊΠ»Π°»);

if (! Lev0 (root4)) return false;

if (! match (ltBracket, lpRCirBracket)) {PrintError(«ΠΠ΅Ρ‚)»); return false;}}

in_cycle++;

TTreeNode *root5=MainForm->TreeView->Items->AddChild (root, «Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ»);

if (! statement(root5)) return false;

in_cycle -;

return true;

}

// ;

bool TSyntax:sWhile (TTreeNode* n)

{

TList *LastBlock=new TList;

Synt->ListBlock->Add(LastBlock);

TTreeNode *root=MainForm->TreeView->Items->AddChild (n, «WHILE»);

if (! match (ltBracket, lpLCirBracket)) {PrintError («ΠΠ΅Ρ‚ («); return false;}

TTreeNode *root2=MainForm->TreeView->Items->AddChild (root, «ΡƒΡΠ»ΠΎΠ²ΠΈΠ΅»);

if (! Lev1 (root2)) return false;

if (! match (ltBracket, lpRCirBracket)) {PrintError(«ΠΠ΅Ρ‚)»); return false;}

TTreeNode *root3=MainForm->TreeView->Items->AddChild (root, «Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ»);

if (! statement(root3)) return false;

return true;

}

// ;

bool TSyntax:sCompose (TTreeNode* n)

{

TList *LastBlock=new TList;

Synt->ListBlock->Add(LastBlock);

TTreeNode *root=MainForm->TreeView->Items->AddChild (n, «ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π½Ρ‹Π΅ скобки»);

for (;! match (ltBracket, lpRFigBracket);)

if (! statement(root)) return false;

return true;

}

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Ρ€Π°Π±ΠΎΡ‚Ρ‹ транслятора Π½Π° Ρ„Π°Π·Π΅ синтаксичСского Π°Π½Π°Π»ΠΈΠ·Π° для тСстового ΠΊΠΎΠ΄Π° прСдставлСн Π½Π° Ρ€ΠΈΡΡƒΠ½ΠΊΠ΅ 3.5.

Рисунок 3.5 — Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ транслятора Π½Π° Ρ„Π°Π·Π΅ синтаксичСского Π°Π½Π°Π»ΠΈΠ·Π°.

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

Π’ Ρ€Π°ΠΌΠΊΠ°Ρ… Π΄Π°Π½Π½ΠΎΠΉ курсовой Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π±Ρ‹Π»ΠΈ ΠΈΠ·ΡƒΡ‡Π΅Π½Ρ‹ основныС ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΡ‹ построСния трансляторов для языков высокого уровня ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΎ построСниС собствСнного транслятора для языка «Π‘» написанного Π½Π° ΡΠ·Ρ‹ΠΊΠ΅ «Π‘++». Π‘ΠΎΠ·Π΄Π°Π½Π½Ρ‹ΠΉ транслятор ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚ лСксичСский ΠΈ ΡΠΈΠ½Ρ‚аксичСский Π°Π½Π°Π»ΠΈΠ· исходной Ρ†Π΅ΠΏΠΎΡ‡ΠΊΠΈ символов, строит Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠ² ΠΈ ΡΠΈΠ½Ρ‚аксичСскоС Π΄Π΅Ρ€Π΅Π²ΠΎ Ρ€Π°Π·Π±ΠΎΡ€Π°. Π’ ΡΠ»ΡƒΡ‡Π°Π΅ Ссли ΠΈΠΌΠ΅ΡŽΡ‚ΡΡ лСксичСскиС ΠΈΠ»ΠΈ синтаксичСскиС ошибки Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ сообщСниС ΠΎΠ± ΠΈΡ… Π½Π°Π»ΠΈΡ‡ΠΈΠΈ. Π”Π°Π½Π½Ρ‹ΠΉ транслятор ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹Π΄Π°Π²Π°Ρ‚ΡŒ Π»ΠΎΠΆΠ½Ρ‹ΠΉ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Π² ΡΠ²ΡΠ·ΠΈ с Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒΡŽ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π½Π΅Π·Π°ΠΏΠ»Π°Π½ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… ΠΌΠΎΠΌΠ΅Π½Ρ‚ΠΎΠ².

ΠŸΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ вСсь тСкст
Π—Π°ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Ρ„ΠΎΡ€ΠΌΡƒ Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ Ρ€Π°Π±ΠΎΡ‚ΠΎΠΉ