ЛСксСма Ρ‡Ρ‚ΠΎ это Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ

ЛСксСма Ρ‡Ρ‚ΠΎ это Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ

Π’Π°ΠΆΠ½ΠΎ ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ прСпроцСссор Π½Π΅ Π·Π½Π°Π΅Ρ‚ синтаксиса Π‘.

2.3.2. ΠŸΡ€ΠΎΡΡ‚Ρ€Π°Π½ΡΡ‚Π²ΠΎ ΠΌΠ΅ΠΆΠ΄Ρƒ лСксСмами

ΠŸΡ€ΠΎΡΡ‚Ρ€Π°Π½ΡΡ‚Π²ΠΎ ΠΌΠ΅ΠΆΠ΄Ρƒ лСксСмами ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠΌ ΠΊΠ°ΠΊ мноТСство символов (ΠΏΡ€ΠΎΠ±Π΅Π»Ρ‹, Π²Π΅Ρ€Ρ‚ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΈ Π³ΠΎΡ€ΠΈΠ·ΠΎΠ½Ρ‚Π°Π»ΡŒΠ½Ρ‹Π΅ табуляции, символы ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Π° строки, ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΡƒΡŽΡ‚ΡΡ ΠΏΡ€ΠΈ трансляции. Π­Ρ‚ΠΈ символы ΠΌΠΎΠ³ΡƒΡ‚ ΡΠ»ΡƒΠΆΠΈΡ‚ΡŒ для опрСдСлСния Π½Π°Ρ‡Π°Π»Π° ΠΈΠ»ΠΈ ΠΊΠΎΠ½Ρ†Π° лСксСмы, Π½ΠΎ Π² процСссС трансляции ΠΎΠ½ΠΈ ΡƒΠ΄Π°Π»ΡΡŽΡ‚ΡΡ.

НапримСр, рассмотрим Π΄Π²Π΅ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ: int i; int j;
ΠΈ
int i;
int j;

2.3.3. Π—Π°ΠΏΠΈΡΡŒ Π΄Π»ΠΈΠ½Π½Ρ‹Ρ… строк

Для записи Π΄Π»ΠΈΠ½Π½Ρ‹Ρ… строк символов ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ обратная косая Ρ‡Π΅Ρ€Ρ‚Π° (\). Она ставится Π² ΠΊΠΎΠ½Ρ†Π΅ строки. ΠžΠ±Ρ€Π°Ρ‚Π½Π°Ρ косая Ρ‡Π΅Ρ€Ρ‚Π° ΠΈ символ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Π° строки ΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΡƒΡŽΡ‚ΡΡ, Π΄Π²Π΅ строки (ΠΈ Π±ΠΎΠ»Π΅Π΅) Π²ΠΎΡΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°ΡŽΡ‚ΡΡ ΠΊΠ°ΠΊ ΠΎΠ΄Π½ΠΎ Ρ†Π΅Π»ΠΎΠ΅. НапримСр: β€œΠ’ΠΎΠΌΡΠΊΠΈΠΉ государствСнный\ унивСрситСт систСм управлСния\ ΠΈ радиоэлСктроники”

Π—Π΄Π΅ΡΡŒ записана ΠΎΠ΄Π½Π° длинная строка символов.

2.3.4. ΠšΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ

ΠšΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‚ собой Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Ρ‹ тСкста, ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π½Ρ‹Π΅ для записи пояснСний. ΠšΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Ρ‹ для программистов, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±ΡƒΠ΄ΡƒΡ‚ Ρ‡ΠΈΡ‚Π°Ρ‚ΡŒ исходный тСкст. ΠšΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ Π² процСссС трансляции ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΡƒΡŽΡ‚ΡΡ. ΠšΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ двумя способами. Π’ ΠΏΠ΅Ρ€Π²ΠΎΠΌ способС ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ открываСтся ΠΏΠ°Ρ€ΠΎΠΉ символов /*, Π° закрываСтся символами */. НапримСр: int /* ΠΎΠ±ΡŠΡΠ²ΠΈΡ‚ΡŒ */ i /* счСтчик */ ;

Π’ процСссС трансляции Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΎ всСго Ρ‚Ρ€ΠΈ лСксСмы: int, i, ;

Π’Ρ‚ΠΎΡ€ΠΎΠΉ способ записи коммСнтария Π² Π‘++ состоит Π² записи Π΄Π²ΡƒΡ… подряд символов «косой Ρ‡Π΅Ρ€Ρ‚Ρ‹Β» (//). ΠšΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ начинаСтся ΠΎΡ‚ этих символов (//) ΠΈ заканчиваСтся символом ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Π° строки. НапримСр: class X // это ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ;
. ;

Π‘Π»Π΅Π΄ΡƒΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ остороТным Π² использовании /* ΠΈ // ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ. Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ привСсти ΠΊ Π½Π΅ΠΆΠ΅Π»Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ послСдствиям. НапримСр: int i = j //* Ρ€Π°Π·Π΄Π΅Π»ΠΈΡ‚ΡŒ Π½Π° k */k;
+m;

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

Π’Π²Π΅Π΄Π΅Π½ΠΈΠ΅ Π² Ρ‚Π΅ΠΎΡ€ΠΈΡŽ компиляторов: лСксичСский Π°Π½Π°Π»ΠΈΠ· языка Pascal срСдствами C#

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

Π’ послСднСС врСмя Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ Π½ΠΎΠ²ΠΈΡ‡ΠΊΠΎΠ² Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‚ с высокоуровнСвых языков, Ρ‚Π°ΠΊΠΈΡ…, ΠΊΠ°ΠΊ Java, Python, C#, ΠΈΠ»ΠΈ любой Π΄Ρ€ΡƒΠ³ΠΎΠΉ язык, содСрТащий Π² сСбС β€œΠ΄ΠΆΠ΅Π½Ρ‚Π»ΡŒΠΌΠ΅Π½ΡΠΊΠΈΠΉ набор” Π² Π²ΠΈΠ΄Π΅ сборщика мусора, Π³ΠΎΡ‚ΠΎΠ²Ρ‹Ρ… структур Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ Ρ‚Π°ΠΊ Π΄Π°Π»Π΅Π΅. ΠšΠΎΠ½Π΅Ρ‡Π½ΠΎ, Ρ‚Π°ΠΊΠΎΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ ΠΈΠΌΠ΅Π΅Ρ‚ свои ΠΏΠ»ΡŽΡΡ‹, Π½ΠΎ, ΠΊΠ°ΠΊ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‰ΠΈΠΉ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΠΈΠΉ Π³ΠΎΡ‚ΠΎΠ²Ρ‹ΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π» языка, упускаСт самоС Π³Π»Π°Π²Π½ΠΎΠ΅ – Π΅Π³ΠΎ устройство ΠΈ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΡ‹ Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΈ ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ.

Π― Π½Π΅ Π±ΡƒΠ΄Ρƒ Π²Π΄Π°Π²Π°Ρ‚ΡŒΡΡ Π² подробности распрСдСлСния памяти ΠΈ способы ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ†ΠΈΠΈ ΠΊΠΎΠ΄Π°, Π° Π½Π°ΠΎΠ±ΠΎΡ€ΠΎΡ‚, Ρ…ΠΎΡ‚Π΅Π»ΠΎΡΡŒ Π±Ρ‹ ΠΏΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ΡŒ ΠΎ самом устройствС компилятора, Π° ΠΈΠΌΠ΅Π½Π½ΠΎ ΠΎ лСксичСском Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€Π΅ ΠΈ ΠΏΠΎΠΏΡ€ΠΎΠ±ΠΎΠ²Π°Ρ‚ΡŒ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π³ΠΎ Π½Π° языкС C#. Π―Π·Ρ‹ΠΊ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ Π°Π½Π°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ, Π·Π½Π°Π΅Ρ‚ ΠΏΠΎΠ΄Π°Π²Π»ΡΡŽΡ‰Π΅Π΅ Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ β€” это Pascal.

ЛСксичСский Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ – ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ ΠΈΠ· β€œΡΠ»ΠΎΠ΅Π²β€ компилятора, ΠΎΡ‚Π²Π΅Ρ‡Π°ΡŽΡ‰ΠΈΠΉ Π·Π° Π²Ρ‹Π΄Π΅Π»Π΅Π½ΠΈΠ΅ лСксСм для ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ.

ЛСксСма – минимальная Π΅Π΄ΠΈΠ½ΠΈΡ†Π° Π½Π΅ΠΊΠΎΠ΅Π³ΠΎ словаря, ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‰Π΅Π³ΠΎ наш язык. Π’ Ρ€ΠΎΠ»ΠΈ лСксСмы ΠΌΠΎΠ³ΡƒΡ‚ ΡΠ»ΡƒΠΆΠΈΡ‚ΡŒ слуТСбныС слова, ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹, ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹ ΠΈ Ρ‚Π°ΠΊ Π΄Π°Π»Π΅Π΅.

РСализация

ОписаниС структуры

Π€ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎΠ΅ описаниС языка Π±ΡƒΠ΄Π΅Ρ‚ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒΡΡ Π² Π΄Π²ΡƒΡ… массивах: Π² ΠΏΠ΅Ρ€Π²ΠΎΠΌ β€” слуТСбныС слова, Π° Π²ΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠΌ β€” ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΡ‚Π΅Π»ΠΈ ΠΈ список с Π½Π°ΠΉΠ΄Π΅Π½Π½Ρ‹ΠΌΠΈ лСксСмами

Π‘Π°ΠΌΠ° лСксСма Π±ΡƒΠ΄Π΅Ρ‚ Π² сСбС Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ ΠΊΠ»ΡŽΡ‡, с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒΡΡ ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΊ Ρ‚ΠΈΠΏΡƒ (слуТСбныС слова, ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹, ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹, числа), id лСксСмы ΠΈ само Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅.

ΠΠ°ΠΈΠ»ΡƒΡ‡ΡˆΠΈΠΌ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ΠΌ для ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ лСксСм Π±ΡƒΠ΄Π΅Ρ‚ ΡΠ»ΡƒΠΆΠΈΡ‚ΡŒ Π½Π΅ΠΊΠΈΠΉ ΠΊΠΎΠ½Π΅Ρ‡Π½Ρ‹ΠΉ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚. Π­Ρ‚ΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ ΠΈΠ·Π±Π°Π²ΠΈΡ‚ΡŒΡΡ ΠΎΡ‚ Π»ΠΈΡˆΠ½ΠΈΡ… if-ΠΎΠ², Π° Ρ‚Π°ΠΊΠΆΠ΅ даст Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π»Π΅Π³ΠΊΠΎ Π²Π½ΠΎΡΠΈΡ‚ΡŒ измСнСния Π² Ρ†ΠΈΠΊΠ». S β€” Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠ΅ состояниС, NUM, DLM, ASGN, ID β€” состояния ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… Π²ΠΈΠ΄ΠΎΠ² лСксСм, ER Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ для ошибки, Π° FIN для ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠ³ΠΎ состояния.

ΠžΡΠ½ΠΎΠ²Π½Ρ‹ΠΌΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌΠΈ ΡΠ²Π»ΡΡŽΡ‚ΡΡ SearchLex, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΈΡ‰Π΅Ρ‚ лСксСму Π² нашСм массивС ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π΅Π΅ id ΠΈ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π² ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠ΅ (Π΄Π°, ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠΈ Ρ‚ΠΎΠΆΠ΅ Π±Ρ‹Π²Π°ΡŽΡ‚ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ΠΌΠΈ), Π° Ρ‚Π°ΠΊΠΆΠ΅ PushLex, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ добавляСт Π½ΠΎΠ²ΡƒΡŽ лСксСму Π² ΡΠ»ΠΎΠ²Π°Ρ€ΡŒ.

РСализация Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ°

ΠŸΠ΅Ρ€Π²Ρ‹ΠΌ Π΄Π΅Π»ΠΎΠΌ стоит ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ ΠΊΠΎΠ½Π΅Ρ† Ρ€Π°Π±ΠΎΡ‚Ρ‹ Ρ†ΠΈΠΊΠ»Π° β€” состояниС FIN, Π° Ρ‚Π°ΠΊΠΆΠ΅ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠ΅ состояниС, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π±ΡƒΠ΄Π΅Ρ‚

ΠœΠ΅Ρ‚ΠΎΠ΄ GetNext позволяСт ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ символ Π² строкС, ClearBuf, соотвСтствСнно, ΠΎΡ‡ΠΈΡ‰Π°Π΅Ρ‚ Π±ΡƒΡ„Π΅Ρ€, хранящий Π² сСбС лСксСму

ОсобоС Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ стоит ΡƒΠ΄Π΅Π»ΠΈΡ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρƒ присваивания «:=», ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ состоит ΠΈΠ· Π΄Π²ΡƒΡ… ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Ρ… ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ². Π‘Π°ΠΌΡ‹ΠΌ простым способом опрСдСлСния Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° являСтся Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ условия ΠΈ запись ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½ΠΎΠ³ΠΎ значСния Π² Π±ΡƒΡ„Π΅Ρ€. Для этого Π±Ρ‹Π»ΠΎ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ΠΎ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠ΅ состояниС ASGN (Π² ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Π΅ assign β€” присваиваниС). Π’ случаС опрСдСлСния Π±ΡƒΡ„Π΅Ρ€Π° ΠΊΠ°ΠΊ «:», Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ просто Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ Π½ΠΎΠ²ΡƒΡŽ лСксСму, Π° Ссли ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ Π·Π½Π°ΠΊΠΎΠΌ являСтся «=», Ρ‚ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ ΡƒΠΆΠ΅ ΠΎΠ΄ΠΈΠ½ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ присваивания.

ΠšΠΎΠ½Π΅Ρ‡Π½ΠΎΠ΅ состояниС ΠΈ состояниС с ошибкой Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Ρ‹ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ слуТСбными сообщСниями. МоТно Π΄ΠΎΡ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π΄Π°Π½Π½Ρ‹ΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡ‚ΡŒ Ρ‚Π°ΠΊΠΆΠ΅ ΠΎΡˆΠΈΠ±ΠΊΡƒ, Π½ΠΎ, ΠΏΠΎΠΆΠ°Π»ΡƒΠΉ, Π΄Π°Π½Π½Ρ‹ΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π» ΠΌΠΎΠΆΠ½ΠΎ пСрСнСсти ΡƒΠΆΠ΅ Π² синтаксичСский Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€.

ВСстированиС

ΠŸΡ€ΠΎΡ‚Π΅ΡΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎ-Ρ€Π°Π·Π½ΠΎΠΌΡƒ: ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ ΠΏΡƒΡ‚ΡŒ .pas Ρ„Π°ΠΉΠ»Π°, ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ строку ΠΈΠ»ΠΈ любой Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΡƒΠ΄ΠΎΠ±Π½Ρ‹ΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚. Π’Π°ΠΊ ΠΊΠ°ΠΊ ΠΌΡ‹ пишСм Π½Π° C#, Π½Π΅ составит Ρ‚Ρ€ΡƒΠ΄Π° Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Ρ„ΠΎΡ€ΠΌΡƒ Π² ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π±ΡƒΠ΄Π΅Ρ‚ 2 textBox-Π°, ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ для Π²Π²ΠΎΠ΄Π° ΠΊΠΎΠ΄Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, Π²Ρ‚ΠΎΡ€ΠΎΠΉ β€” Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ°.

По Π½Π°ΠΆΠ°Ρ‚ΠΈΡŽ ΠΊΠ½ΠΎΠΏΠΊΠΈ Π±ΡƒΠ΄Π΅ΠΌ Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ Π°Π½Π°Π»ΠΈΠ· тСкста, Π° ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹ΠΉ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Π±ΡƒΠ΄Π΅ΠΌ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ switch конструкции: Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π²Ρ‹Π²Π΅Π΄Π΅ΠΌ ΠΊ ΠΊΠ°ΠΊΠΎΠΌΡƒ Ρ‚ΠΈΠΏΡƒ относится найдСнная лСксСма.

Π’Ρ…ΠΎΠ΄Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅

Π’Ρ‹Ρ…ΠΎΠ΄Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅

ΠŸΠΎΠ»Π½Ρ‹ΠΉ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ

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

ΠœΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ, Ρ‡Ρ‚ΠΎ лСксичСский Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ ΡˆΡ‚ΡƒΠΊΠ° Π½Π΅ ΠΎΡ‡Π΅Π½ΡŒ понятная, Π΄Π° ΠΈ собствСнно Π½Π΅ ΠΎΡ‡Π΅Π½ΡŒ ваТная. ΠŸΠΎΡ‡Π΅ΠΌΡƒ нСльзя вынСсти всС это Π² синтаксичСский Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€? Как Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ со слоТными конструкциями? Π”Π°, способы Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ лСксичСского Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€Π° разнятся ΠΎΡ‚ компилятора ΠΊ компилятору, Π½ΠΎ ΠΏΡ€ΠΈ Ρ€Π°Π·Π±ΠΎΡ€Π΅ всСх этих ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠΎΠ² появится Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅ Ρ€Π°Π±ΠΎΡ‚Ρ‹ языка программирования X, Π½ΠΎ ΠΈ появится Ρ„ΡƒΠ½Π΄Π°ΠΌΠ΅Π½Ρ‚ для Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ собствСнного языка программирования: Π²Ρ‚ΠΎΡ€ΠΎΠΉ Python, ΠΈΠ»ΠΈ язык для вашСй ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚Π½ΠΎΠΉ области β€” всС это ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΈ ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠΈ всСх спСцифик Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΈ устройства компилятора Π² ΠΎΠ±Ρ‰Π΅ΠΌ Π²ΠΈΠ΄Π΅.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

ΠžΡΠ½ΠΎΠ²Ρ‹ конструирования компиляторов. ЛСксичСский Π°Π½Π°Π»ΠΈΠ· Π½Π° C#

Π—Π°Π΄Π°Ρ‡Π΅ΠΉ лСксичСского Π°Π½Π°Π»ΠΈΠ·Π° являСтся Ρ€Π°Π·Π±ΠΈΡ‚ΡŒ Π²Ρ…ΠΎΠ΄Π½ΡƒΡŽ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ (Π² ΠΌΠΎΠ΅ΠΌ случаС ΠΊΠΎΠ΄ Π½Π° языкС «Паскаль») Π½Π° слова ΠΈ лСксСмы.

Для Π½Π°Ρ‡Π°Π»Π° я создал 5 Ρ‚ΠΈΠΏΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… листов для хранСния Π΄Π°Π½Π½Ρ‹Ρ…, Π° ΠΈΠΌΠ΅Π½Π½ΠΎ: ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠ², констант, ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Ρ… слов, Ρ€Π°Π·Π΄Π΅Π»ΠΈΡ‚Π΅Π»Π΅ΠΉ ΠΈ свСртки. Π’Π°ΠΊΠΆΠ΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌ массив Ρ€Π°Π·Π΄Π΅Π»ΠΈΡ‚Π΅Π»Π΅ΠΉ

ΠΈ массив ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Ρ… слов. Π― ограничился ΠΎΠ΄ΠΈΠ½Π½Π°Π΄Ρ†Π°Ρ‚ΡŒΡŽ ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹ΠΌΠΈ словами, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΡΡ‚Π°Ρ‚ΡŒΡ написана ΠΊΠ°ΠΊ Π½Π°Ρ‡Π°Π»ΡŒΠ½Ρ‹ΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ лСксичСского Π°Π½Π°Π»ΠΈΠ·Π° языка «Паскаль» Π½Π° языкС C#.
Π˜Ρ‚Π°ΠΊ, массив ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Ρ… слов:

Π’ Ρ†ΠΈΠΊΠ»Π΅ for Π±Π΅Ρ€Π΅ΠΌ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ символ ΠΈΠ· AllTextProgram ΠΈ отправляСм Π΅Π³ΠΎ Π² ΠΌΠ΅Ρ‚ΠΎΠ΄ Analysis. ΠžΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎ я Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°ΡŽ лишь Π΄Π²Π° ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ. ΠŸΠ΅Ρ€Π²ΠΎΠ΅ – это апострофы, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π² ΠΌΠΎΠ΅ΠΌ случаС Π²ΡΡ‚Ρ€Π΅Ρ‡Π°ΡŽΡ‚ΡΡ ΠΏΡ€ΠΈ использовании ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ³ΠΎ слова Β«writelnΒ». Если встрСчаСм апостроф, Ρ‚ΠΎ ΠΎΡ‚Ρ…ΠΎΠ΄ΠΈΠΌ ΠΎΡ‚ ΠΏΡ€Π°Π²ΠΈΠ» ΠΈ ΠΈΠ΄Π΅ΠΌ ΠΏΠΎ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ AllTextPorgram, ΠΏΠΎΠΊΠ° Π½ΠΈ Π½Π°ΠΉΠ΄Π΅ΠΌ Π²Ρ‚ΠΎΡ€ΠΎΠΉ апостроф. Π’Ρ‚ΠΎΡ€ΠΎΠ΅ – это ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅. Для послСдних я просто ΡΡ‡ΠΈΡ‚Π°ΡŽ число ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°ΡŽΡ‰ΠΈΡ…ΡΡ ΠΈ Π·Π°ΠΊΡ€Ρ‹Π²Π°ΡŽΡ‰ΠΈΡ…ΡΡ Ρ„ΠΈΠ³ΡƒΡ€Π½Ρ‹Ρ… скобок ΠΈ оТидаю ΠΏΠΎΠΊΠ° Ρ€Π°Π·Π½ΠΈΡ†Π° Π½ΠΈ Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π²Π½Π° Π½ΡƒΠ»ΡŽ.
Казалось Π±Ρ‹ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π΄ΠΎΠ»ΠΆΠ½Π° Π·Π°Ρ†ΠΈΠΊΠ»ΠΈΡ‚ΡŒΡΡ, Ссли ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ апостроф Π½Π΅ Π½Π°ΠΉΠ΄Π΅Π½ ΠΈΠ»ΠΈ ΠΊΠΎΠ»-Π²ΠΎ Ρ„ΠΈΠ³ΡƒΡ€Π½Ρ‹Ρ… скобок Π½Π΅ Ρ€Π°Π²Π½ΠΎ 0. Π”Π°, это Π²Π΅Ρ€Π½ΠΎ, Π² этих Ρ†ΠΈΠΊΠ»Π°Ρ… Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ условия Π²Ρ‹Ρ…ΠΎΠ΄Π° ΠΈΠ· ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ. Π­Ρ‚ΠΈ условия для систСматизации я Ρ€Π΅ΡˆΠΈΠ» ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π½Π° этапС синтаксичСского Π°Π½Π°Π»ΠΈΠ·Π°.

ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Π°Ρ type ΠΎΡ‚Π²Π΅Ρ‡Π°Π΅Ρ‚ Π·Π° Π½ΠΎΠΌΠ΅Ρ€ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹, ΠΊ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ относится лСксСма.
Π˜Π΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹ – Ρ‚Π°Π±Π»ΠΈΡ†Π° 1
ΠšΠΎΠ½ΡΡ‚Π°Π½Ρ‚Ρ‹ – Ρ‚Π°Π±Π»ΠΈΡ†Π° 2
ΠšΠ»ΡŽΡ‡Π΅Π²Ρ‹Π΅ слова – Ρ‚Π°Π±Π»ΠΈΡ†Π° 3
Π Π°Π·Π΄Π΅Π»ΠΈΡ‚Π΅Π»ΠΈ – Ρ‚Π°Π±Π»ΠΈΡ†Π° 4

Π’Π΅ΠΏΠ΅Ρ€ΡŒ настало врСмя ΠΏΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ΡŒ Ρ‡Ρ‚ΠΎ ΠΆΠ΅ происходит Π² ΠΌΠ΅Ρ‚ΠΎΠ΄Π΅ Analysis. Π­Ρ‚ΠΎ Π»ΡƒΡ‡ΡˆΠ΅ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π² Π²ΠΈΠ΄Π΅ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠ΅Π² ΠΊ ΠΊΠΎΠ΄Ρƒ. Π‘Ρ€Π°Π·Ρƒ ΠΎΡ‚ΠΌΠ΅Ρ‡Ρƒ, Ρ‡Ρ‚ΠΎ Π² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ temp Π±ΡƒΠ΄Π΅ΠΌ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½Ρ‹ΠΉ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Ρ€Π°Π±ΠΎΡ‚Ρ‹, ΠΏΠΎΠΊΠ° Π½ΠΈ встрСтим Ρ€Π°Π·Π΄Π΅Π»ΠΈΡ‚Π΅Π»ΡŒ. ВстрСтив Ρ€Π°Π·Π΄Π΅Π»ΠΈΡ‚Π΅Π»ΡŒ, Π½Π°ΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ temp Π² ΠΌΠ΅Ρ‚ΠΎΠ΄ Result, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ ΠΊ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρƒ, константС ΠΈΠ»ΠΈ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠΌΡƒ слову относится Π½Ρ‹Π½Π΅ΡˆΠ½ΡΡ лСксСма.

Π—Π°ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ для рассматрСния являСтся ΠΌΠ΅Ρ‚ΠΎΠ΄Π΅ Result, Π³Π΄Π΅ ΠΌΡ‹ опрСдСляСм, Ρ‡Ρ‚ΠΎ ΠΆΠ΅ ΠΌΡ‹ нашли. Π’ самом Π½Π°Ρ‡Π°Π»Π΅ провСряСм ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ temp Π½Π° ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΊ ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹ΠΌ словам. ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡΠ΅ΠΌ Π² Π½Π°Ρ‡Π°Π»Π΅, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π΅ ΠΏΠ΅Ρ€Π΅ΠΏΡƒΡ‚Π°Ρ‚ΡŒ Π½Π°ΠΉΠ΄Π΅Π½Π½ΡƒΡŽ лСксСму с ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠΌ. Если Π½Π°ΠΉΠ΄Π΅Π½Π½ΠΎΠ΅ Π½Π΅ являСтся ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹ΠΌ словом, Ρ‚ΠΎ Ρ‡Π΅Ρ€Π΅Π· switch провСряСм Ρ‚ΠΈΠΏ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹, ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΉ Π·Π°Ρ€Π°Π½Π΅Π΅ Π² ΠΌΠ΅Ρ‚ΠΎΠ΄Π΅ Analysis. НС Π·Ρ‹Π±Ρ‹Π²Π°Π΅ΠΌ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π°ΠΉΠ΄Π΅Π½Π½Ρ‹ΠΉ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€/константа/Ρ€Π°Π·Π΄Π΅Π»ΠΈΡ‚Π΅Π»ΡŒ ΡƒΠΆΠ΅ Π½Π΅ значился Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅.

И Π»Π΅Π³ΠΊΠΈΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΊΠ°ΠΊ это всС Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚.
На Π²Ρ…ΠΎΠ΄Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°:

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

ЛСксСмы

ЛСксСма Ρ‡Ρ‚ΠΎ это Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ ЛСксСма Ρ‡Ρ‚ΠΎ это Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ ЛСксСма Ρ‡Ρ‚ΠΎ это Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ ЛСксСма Ρ‡Ρ‚ΠΎ это Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ. Π€ΠΎΡ‚ΠΎ ЛСксСма Ρ‡Ρ‚ΠΎ это Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ ЛСксСма Ρ‡Ρ‚ΠΎ это Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ ЛСксСма Ρ‡Ρ‚ΠΎ это Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ ЛСксСма Ρ‡Ρ‚ΠΎ это Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ ЛСксСма Ρ‡Ρ‚ΠΎ это Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ. Π€ΠΎΡ‚ΠΎ ЛСксСма Ρ‡Ρ‚ΠΎ это Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ ЛСксСма Ρ‡Ρ‚ΠΎ это Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ ЛСксСма Ρ‡Ρ‚ΠΎ это Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ ЛСксСма Ρ‡Ρ‚ΠΎ это Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ ЛСксСма Ρ‡Ρ‚ΠΎ это Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ. Π€ΠΎΡ‚ΠΎ ЛСксСма Ρ‡Ρ‚ΠΎ это Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ ЛСксСма Ρ‡Ρ‚ΠΎ это Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ ЛСксСма Ρ‡Ρ‚ΠΎ это Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ ЛСксСма Ρ‡Ρ‚ΠΎ это Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ ЛСксСма Ρ‡Ρ‚ΠΎ это Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ. Π€ΠΎΡ‚ΠΎ ЛСксСма Ρ‡Ρ‚ΠΎ это Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ

ЛСксСма Ρ‡Ρ‚ΠΎ это Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ ЛСксСма Ρ‡Ρ‚ΠΎ это Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ ЛСксСма Ρ‡Ρ‚ΠΎ это Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ ЛСксСма Ρ‡Ρ‚ΠΎ это Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ. Π€ΠΎΡ‚ΠΎ ЛСксСма Ρ‡Ρ‚ΠΎ это Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ

ЛСксСма Ρ‡Ρ‚ΠΎ это Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ ЛСксСма Ρ‡Ρ‚ΠΎ это Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ ЛСксСма Ρ‡Ρ‚ΠΎ это Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ ЛСксСма Ρ‡Ρ‚ΠΎ это Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ. Π€ΠΎΡ‚ΠΎ ЛСксСма Ρ‡Ρ‚ΠΎ это Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ

Алфавит языка

ЛСкция1 Бостав языка

Вводятся Π±Π°Π·ΠΎΠ²Ρ‹Π΅ для всСго дальнСйшСго излоТСния понятия: ΠΈΠ· ΠΊΠ°ΠΊΠΈΡ… ΠΏΡ€ΠΎΡΡ‚Π΅ΠΉΡˆΠΈΡ… «ΠΊΠΈΡ€ΠΏΠΈΡ‡ΠΈΠΊΠΎΠ²» состоят всС тСксты Π½Π° языкС программирования, Ρ‡Ρ‚ΠΎ ΠΏΠΎΠ½ΠΈΠΌΠ°ΡŽΡ‚ ΠΏΠΎΠ΄ Ρ‚ΠΈΠΏΠΎΠΌ Π΄Π°Π½Π½Ρ‹Ρ…, ΠΊΠ°ΠΊΠΈΠ΅ встроСнныС Ρ‚ΠΈΠΏΡ‹ Π΄Π°Π½Π½Ρ‹Ρ… Π΅ΡΡ‚ΡŒ Π² языкС C++.

ВсС тСксты Π½Π° языкС ΠΏΠΈΡˆΡƒΡ‚ΡΡ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π΅Π³ΠΎ Π°Π»Ρ„Π°Π²ΠΈΡ‚Π°. Алфавит C++ Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚:

Из символов Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ Π½Π°Π±ΠΎΡ€Π° ΡΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‚ΡΡ лСксСмы языка ΠΈ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρ‹ прСпроцСссора. Π‘ΠΈΠΌΠ²ΠΎΠ»Ρ‹ ΠΈΠ· Π½Π°Π±ΠΎΡ€Π° Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ для написания ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠ΅Π². ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ ΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΡƒΠ΅Ρ‚.

Π‘ΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ Π²ΠΈΠ΄Ρ‹ лСксСм:

Π“Ρ€Π°Π½ΠΈΡ†Ρ‹ лСксСм ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‚ΡΡ Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ лСксСмами, Ρ‚Π°ΠΊΠΈΠΌΠΈ, ΠΊΠ°ΠΊ Ρ€Π°Π·Π΄Π΅Π»ΠΈΡ‚Π΅Π»ΠΈ ΠΈΠ»ΠΈ Π·Π½Π°ΠΊΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ.

ЛСксСмы языка программирования Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½Ρ‹ словам СстСствСнного языка. НапримСр, лСксСмами ΡΠ²Π»ΡΡŽΡ‚ΡΡ константа 128 (Π½ΠΎ Π½Π΅ Π΅Π΅ Ρ‡Π°ΡΡ‚ΡŒ 12), имя Vasia, ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово goto ΠΈ Π·Π½Π°ΠΊ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ слоТСния +. Из лСксСм ΡΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‚ΡΡ выраТСния ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹.

ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ элСмСнт языка опрСдСляСтся синтаксисом ΠΈ сСмантикой. БинтаксичСскиС опрСдСлСния ΡƒΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°ΡŽΡ‚ ΠΏΡ€Π°Π²ΠΈΠ»Π° построСния элСмСнтов языка, Π° сСмантика опрСдСляСт ΠΈΡ… смысл ΠΈ ΠΏΡ€Π°Π²ΠΈΠ»Π° использования.

ОбъСдинСнная Π΅Π΄ΠΈΠ½Ρ‹ΠΌ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠΌ ΡΠΎΠ²ΠΎΠΊΡƒΠΏΠ½ΠΎΡΡ‚ΡŒ описаний ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ² ΠΎΠ±Ρ€Π°Π·ΡƒΠ΅Ρ‚ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ языка программирования с использованиСм LLVM. Π§Π°ΡΡ‚ΡŒ 1: Π’Π²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΈ лСксичСский Π°Π½Π°Π»ΠΈΠ·

Π”ΠΎΠ±Ρ€ΠΎ ΠΏΠΎΠΆΠ°Π»ΠΎΠ²Π°Ρ‚ΡŒ Π² ΡƒΡ‡Π΅Π±Π½ΠΈΠΊ Β«Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ языка программирования с LLVMΒ». Π­Ρ‚ΠΎΡ‚ ΡƒΡ‡Π΅Π±Π½ΠΈΠΊ Π·Π½Π°ΠΊΠΎΠΌΠΈΡ‚ вас с созданиСм ΠΏΡ€ΠΎΡΡ‚Π΅ΠΉΡˆΠ΅Π³ΠΎ языка программирования, ΠΈ ΠΏΡ€ΠΈ этом ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚, ΠΊΠ°ΠΊΠΈΠΌ ΠΎΠ½ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π»Π΅Π³ΠΊΠΈΠΌ ΠΈ интСрСсным, Π° Ρ‚Π°ΠΊΠΆΠ΅ Π΄Π°Ρ‘Ρ‚ Π²Π°ΠΌ Π½Π°Ρ‡Π°Π»ΡŒΠ½Ρ‹Π΅ знания, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹ Π·Π°Ρ‚Π΅ΠΌ смоТСтС ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π½Π° Π΄Ρ€ΡƒΠ³ΠΈΡ… языках программирования. Код Π² этом ΡƒΡ‡Π΅Π±Π½ΠΈΠΊΠ΅ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ использован Π² качСствС стартовой ΠΏΠ»ΠΎΡ‰Π°Π΄ΠΊΠΈ для Π²Π°ΡˆΠΈΡ… Ρ‚Π²ΠΎΡ€Π΅Π½ΠΈΠΉ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ LLVM.

ЦСлью Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΡƒΡ‡Π΅Π±Π½ΠΈΠΊΠ° являСтся постСпСнноС прСдставлСниС нашСго языка, описаниС Π΅Π³ΠΎ пошагового создания. Π­Ρ‚ΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ Π½Π°ΠΌ ΠΎΡ…Π²Π°Ρ‚ΠΈΡ‚ΡŒ достаточно ΡˆΠΈΡ€ΠΎΠΊΠΈΠΉ спСктр вопросов проСктирования языков ΠΈ использования LLVM, ΠΏΠΎΠΏΡƒΡ‚Π½ΠΎ показывая ΠΈ объясняя ΠΊΠΎΠ΄ Π±Π΅Π· ΠΎΠ³Ρ€ΠΎΠΌΠ½ΠΎΠ³ΠΎ количСства Π½Π΅Π½ΡƒΠΆΠ½Ρ‹Ρ… Π΄Π΅Ρ‚Π°Π»Π΅ΠΉ.

ПолСзно ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ Π·Π°Ρ€Π°Π½Π΅Π΅, Ρ‡Ρ‚ΠΎ этот ΡƒΡ‡Π΅Π±Π½ΠΈΠΊ Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΎΠ±ΡƒΡ‡Π°Π΅Ρ‚ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ Ρ‚Π΅Ρ…Π½ΠΈΠΊΠ°ΠΌ компиляции ΠΈ спСцификС LLVM, Π½ΠΎ Π½Π΅ ΠΎΠ±ΡƒΡ‡Π°Π΅Ρ‚ соврСмСнным ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠ°ΠΌ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ обСспСчСния. На ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅ это ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ максимально ΡƒΠΏΡ€ΠΎΡ‰Ρ‘Π½Π½Ρ‹Π΅ ΠΈ сокращённыС Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠΏΡ€ΠΎΡΡ‚ΠΈΡ‚ΡŒ ΠΈΠ·Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅. Π’Π°ΠΊ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΊΠΎΠ΄ Ρ€Π°Π±ΠΎΡ‚Ρ‹ с ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ ΠΏΠΎΠ²ΡΡŽΠ΄Ρƒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅, Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ прСкрасныС ΡˆΠ°Π±Π»ΠΎΠ½Ρ‹ проСктирования, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ Visitor ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ β€” это Π½Π΅ Π»ΡƒΡ‡ΡˆΠΈΠΉ способ, Π½ΠΎ Π·Π°Ρ‚ΠΎ это ΠΎΡ‡Π΅Π½ΡŒ просто ΠΈ понятно. Если Π²Ρ‹ Ρ€Π°Π·Π±ΠΈΡ€Π°Π΅Ρ‚Π΅ΡΡŒ Π² ΠΊΠΎΠ΄Π΅ ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ Π΅Π³ΠΎ Π² качСствС основы для Π±ΡƒΠ΄ΡƒΡ‰ΠΈΡ… ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ², Ρ‚ΠΎ исправлСниС Ρ‚Π°ΠΊΠΈΡ… нСдостатков Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ для вас ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΎΠΉ.

И Π΅Ρ‰Ρ‘ ΠΊΠΎΠ΅-Ρ‡Ρ‚ΠΎ: ΠΌΡ‹ ΠΆΠ΄Ρ‘ΠΌ ΠΎΡ‚ вас, Ρ‡Ρ‚ΠΎ Π²Ρ‹ Π±ΡƒΠ΄Π΅Ρ‚Π΅ Ρ€Π°ΡΡˆΠΈΡ€ΡΡ‚ΡŒ язык ΠΈ ΠΈΠ³Ρ€Π°Ρ‚ΡŒ с Π½ΠΈΠΌ ΠΏΠΎ своСму ΡƒΡΠΌΠΎΡ‚Ρ€Π΅Π½ΠΈΡŽ. Π’ΠΎΠ·ΡŒΠΌΠΈΡ‚Π΅ ΠΊΠΎΠ΄ ΠΈ Π½Π°Ρ‡ΠΈΠ½Π°ΠΉΡ‚Π΅ нСистово ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ, сойдитС с ΡƒΠΌΠ°, компиляторы Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ вас ΠΏΡƒΠ³Π°Ρ‚ΡŒ β€” вСдь это Ρ‚Π°ΠΊ вСсСло β€” ΠΈΠ³Ρ€Π°Ρ‚ΡŒ с языками!

Π―Π·Ρ‹ΠΊ Kaleidoscope

Π­Ρ‚ΠΎΡ‚ ΡƒΡ‡Π΅Π±Π½ΠΈΠΊ ΠΏΡ€ΠΎΠΈΠ»Π»ΡŽΡΡ‚Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΈΠ³Ρ€ΡƒΡˆΠ΅Ρ‡Π½Ρ‹ΠΉ язык программирования, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΡ‹ Π½Π°Π·Π²Π°Π»ΠΈ «Kaleidoscope» (Π½Π°Π·Π²Π°Π½ΠΈΠ΅ происходит ΠΎΡ‚ Ρ‚Ρ€Ρ‘Ρ… грСчСских слов: «красивый», Β«Π²ΠΈΠ΄Β» ΠΈ Β«ΡΠΌΠΎΡ‚Ρ€ΡŽ, наблюдаю»). Kaleidoscope являСтся ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π½Ρ‹ΠΌ языком, Ρ‡Ρ‚ΠΎ позволяСт ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ условия, ΠΌΠ°Ρ‚Π΅ΠΌΠ°Ρ‚ΠΈΠΊΡƒ ΠΈ Ρ‚.Π΄. Π’ Ρ…ΠΎΠ΄Π΅ изучСния ΠΌΡ‹ Ρ€Π°ΡΡˆΠΈΡ€ΠΈΠΌ Kaleidoscope для ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ конструкций if/then/else, Ρ†ΠΈΠΊΠ»ΠΎΠ², ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΡ… ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ², JIT-компиляции с простым ΠΊΠΎΠ½ΡΠΎΠ»ΡŒΠ½Ρ‹ΠΌ интСрфСйсом ΠΈ Ρ‚.Π΄.

Для простоты Π² Kaleidoscope Π΅ΡΡ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½ Ρ‚ΠΈΠΏ Π΄Π°Π½Π½Ρ‹Ρ… β€” 64-Π±ΠΈΡ‚Π½ΠΎΠ΅ число с ΠΏΠ»Π°Π²Π°ΡŽΡ‰Π΅ΠΉ Ρ‚ΠΎΡ‡ΠΊΠΎΠΉ (ΠΊΠ°ΠΊ Β«doubleΒ» Π² языкС C). Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, всС значСния β€” это Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ числа Π΄Π²ΠΎΠΉΠ½ΠΎΠΉ точности ΠΈ язык Π½Π΅ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ объявлСния Ρ‚ΠΈΠΏΠΎΠ². Π­Ρ‚ΠΎ Π΄Π΅Π»Π°Π΅Ρ‚ язык ΠΎΡ‡Π΅Π½ΡŒ красивым ΠΈ ΡƒΠΏΡ€ΠΎΡ‰Π°Π΅Ρ‚ синтаксис. НапримСр, ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ простой ΠΏΡ€ΠΈΠΌΠ΅Ρ€ вычисляСт числа Π€ΠΈΠ±ΠΎΠ½Π°Ρ‡Ρ‡ΠΈ:

ΠœΡ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΠ»ΠΈ Kaleidoscope Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ стандартныС Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅Ρ‡Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ (LLVM JIT Π΄Π΅Π»Π°Π΅Ρ‚ это Π²ΠΏΠΎΠ»Π½Π΅ Ρ‚Ρ€ΠΈΠ²ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΌ). Π­Ρ‚ΠΎ Π·Π½Π°Ρ‡ΠΈΡ‚, Ρ‡Ρ‚ΠΎ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово Β«externΒ» для объявлСния Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΏΠ΅Ρ€Π΅Π΄ Π΅Ρ‘ использованиСм (это Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ для Π²Π·Π°ΠΈΠΌΠ½ΠΎ рСкурсивных Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ). НапримСр:

Π‘ΠΎΠ»Π΅Π΅ интСрСсный ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΏΡ€ΠΈΠ²Π΅Π΄Ρ‘Π½ Π² Π“Π»Π°Π²Π΅ 6, Π³Π΄Π΅ ΠΌΡ‹ напишСм Π½Π° Kaleidoscope нСбольшоС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Π΅Ρ‚ мноТСство ΠœΠ°Π½Π΄Π΅Π»ΡŒΠ±Ρ€ΠΎΡ‚Π° Π² Ρ€Π°Π·Π½Ρ‹Ρ… стСпСнях приблиТСния.

А Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ погрузимся Π² Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ этого языка!

ЛСксичСский Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€

Когда Π΄Π΅Π»ΠΎ Π΄ΠΎΡ…ΠΎΠ΄ΠΈΡ‚ Π΄ΠΎ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ языка программирования, ΠΏΠ΅Ρ€Π²ΠΎΠ΅, Ρ‡Ρ‚ΠΎ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ, Ρ‚Π°ΠΊ это ΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡ‚ΡŒ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ тСкстовый Ρ„Π°ΠΉΠ» ΠΈ Ρ€Π°ΡΠΏΠΎΠ·Π½Π°Π²Π°Ρ‚ΡŒ Π² Π½Ρ‘ΠΌ ΠΊΠΎΠ΄. Π’Ρ€Π°Π΄ΠΈΡ†ΠΈΠΎΠ½Π½Ρ‹ΠΉ способ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ это состоит Π² использовании «Π»Π΅ΠΊΡΠΈΡ‡Π΅ΡΠΊΠΎΠ³ΠΎ Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€Π°» (ΠΈΠ»ΠΈ «сканСра»), для разбития Π²Ρ…ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΏΠΎΡ‚ΠΎΠΊΠ° Π½Π° Β«Ρ‚ΠΎΠΊΠ΅Π½Ρ‹Β». ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ‚ΠΎΠΊΠ΅Π½ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΡ‹ΠΉ лСксичСским Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ΠΎΠΌ Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Π΅Π΄ΠΈΠ½ΠΈΡ†Ρƒ ΠΊΠΎΠ΄Π° ΠΈ ΠΏΠΎΡ‚Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹Π΅ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, числовоС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅). Π’ΠΎ-ΠΏΠ΅Ρ€Π²Ρ‹Ρ…, ΠΌΡ‹ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠΌ возмоТности:

ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ‚ΠΎΠΊΠ΅Π½, Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΡ‹ΠΉ нашими лСксичСским Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ΠΎΠΌ Π±ΡƒΠ΄Π΅Ρ‚ Π»ΠΈΠ±ΠΎ ΠΎΠ΄Π½ΠΈΠΌ ΠΈΠ· Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ пСрСчислСния Token ΠΈΠ»ΠΈ это Π±ΡƒΠ΄Π΅Ρ‚ «нСизвСстноС» Π²Ρ€ΠΎΠ΄Π΅ символа «+», ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ возвращаСтся Π² качСствС значСния ASCII. Если Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ Ρ‚ΠΎΠΊΠ΅Π½ являСтся ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠΌ, Ρ‚ΠΎ глобальная пСрСмСнная IdentifierStr содСрТит имя ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π°. Если Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ Ρ‚ΠΎΠΊΠ΅Π½ являСтся числовым Π»ΠΈΡ‚Π΅Ρ€Π°Π»ΠΎΠΌ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, 1.0), NumVal содСрТит Π΅Π³ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅. ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ для простоты, Π½ΠΎ это Π΄Π°Π»Π΅ΠΊΠΎ Π½Π΅ Π»ΡƒΡ‡ΡˆΠΈΠΉ Π²Ρ‹Π±ΠΎΡ€ для Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ примСнСния :).

ЀактичСски, наш лСксичСский Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ ΠΎΠ΄Π½ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ с ΠΈΠΌΠ΅Π½Π΅ΠΌ gettok. Ѐункция Gettok ΠΏΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ Ρ‚ΠΎΠΊΠ΅Π½ ΠΈΠ· стандартного ΠΏΠΎΡ‚ΠΎΠΊΠ° Π²Π²ΠΎΠ΄Π°. Π•Ρ‘ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ начинаСтся Ρ‚Π°ΠΊ:

gettok Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ C-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ getchar(), Ρ‡Ρ‚ΠΎΠ±Ρ‹ Ρ‡ΠΈΡ‚Π°Ρ‚ΡŒ символы ΠΏΠΎ ΠΎΠ΄Π½ΠΎΠΌΡƒ ΠΈΠ· стандартного Π²Π²ΠΎΠ΄Π°. Она распознаСт ΠΈΡ… ΠΈ сохраняСт послСдний ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Π½Π½Ρ‹ΠΉ символ Π² LastChar, Π½ΠΎ Π½Π΅ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚. ΠŸΠ΅Ρ€Π²ΠΎΠ΅, Ρ‡Ρ‚ΠΎ ΠΎΠ½Π° Π΄ΠΎΠ»ΠΆΠ½Π° Π΄Π΅Π»Π°Ρ‚ΡŒ β€” это ΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ±Π΅Π»Ρ‹ ΠΌΠ΅ΠΆΠ΄Ρƒ лСксСмами. Π­Ρ‚ΠΎ достигаСтся Π² Π²Ρ‹ΡˆΠ΅ΠΏΡ€ΠΈΠ²Π΅Π΄Ρ‘Π½Π½ΠΎΠΌ Ρ†ΠΈΠΊΠ»Π΅.

Π‘Π»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅ дСйствиС gettok β€” это распознаниС ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠ² ΠΈ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Ρ… слов, Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ Β«defΒ». Kaleidoscope Π΄Π΅Π»Π°Π΅Ρ‚ это с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ этого простого Ρ†ΠΈΠΊΠ»Π°:

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ этот ΠΊΠΎΠ΄ собираСт Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½ΡƒΡŽ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ Β«IdentifierStrΒ», ΠΏΠΎΠΊΠ° Π°Π½Π°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Π΅ слова языка ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡŽΡ‚ΡΡ Π² этом ΠΆΠ΅ Ρ†ΠΈΠΊΠ»Π΅. Для числСнных Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ всё Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎ:

Π­Ρ‚ΠΎ довольно простой ΠΊΠΎΠ΄ для ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π²Ρ…ΠΎΠ΄Π½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ…. ΠŸΡ€ΠΈ Ρ‡Ρ‚Π΅Π½ΠΈΠΈ числового значСния, ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ C-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ strtod для прСобразования Π΅Π³ΠΎ Π² числовоС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΡ‹ сохраняСм Π² NumVal. ΠžΡ‚ΠΌΠ΅Ρ‚ΠΈΠΌ, Ρ‡Ρ‚ΠΎ здСсь Π½Π΅ происходит достаточной ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ ошибок: Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Β«1.23.45.67Β» Π±ΡƒΠ΄Π΅Ρ‚ считано ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π½ΠΎ Ρ‚Π°ΠΊ, ΠΊΠ°ΠΊ Ссли Π±Ρ‹ Π²Ρ‹ Π²Π²Π΅Π»ΠΈ Π² Β«1.23Β». Π’Ρ‹ Π»Π΅Π³ΠΊΠΎ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΠΊΠΎΠ΄ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΎΠΉ Π½Π° ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹Π΅ ошибки :). Π’Π΅ΠΏΠ΅Ρ€ΡŒ разбСрёмся с коммСнтариями:

ΠžΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠ² ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ, ΠΌΡ‹ пропускаСм символы Π΄ΠΎ ΠΊΠΎΠ½Ρ†Π° строки, Π° Π·Π°Ρ‚Π΅ΠΌ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ Ρ‚ΠΎΠΊΠ΅Π½. Π—Π°Ρ‚Π΅ΠΌ, Ссли Π²Π²ΠΎΠ΄ Π½Π΅ совпадаСт с ΠΎΠ΄Π½ΠΈΠΌ ΠΈΠ· ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹Ρ… Π²Ρ‹ΡˆΠ΅ случаСв, Ρ‚ΠΎ это Π»ΠΈΠ±ΠΎ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ Π²Ρ€ΠΎΠ΄Π΅ «+», Π»ΠΈΠ±ΠΎ ΠΊΠΎΠ½Π΅Ρ† Ρ„Π°ΠΉΠ»Π°. Они ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°ΡŽΡ‚ΡΡ этим ΠΊΠΎΠ΄ΠΎΠΌ:

ΠŸΡ€ΠΈ этом, ΠΌΡ‹ ΠΈΠΌΠ΅Π΅ΠΌ ΠΏΠΎΠ»Π½ΠΎΡ†Π΅Π½Π½Ρ‹ΠΉ лСксичСский Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ для языка Kaleidoscope (ΠΏΠΎΠ»Π½Ρ‹ΠΉ листинг ΠΊΠΎΠ΄Π° лСксичСского Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€Π° доступСн Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ Π³Π»Π°Π²Π΅ ΠΈΠ· ΡƒΡ‡Π΅Π±Π½ΠΈΠΊΠ°). Π”Π°Π»ΡŒΡˆΠ΅ ΠΌΡ‹ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π΅ΠΌ простой синтаксичСский Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ для построСния Abstract Syntax Tree. Π—Π°Ρ‚Π΅ΠΌ ΠΌΡ‹ смоТСм ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ лСксичСский ΠΈ синтаксичСский Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ вмСстС.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ

Π’Π°Ρˆ адрСс email Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½. ΠžΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ поля ΠΏΠΎΠΌΠ΅Ρ‡Π΅Π½Ρ‹ *