ΠΊΠ°ΠΊ ΠΏΠΈΡˆΡƒΡ‚ΡΡ языки программирования

Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ языка программирования. Π§Π°ΡΡ‚ΡŒ 0

Π”ΠΎΠ±Ρ€ΠΎΠ³ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ суток Π£Π²Π°ΠΆΠ°Π΅ΠΌΡ‹Π΅ Π₯Π°Π±Ρ€Π° ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΠΈ! НС Π±ΡƒΠ΄Ρƒ Π΄ΠΎΠ»Π³ΠΎ Ρ€Π°ΡΡΡƒΡΠΎΠ»ΠΈΠ²Π°Ρ‚ΡŒ, расскаТу лишь основноС Ρ‡Ρ‚ΠΎ ΠΏΠΎΠ΄Ρ‚ΠΎΠ»ΠΊΠ½ΡƒΠ»ΠΎ мСня ΠΊ написанию Π΄Π°Π½Π½ΠΎΠΉ ΡΡ‚Π°Ρ‚ΡŒΠΈ, ΠΈ ΠΊ собствСнно Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ своСго языка программирования.

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

Π’ связи с этим, сразу даю ΠΎΡ‚Π²Π΅Ρ‚ Π½Π° вопросы Β«Π—Π°Ρ‡Π΅ΠΌ это Π½Π°Π΄ΠΎ?! ΠžΡ‡Π΅Ρ€Π΅Π΄Π½ΠΎΠΉ вСлосипСд Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ? Π—Π°Π½ΡΡ‚ΡŒΡΡ Ρ‡Ρ‚ΠΎ Π»ΠΈ Π½Π΅Ρ‡Π΅ΠΌ?Β» β€” дСлаСтся это с Ρ†Π΅Π»ΡŒΡŽ удовлСтворСния интСрСса, Π° Ρ‚Π°ΠΊ ΠΆΠ΅ для Ρ‚ΠΎΠ³ΠΎ Ρ‡Ρ‚ΠΎ Π±Ρ‹ Ρ‚Π°ΠΊΠΈΠ΅ ΠΆΠ΅ ΠΈΠ½Ρ‚Π΅Ρ€Π΅ΡΡƒΡŽΡ‰ΠΈΠ΅ΡΡ ΠΊΠ°ΠΊ я ΠΈΠΌΠ΅Π»ΠΈ прСдставлСниС ΠΎ Ρ‚ΠΎΠΌ ΠΊΠ°ΠΊ это Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ собствСнно ΠΊ Ρ‚Π΅ΠΎΡ€ΠΈΠΈ языков программирования. ΠŸΠΎΡΠΌΠΎΡ‚Ρ€ΠΈΠΌ Ρ‡Ρ‚ΠΎ Π½Π° этот счСт всСми любимая ВикипСдия:

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

Π‘ этим всС понятно, Π½ΠΈΡ‡Π΅Π³ΠΎ слоТного, всС ΠΌΡ‹ Π·Π½Π°Π΅ΠΌ Ρ‡Ρ‚ΠΎ это Ρ‚Π°ΠΊΠΎΠ΅.

О Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ прСдстоит ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ

1. ЛСксичСский Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€. ΠœΠΎΠ΄ΡƒΠ»ΡŒ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡ‚ΡŒ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΡΡ‚ΡŒ лСксичСских конструкций, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ прСдусмотрСны нашим языком программирования.
2. ΠŸΠ°Ρ€ΡΠ΅Ρ€. Π”Π°Π½Π½Ρ‹ΠΉ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΊΠΎΠ΄ понятный Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊΡƒ Π² ΠΏΠΎΡ‚ΠΎΠΊ Ρ‚ΠΎΠΊΠ΅Π½ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π² ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ Π±ΡƒΠ΄ΡƒΡ‚ ΠΈΡΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ ΠΈΠ»ΠΈ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ Π² ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ язык.
3. ΠžΠ±Ρ‹Ρ‡Π½ΠΎ Π½Π° этом мСстС стоит ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ‚ΠΎΡ€, Π½ΠΎ Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ наша ΠΏΠΎΠ΄Π΅Π»ΠΊΠ° являСтся скорСС ΠΈΠ³Ρ€ΡƒΡˆΠΊΠΎΠΉ Ρ‡Π΅ΠΌ ΠΊΡ€ΡƒΠΏΠ½Ρ‹ΠΌ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠΌ, я ΠΎΡ‚ΠΊΠ°ΠΆΡƒΡΡŒ ΠΎΡ‚ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ‚ΠΎΡ€Π°. И Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ наши ΠΏΡƒΡ‚ΠΈ расходятся:
3.1. Вранслятор. Π”Π°Π½Π½Ρ‹ΠΉ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ Π±ΡƒΠ΄Π΅Ρ‚ Ρ‚Ρ€Π°Π½ΡΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠΎΡ‚ΠΎΠΊ Ρ‚ΠΎΠΊΠ΅Π½ΠΎΠ² ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹Ρ… ΠΎΡ‚ парсСра Π² ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. Π”Π°Π½Π½Ρ‹ΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π² компиляторах
3.2. Π˜ΡΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒ. Π”Π°Π½Π½Ρ‹ΠΉ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ выполняСт ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ записанныС Π² Π²ΠΈΠ΄Π΅ ΠΏΠΎΡ‚ΠΎΠΊΠ° Ρ‚ΠΎΠΊΠ΅Π½ΠΎΠ². Π”Π°Π½Π½Ρ‹ΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π² ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Π°Ρ….

Π― большС склоняюсь ΠΊ созданию Π½Π΅ΠΊΠΎΠ΅Π³ΠΎ ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½ΠΎΠ³ΠΎ Π·Π²Π΅Π½Π° ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ΠΎΠΌ ΠΈ компилятором. Π’ΠΎ Π΅ΡΡ‚ΡŒ ΠΊ созданию языка программирования, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±ΡƒΠ΄Π΅Ρ‚ Ρ‚Ρ€Π°Π½ΡΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π² Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ ΠΌΠ°ΡˆΠΈΠ½Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Ρ‚Π°ΠΊ ΠΆΠ΅ прСдстоит Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ.

НСмного ΠΎ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ

1. Для Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ транслятора Π±ΡƒΠ΄Π΅Ρ‚ использован язык программирования Python. ΠŸΠΎΡ‡Π΅ΠΌΡƒ ΠΈΠΌΠ΅Π½Π½ΠΎ ΠΎΠ½? ΠŸΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Π΅Π³ΠΎ я знаю Π»ΡƒΡ‡ΡˆΠ΅ всСх. К Ρ‚ΠΎΠΌΡƒ ΠΆΠ΅, Π΅Π³ΠΎ типизация, Π° Ρ‚ΠΎΡ‡Π½Π΅Π΅ Π΅Π΅ ΠΏΠΎΠ»Π½ΠΎΠ΅ отсутствиС ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ ΡΠΎΠΊΡ€Π°Ρ‚ΠΈΡ‚ΡŒ количСство ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Ρ… ΠΏΡ€ΠΈ написании ΠΊΠΎΠ΄Π°.
2. Для Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ ΠΌΠ°ΡˆΠΈΠ½Ρ‹ Ρ‚Π°ΠΊ ΠΆΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ использован Python.
3. Для сборки ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° Π±ΡƒΠ΄Π΅Ρ‚ использован PyInstaller, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΎΠ½ позволяСт ΡƒΠΏΠ°ΠΊΠΎΠ²Ρ‹Π²Π°Ρ‚ΡŒ всС Π² ΠΎΠ΄ΠΈΠ½ Ρ„Π°ΠΉΠ», ΠΊ Ρ‚ΠΎΠΌΡƒ ΠΆΠ΅ Π½Π° Π΄Π°Π½Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ±Ρ€Π°Ρ‚ΡŒ для Linux ΠΈ Windows Π±Π΅Π· особых Π·Π°ΠΌΠΎΡ€ΠΎΡ‡Π΅ΠΊ.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΊ ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅

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

1. Π•ΡΡ‚ΡŒ однострочныС ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ, Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‚ΡΡ со Π·Π½Π°ΠΊΠ° Π΄ΠΈΠ΅Π·Π° (#) ΠΈ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°ΡŽΡ‚ΡΡ Π΄ΠΎ ΠΊΠΎΠ½Ρ†Π° строки.
2. Π•ΡΡ‚ΡŒ Π΄Π²Π° Ρ‚ΠΈΠΏΠ° Π΄Π°Π½Π½Ρ‹Ρ… (integer, string).
3. Π•ΡΡ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π²Ρ‹Π²ΠΎΠ΄Π° ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ Π½Π° экран.
4. Π•ΡΡ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π²Π²ΠΎΠ΄Π° Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ с ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Ρ‹.

НапишСм ΠΏΡ€ΠΎΡΡ‚Π΅Π½ΡŒΠΊΡƒΡŽ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ Π½Π° нашСм Π½ΠΎΠ²ΠΎΠΌ языкС, с ΡƒΡ‡Π΅Ρ‚ΠΎΠΌ ΠΏΡ€Π°Π²ΠΈΠ» ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΡ‹ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‡Ρ‚ΠΎ сформулировали:

Π’ΠΎΠ΄ собствСнно ΠΈ всС. ΠŸΡ€ΠΎΡΡ‚Π΅Π½ΡŒΠΊΠ°Ρ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΊΠ°, которая дСмонстрируСт возмоТности Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈΠ΄ΡƒΠΌΠ°Π½Π½ΠΎΠ³ΠΎ языка. На этом я Π΄ΡƒΠΌΠ°ΡŽ слСдуСт Π·Π°ΠΊΠΎΠ½Ρ‡ΠΈΡ‚ΡŒ.

Π’ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ части Π½Π°Ρ‡Π½Π΅ΠΌ написаниС своСго вСлосипСда, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ смоТСт Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΠΊΠΎΠ΄ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹ΠΉ Π²Ρ‹ΡˆΠ΅.

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

Как ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ свой язык программирования: тСория, инструмСнты ΠΈ совСты ΠΎΡ‚ ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ°

ΠΠ²Ρ‚ΠΎΡ€ΠΈΠ·ΡƒΠΉΡ‚Π΅ΡΡŒ

Как ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ свой язык программирования: тСория, инструмСнты ΠΈ совСты ΠΎΡ‚ ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ°

ΠΊΠ°ΠΊ ΠΏΠΈΡˆΡƒΡ‚ΡΡ языки программирования. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ ΠΊΠ°ΠΊ ΠΏΠΈΡˆΡƒΡ‚ΡΡ языки программирования. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ ΠΊΠ°ΠΊ ΠΏΠΈΡˆΡƒΡ‚ΡΡ языки программирования. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ ΠΊΠ°ΠΊ ΠΏΠΈΡˆΡƒΡ‚ΡΡ языки программирования. Π€ΠΎΡ‚ΠΎ ΠΊΠ°ΠΊ ΠΏΠΈΡˆΡƒΡ‚ΡΡ языки программирования

На протяТСнии послСдних ΡˆΠ΅ΡΡ‚ΠΈ мСсяцСв я Ρ€Π°Π±ΠΎΡ‚Π°Π» Π½Π°Π΄ созданиСм языка программирования (ЯП) ΠΏΠΎΠ΄ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ Pinecone. Π― Π½Π΅ рискну Π½Π°Π·Π²Π°Ρ‚ΡŒ Π΅Π³ΠΎ Π·Π°ΠΊΠΎΠ½Ρ‡Π΅Π½Π½Ρ‹ΠΌ, Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π³ΠΎ ΡƒΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ β€” ΠΎΠ½ содСрТит для этого достаточно элСмСнтов, Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅, Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠ΅ структуры Π΄Π°Π½Π½Ρ‹Ρ…. Если Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΎΠ·Π½Π°ΠΊΠΎΠΌΠΈΡ‚ΡŒΡΡ с Π½ΠΈΠΌ ΠΏΠ΅Ρ€Π΅Π΄ ΠΏΡ€ΠΎΡ‡Ρ‚Π΅Π½ΠΈΠ΅ΠΌ, ΠΏΡ€Π΅Π΄Π»Π°Π³Π°ΡŽ ΠΏΠΎΡΠ΅Ρ‚ΠΈΡ‚ΡŒ ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½ΡƒΡŽ страницу ΠΈ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ Π½Π° GitHub.

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

Π― Π½Π΅ экспСрт. Когда я Π½Π°Ρ‡Π°Π» Ρ€Π°Π±ΠΎΡ‚Ρƒ Π½Π°Π΄ этим ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠΌ, я понятия Π½Π΅ ΠΈΠΌΠ΅Π», Ρ‡Ρ‚ΠΎ дСлаю, ΠΈ всё Π΅Ρ‰Π΅ Π½Π΅ имСю. Π― Π½ΠΈΠΊΠΎΠ³Π΄Π° Ρ†Π΅Π»Π΅Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½Π½ΠΎ Π½Π΅ ΠΈΠ·ΡƒΡ‡Π°Π» ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΡ‹ создания языка β€” Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Π» Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»Ρ‹ Π² Π‘Π΅Ρ‚ΠΈ ΠΈ Π΄Π°ΠΆΠ΅ Π² Π½ΠΈΡ… Π½Π΅ Π½Π°ΡˆΡ‘Π» для сСбя ΠΏΠΎΡ‡Ρ‚ΠΈ Π½ΠΈΡ‡Π΅Π³ΠΎ ΠΏΠΎΠ»Π΅Π·Π½ΠΎΠ³ΠΎ.

Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, я написал Π°Π±ΡΠΎΠ»ΡŽΡ‚Π½ΠΎ Π½ΠΎΠ²Ρ‹ΠΉ язык. И ΠΎΠ½ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚. НавСрноС, я Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ дСлаю ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ.

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

ВСкст Ρ‚ΠΎΡ‡Π½ΠΎ Π½Π΅ ΠΏΡ€Π΅Ρ‚Π΅Π½Π΄ΡƒΠ΅Ρ‚ Π½Π° Π·Π²Π°Π½ΠΈΠ΅ ΠΏΠΎΠ»Π½ΠΎΡ†Π΅Π½Π½ΠΎΠ³ΠΎ руководства ΠΏΠΎ созданию языка программирования, Π½ΠΎ для Π»ΡŽΠ±ΠΎΠ·Π½Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… Π±ΡƒΠ΄Π΅Ρ‚ Ρ…ΠΎΡ€ΠΎΡˆΠ΅ΠΉ ΠΎΡ‚ΠΏΡ€Π°Π²Π½ΠΎΠΉ Ρ‚ΠΎΡ‡ΠΊΠΎΠΉ.

ΠŸΠ΅Ρ€Π²Ρ‹Π΅ шаги

«А с Ρ‡Π΅Π³ΠΎ Π²ΠΎΠΎΠ±Ρ‰Π΅ Π½Π°Ρ‡ΠΈΠ½Π°Ρ‚ΡŒ?Β» β€” вопрос, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ часто Π·Π°Π΄Π°ΡŽΡ‚, ΡƒΠ·Π½Π°Π², Ρ‡Ρ‚ΠΎ я ΠΏΠΈΡˆΡƒ свой язык. Π’ этой части ΠΏΠΎΡΡ‚Π°Ρ€Π°ΡŽΡΡŒ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ Π½Π° Π½Π΅Π³ΠΎ ΠΎΡ‚Π²Π΅Ρ‚ΠΈΡ‚ΡŒ.

ΠšΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΠ΅ΠΌΡ‹ΠΉ ΠΈΠ»ΠΈ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚ΠΈΡ€ΡƒΠ΅ΠΌΡ‹ΠΉ?

ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€ Π°Π½Π°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ Ρ†Π΅Π»ΠΈΠΊΠΎΠΌ, ΠΏΡ€Π΅Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π΅Ρ‘ Π² ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ ΠΈ сохраняСт для ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π³ΠΎ выполнСния. Π˜Π½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ ΠΆΠ΅ Ρ€Π°Π·Π±ΠΈΡ€Π°Π΅Ρ‚ ΠΈ выполняСт ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ построчно Π² Ρ€Π΅ΠΆΠΈΠΌΠ΅ Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ.

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

Π― Ρ…ΠΎΡ‚Π΅Π» ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ простой ΠΈ ΠΏΡ€ΠΈ этом ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ язык, ΠΊΠ°ΠΊΠΈΡ… Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ, поэтому с самого Π½Π°Ρ‡Π°Π»Π° Ρ€Π΅ΡˆΠΈΠ» ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Pinecone ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΠ΅ΠΌΡ‹ΠΌ. Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ Ρƒ Pinecone Ρ‚ΠΎΠΆΠ΅ Π΅ΡΡ‚ΡŒ β€” ΠΏΠ΅Ρ€Π²ΠΎΠ΅ врСмя запуск Π±Ρ‹Π» Π²ΠΎΠ·ΠΌΠΎΠΆΠ΅Π½ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ с Π΅Π³ΠΎ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ, ΠΏΠΎΠ·ΠΆΠ΅ объясню, ΠΏΠΎΡ‡Π΅ΠΌΡƒ.

ΠŸΡ€ΠΈΠΌ. ΠΏΠ΅Ρ€Π΅Π². ΠšΡΡ‚Π°Ρ‚ΠΈ, Ρƒ нас Π΅ΡΡ‚ΡŒ ΠΊΡ€Π°Ρ‚ΠΊΠΈΠΉ ΠΎΠ±Π·ΠΎΡ€ сСрии статСй ΠΏΠΎ созданию собствСнного ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Π° β€” это ΠΎΡ‚Π»ΠΈΡ‡Π½ΠΎΠ΅ ΡƒΠΏΡ€Π°ΠΆΠ½Π΅Π½ΠΈΠ΅ для Ρ‚Π΅Ρ…, ΠΊΡ‚ΠΎ ΠΈΠ·ΡƒΡ‡Π°Π΅Ρ‚ Python.

Π’Ρ‹Π±ΠΎΡ€ языка

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

Но Π² Ρ†Π΅Π»ΠΎΠΌ совСт ΠΌΠΎΠΆΠ½ΠΎ Π΄Π°Ρ‚ΡŒ Ρ‚Π°ΠΊΠΎΠΉ:

ΠŸΡ€ΠΎΠ΅ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρ‹

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

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

ΠΊΠ°ΠΊ ΠΏΠΈΡˆΡƒΡ‚ΡΡ языки программирования. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ ΠΊΠ°ΠΊ ΠΏΠΈΡˆΡƒΡ‚ΡΡ языки программирования. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ ΠΊΠ°ΠΊ ΠΏΠΈΡˆΡƒΡ‚ΡΡ языки программирования. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ ΠΊΠ°ΠΊ ΠΏΠΈΡˆΡƒΡ‚ΡΡ языки программирования. Π€ΠΎΡ‚ΠΎ ΠΊΠ°ΠΊ ΠΏΠΈΡˆΡƒΡ‚ΡΡ языки программирования

Π‘Ρ‚Ρ€ΠΎΠΊΠ° исходного ΠΊΠΎΠ΄Π° ΠΏΡ€ΠΎΡ…ΠΎΠ΄ΠΈΡ‚ Ρ‡Π΅Ρ€Π΅Π· лСксСр ΠΈ прСвращаСтся Π² список Ρ‚ΠΎΠΊΠ΅Π½ΠΎΠ².

ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ шаг Π² Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π΅ ЯП β€” это лСксичСский Π°Π½Π°Π»ΠΈΠ·. Говоря ΠΏΠΎ-простому, ΠΎΠ½ прСдставляСт собой Ρ€Π°Π·Π±ΠΈΠ΅Π½ΠΈΠ΅ тСкста Π½Π° Ρ‚ΠΎΠΊΠ΅Π½Ρ‹, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ Π΅Π΄ΠΈΠ½ΠΈΡ†Ρ‹ языка: ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅, названия Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ (ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹), ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹, числа. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΠΏΠΎΠ΄Π°Π² лСксСру Π½Π° Π²Ρ…ΠΎΠ΄ строку с исходным ΠΊΠΎΠ΄ΠΎΠΌ, ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ Π½Π° Π²Ρ‹Ρ…ΠΎΠ΄Π΅ список всСх Ρ‚ΠΎΠΊΠ΅Π½ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π² Π½Π΅ΠΉ содСрТатся.

ΠžΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΡ ΠΊ исходному ΠΊΠΎΠ΄Ρƒ ΡƒΠΆΠ΅ Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΎΠΈΡΡ…ΠΎΠ΄ΠΈΡ‚ΡŒ Π½Π° ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… этапах, поэтому лСксСр Π΄ΠΎΠ»ΠΆΠ΅Π½ Π²Ρ‹Π΄Π°Ρ‚ΡŒ всю Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡƒΡŽ для Π½ΠΈΡ… ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ.

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

Одним ΠΈΠ· основных Ρ‚Π°ΠΊΠΈΡ… инструмСнтов являСтся Flex β€” Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€ лСксичСских Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ΠΎΠ². Он ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Π½Π° Π²Ρ…ΠΎΠ΄ Ρ„Π°ΠΉΠ» с описаниСм Π³Ρ€Π°ΠΌΠΌΠ°Ρ‚ΠΈΠΊΠΈ языка, Π° ΠΏΠΎΡ‚ΠΎΠΌ создаёт ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ Π½Π° C, которая Π² свою ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ Π°Π½Π°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅Ρ‚ строку ΠΈ Π²Ρ‹Π΄Π°Ρ‘Ρ‚ Π½ΡƒΠΆΠ½Ρ‹ΠΉ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚.

ΠœΠΎΡ‘ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅

Π― Ρ€Π΅ΡˆΠΈΠ» ΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ написанный ΠΌΠ½ΠΎΠΉ Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€. ΠžΡΠΎΠ±Ρ‹Ρ… прСимущСств Ρƒ Flex я Π² ΠΈΡ‚ΠΎΠ³Π΅ Π½Π΅ ΡƒΠ²ΠΈΠ΄Π΅Π», Π° Π΅Π³ΠΎ использованиС Ρ‚ΠΎΠ»ΡŒΠΊΠΎ создало Π±Ρ‹ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ зависимости, ΡƒΡΠ»ΠΎΠΆΠ½ΡΡŽΡ‰ΠΈΠ΅ процСсс сборки. К Ρ‚ΠΎΠΌΡƒ ΠΆΠ΅, ΠΌΠΎΠΉ Π²Ρ‹Π±ΠΎΡ€ обСспСчиваСт большС гибкости β€” Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊ языку ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ Π±Π΅Π· нСобходимости Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ нСсколько Ρ„Π°ΠΉΠ»ΠΎΠ².

БинтаксичСский Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ / парсСр

ΠΊΠ°ΠΊ ΠΏΠΈΡˆΡƒΡ‚ΡΡ языки программирования. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ ΠΊΠ°ΠΊ ΠΏΠΈΡˆΡƒΡ‚ΡΡ языки программирования. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ ΠΊΠ°ΠΊ ΠΏΠΈΡˆΡƒΡ‚ΡΡ языки программирования. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ ΠΊΠ°ΠΊ ΠΏΠΈΡˆΡƒΡ‚ΡΡ языки программирования. Π€ΠΎΡ‚ΠΎ ΠΊΠ°ΠΊ ΠΏΠΈΡˆΡƒΡ‚ΡΡ языки программирования

Бписок Ρ‚ΠΎΠΊΠ΅Π½ΠΎΠ² ΠΏΡ€ΠΎΡ…ΠΎΠ΄ΠΈΡ‚ Ρ‡Π΅Ρ€Π΅Π· парсСр ΠΈ прСвращаСтся Π² Π΄Π΅Ρ€Π΅Π²ΠΎ.

Π‘Π»Π΅Π΄ΡƒΡŽΡ‰Π°Ρ стадия β€” парсСр. Он ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠ΅Ρ‚ исходный тСкст, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ список Ρ‚ΠΎΠΊΠ΅Π½ΠΎΠ² (с ΡƒΡ‡Ρ‘Ρ‚ΠΎΠΌ скобок ΠΈ порядка ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ), Π² абстрактноС синтаксичСскоС Π΄Π΅Ρ€Π΅Π²ΠΎ, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ позволяСт структурно ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ ΠΏΡ€Π°Π²ΠΈΠ»Π° создаваСмого языка. Π‘Π°ΠΌ ΠΏΠΎ сСбС процСсс ΠΌΠΎΠΆΠ½ΠΎ Π½Π°Π·Π²Π°Ρ‚ΡŒ простым, Π½ΠΎ с ΡƒΠ²Π΅Π»ΠΈΡ‡Π΅Π½ΠΈΠ΅ΠΌ количСства языковых конструкций ΠΎΠ½ сильно услоТняСтся.

Bison

На этом шагС я Ρ‚Π°ΠΊΠΆΠ΅ Π΄ΡƒΠΌΠ°Π» ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΡΡ‚ΠΎΡ€ΠΎΠ½Π½ΡŽΡŽ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ, рассматривая Bison для Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ синтаксичСского Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€Π°. Он Π²ΠΎ ΠΌΠ½ΠΎΠ³ΠΎΠΌ ΠΏΠΎΡ…ΠΎΠΆ Π½Π° Flex β€” ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠΉ Ρ„Π°ΠΉΠ» с синтаксичСскими ΠΏΡ€Π°Π²ΠΈΠ»Π°ΠΌΠΈ структурируСтся с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π½Π° языкС C. Но я снова отказался ΠΎΡ‚ срСдств Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·Π°Ρ†ΠΈΠΈ.

ΠŸΡ€Π΅ΠΈΠΌΡƒΡ‰Π΅ΡΡ‚Π²Π° кастомных ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ

Π‘ лСксСром ΠΌΠΎΡ‘ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ свой ΠΊΠΎΠ΄ (Π΄Π»ΠΈΠ½ΠΎΠΉ ΠΎΠΊΠΎΠ»ΠΎ 200 строк) Π±Ρ‹Π»ΠΎ довольно ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½Ρ‹ΠΌ: я люблю Π·Π°Π΄Π°Ρ‡ΠΊΠΈ, Π° эта ΠΊ Ρ‚ΠΎΠΌΡƒ ΠΆΠ΅ ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Ρ‚Ρ€ΠΈΠ²ΠΈΠ°Π»ΡŒΠ½Π°Ρ. Π‘ парсСром другая история: сСйчас Π΄Π»ΠΈΠ½Π° ΠΊΠΎΠ΄Π° для Π½Π΅Π³ΠΎ β€” 750 строк, ΠΈ это ΡƒΠΆΠ΅ Ρ‚Ρ€Π΅Ρ‚ΡŒΡ ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ° (ΠΏΠ΅Ρ€Π²Ρ‹Π΅ Π΄Π²Π΅ Π±Ρ‹Π»ΠΈ просто уТасны).

Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, я Ρ€Π΅ΡˆΠΈΠ» Π΄Π΅Π»Π°Ρ‚ΡŒ парсСр сам. Π’ΠΎΡ‚ основныС ΠΏΡ€ΠΈΡ‡ΠΈΠ½Ρ‹:

Π’ цСлСсообразности Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ мСня ΡƒΠ±Π΅Π΄ΠΈΠ»ΠΎ высказываниС Π£ΠΎΠ»Ρ‚Π΅Ρ€Π° Π‘Ρ€Π°ΠΉΡ‚Π° (создатСля языка D) Π² ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· Π΅Π³ΠΎ статСй:

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

Абстрактный сСмантичСский Π³Ρ€Π°Ρ„

ΠΊΠ°ΠΊ ΠΏΠΈΡˆΡƒΡ‚ΡΡ языки программирования. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ ΠΊΠ°ΠΊ ΠΏΠΈΡˆΡƒΡ‚ΡΡ языки программирования. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ ΠΊΠ°ΠΊ ΠΏΠΈΡˆΡƒΡ‚ΡΡ языки программирования. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ ΠΊΠ°ΠΊ ΠΏΠΈΡˆΡƒΡ‚ΡΡ языки программирования. Π€ΠΎΡ‚ΠΎ ΠΊΠ°ΠΊ ΠΏΠΈΡˆΡƒΡ‚ΡΡ языки программирования

ΠŸΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ ΠΎΡ‚ синтаксичСского Π΄Π΅Ρ€Π΅Π²Π° ΠΊ сСмантичСскому Π³Ρ€Π°Ρ„Ρƒ

Π’ этой части я Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π» структуру, ΠΏΠΎ своСй сути Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ Π±Π»ΠΈΠ·ΠΊΡƒΡŽ ΠΊ Β«ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½ΠΎΠΌΡƒ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»Π΅Π½ΠΈΡŽΒ» (intermediate representation) Π² LLVM. БущСствуСт нСбольшая, Π½ΠΎ ваТная Ρ€Π°Π·Π½ΠΈΡ†Π° ΠΌΠ΅ΠΆΠ΄Ρƒ абстрактным синтаксичСским Π΄Π΅Ρ€Π΅Π²ΠΎΠΌ (АБД) ΠΈ абстрактным сСмантичСским Π³Ρ€Π°Ρ„ΠΎΠΌ (АБГ).

АБГ vs АБД

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

Запуск

ПослС Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Π³Ρ€Π°Ρ„ составлСн, запуск ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ становится довольно простой Π·Π°Π΄Π°Ρ‡Π΅ΠΉ. ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ ΡƒΠ·Π΅Π» содСрТит Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, которая ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ Π½Π° Π²Ρ…ΠΎΠ΄, Π΄Π΅Π»Π°Π΅Ρ‚ Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Π·Π°ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΎ (Π²ΠΊΠ»ΡŽΡ‡Π°Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹ΠΉ Π²Ρ‹Π·ΠΎΠ² Π²ΡΠΏΠΎΠΌΠΎΠ³Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ), ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚. Π­Ρ‚ΠΎ β€” ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ Π² дСйствии.

Π’Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹ компиляции

Π’Ρ‹, Π½Π°Π²Π΅Ρ€Π½ΠΎΠ΅, спроситС, ΠΎΡ‚ΠΊΡƒΠ΄Π° взялся ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€, Ссли я ΠΈΠ·Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠ» Pinecone ΠΊΠ°ΠΊ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΠ΅ΠΌΡ‹ΠΉ язык. Π”Π΅Π»ΠΎ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ компиляция Π³ΠΎΡ€Π°Π·Π΄ΠΎ слоТнСС, Ρ‡Π΅ΠΌ интСрпрСтация β€” я ΡƒΠΆΠ΅ ΡƒΠΏΠΎΠΌΠΈΠ½Π°Π» Ρ€Π°Π½Π΅Π΅, Ρ‡Ρ‚ΠΎ столкнулся с Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°ΠΌΠΈ Π½Π° этом шагС.

ΠΠ°ΠΏΠΈΡΠ°Ρ‚ΡŒ свой компилятор

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

LLVM β€” это коллСкция инструмСнтов для компиляции, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ Swift, Rust ΠΈ Clang. Π― Ρ€Π΅ΡˆΠΈΠ» ΠΎΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒΡΡ Π½Π° этом Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π΅, Π½ΠΎ ΠΎΠΏΡΡ‚ΡŒ Π½Π΅ рассчитал слоТности Π·Π°Π΄Π°Ρ‡ΠΈ, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΏΠ΅Ρ€Π΅Π΄ собой поставил. Для мСня ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΎΠΉ оказалось Π½Π΅ освоСниС ассСмблСра, Π° Ρ€Π°Π±ΠΎΡ‚Π° с ΠΎΠ³Ρ€ΠΎΠΌΠ½ΠΎΠΉ многосоставной Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΎΠΉ.

Вранспайлинг

МнС всё ΠΆΠ΅ Π½ΡƒΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ ΠΊΠ°ΠΊΠΎΠ΅-Ρ‚ΠΎ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅, поэтому я написал Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Ρ‚ΠΎΡ‡Π½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ: транспайлСр (transpiler) ΠΈΠ· Pinecone Π² C++ β€” ΠΎΠ½ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡ†ΠΈΡŽ ΠΏΠΎ Ρ‚ΠΈΠΏΡƒ «исходный ΠΊΠΎΠ΄ Π² исходный ΠΊΠΎΠ΄Β», Π° Ρ‚Π°ΠΊΠΆΠ΅ Π΄ΠΎΠ±Π°Π²ΠΈΠ» Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ автоматичСской компиляции Π²Ρ‹Π²ΠΎΠ΄Π° с GCC. Π’Π°ΠΊΠΎΠΉ способ Π½Π΅ являСтся Π½ΠΈ ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΡƒΠ΅ΠΌΡ‹ΠΌ, Π½ΠΈ кроссплатформСнным, Π½ΠΎ Π½Π° Π΄Π°Π½Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ хотя Π±Ρ‹ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΏΠΎΡ‡Ρ‚ΠΈ для всСх ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ Π½Π° Pinecone, это ΡƒΠΆΠ΅ Ρ…ΠΎΡ€ΠΎΡˆΠΎ.

Π”Π°Π»ΡŒΠ½Π΅ΠΉΡˆΠΈΠ΅ ΠΏΠ»Π°Π½Ρ‹

БСйчас ΠΌΠ½Π΅ Π½Π΅ достаёт Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΠΉ ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠΈ, Π½ΠΎ Π² Π±ΡƒΠ΄ΡƒΡ‰Π΅ΠΌ я ΡΠΎΠ±ΠΈΡ€Π°ΡŽΡΡŒ ΠΎΡ‚ Π½Π°Ρ‡Π°Π»Π° ΠΈ Π΄ΠΎ ΠΊΠΎΠ½Ρ†Π° Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ компилятор Pinecone с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ LLVM β€” инструмСнт ΠΌΠ½Π΅ нравится ΠΈ руководства ΠΊ Π½Π΅ΠΌΡƒ Ρ…ΠΎΡ€ΠΎΡˆΠΈΠ΅. Пока Ρ‡Ρ‚ΠΎ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Π° Ρ…Π²Π°Ρ‚Π°Π΅Ρ‚ для ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²Π½Ρ‹Ρ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ, Π° транспайлСр справляСтся с Π±ΠΎΠ»Π΅Π΅ слоТными.

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

НадСюсь, эта ΡΡ‚Π°Ρ‚ΡŒΡ окаТСтся ΠΊΠΎΠΌΡƒ-Π½ΠΈΠ±ΡƒΠ΄ΡŒ ΠΏΠΎΠ»Π΅Π·Π½ΠΎΠΉ. Π― ΠΊΡ€Π°ΠΉΠ½Π΅ Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΡŽ хотя Π±Ρ‹ ΠΏΠΎΠΏΡ€ΠΎΠ±ΠΎΠ²Π°Ρ‚ΡŒ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ свой язык, нСсмотря Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ придётся Ρ€Π°Π·Π±ΠΈΡ€Π°Ρ‚ΡŒΡΡ Π²ΠΎ мноТСствС Π΄Π΅Ρ‚Π°Π»Π΅ΠΉ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ β€” это ΠΎΠ±ΡƒΡ‡Π°ΡŽΡ‰ΠΈΠΉ, Ρ€Π°Π·Π²ΠΈΠ²Π°ΡŽΡ‰ΠΈΠΉ ΠΈ просто интСрСсный экспСримСнт.

Π’ΠΎΡ‚ ΠΎΠ±Ρ‰ΠΈΠ΅ совСты ΠΎΡ‚ мСня (разумССтся, довольно ΡΡƒΠ±ΡŠΠ΅ΠΊΡ‚ΠΈΠ²Π½Ρ‹Π΅):

Π― Π΄Π΅Π»Π°Π» довольно ΠΌΠ½ΠΎΠ³ΠΎ ошибок ΠΏΠΎ Ρ…ΠΎΠ΄Ρƒ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ, Π½ΠΎ Π±ΠΎΠ»ΡŒΡˆΡƒΡŽ Ρ‡Π°ΡΡ‚ΡŒ ΠΊΠΎΠ΄Π°, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΎΠ½ΠΈ ΠΌΠΎΠ³Π»ΠΈ ΠΏΠΎΠ²Π»ΠΈΡΡ‚ΡŒ, я ΡƒΠΆΠ΅ пСрСписал. Π―Π·Ρ‹ΠΊ сСйчас Π½Π΅ΠΏΠ»ΠΎΡ…ΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΈ Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π·Π²ΠΈΠ²Π°Ρ‚ΡŒΡΡ (Π½Π° ΠΌΠΎΠΌΠ΅Π½Ρ‚ написания ΡΡ‚Π°Ρ‚ΡŒΠΈ Π΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ ΡΠΎΠ±Ρ€Π°Ρ‚ΡŒ Π½Π° Linux ΠΈ с ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌ успСхом Π½Π° macOS, Π½ΠΎ Π½Π΅ Π½Π° Windows).

О Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ввязался Π² ΠΈΡΡ‚ΠΎΡ€ΠΈΡŽ с созданиСм Pinecone, Π½ΠΈ Π² ΠΊΠΎΠ΅ΠΌ случаС Π½Π΅ ТалСю β€” это ΠΎΡ‚Π»ΠΈΡ‡Π½Ρ‹ΠΉ экспСримСнт, ΠΈ ΠΎΠ½ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ начался.

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

11 шагов ΠΊ созданию языка программирования

ΠΊΠ°ΠΊ ΠΏΠΈΡˆΡƒΡ‚ΡΡ языки программирования. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ ΠΊΠ°ΠΊ ΠΏΠΈΡˆΡƒΡ‚ΡΡ языки программирования. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ ΠΊΠ°ΠΊ ΠΏΠΈΡˆΡƒΡ‚ΡΡ языки программирования. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ ΠΊΠ°ΠΊ ΠΏΠΈΡˆΡƒΡ‚ΡΡ языки программирования. Π€ΠΎΡ‚ΠΎ ΠΊΠ°ΠΊ ΠΏΠΈΡˆΡƒΡ‚ΡΡ языки программирования

ΠΊΠ°ΠΊ ΠΏΠΈΡˆΡƒΡ‚ΡΡ языки программирования. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ ΠΊΠ°ΠΊ ΠΏΠΈΡˆΡƒΡ‚ΡΡ языки программирования. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ ΠΊΠ°ΠΊ ΠΏΠΈΡˆΡƒΡ‚ΡΡ языки программирования. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ ΠΊΠ°ΠΊ ΠΏΠΈΡˆΡƒΡ‚ΡΡ языки программирования. Π€ΠΎΡ‚ΠΎ ΠΊΠ°ΠΊ ΠΏΠΈΡˆΡƒΡ‚ΡΡ языки программирования

ΠΊΠ°ΠΊ ΠΏΠΈΡˆΡƒΡ‚ΡΡ языки программирования. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ ΠΊΠ°ΠΊ ΠΏΠΈΡˆΡƒΡ‚ΡΡ языки программирования. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ ΠΊΠ°ΠΊ ΠΏΠΈΡˆΡƒΡ‚ΡΡ языки программирования. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ ΠΊΠ°ΠΊ ΠΏΠΈΡˆΡƒΡ‚ΡΡ языки программирования. Π€ΠΎΡ‚ΠΎ ΠΊΠ°ΠΊ ΠΏΠΈΡˆΡƒΡ‚ΡΡ языки программирования

Π˜Π·ΡƒΡ‡ΠΈΡ‚Π΅ устройство ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π°

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

Π˜Π·ΡƒΡ‡ΠΈΡ‚Π΅ Ρ‚Π΅Ρ€ΠΌΠΈΠ½ΠΎΠ»ΠΎΠ³ΠΈΡŽ

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

ΠžΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚Π΅ΡΡŒ с Π½Π°Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ языка

Π‘Ρ€Π°Π·Ρƒ Ρ€Π΅ΡˆΠΈΡ‚Π΅, Π±ΡƒΠ΄Π΅Ρ‚ Π»ΠΈ ваш язык ΠΈΠΌΠ΅Ρ‚ΡŒ ΡƒΠ·ΠΊΡƒΡŽ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ ΠΈΠ»ΠΈ ваша Ρ†Π΅Π»ΡŒ – ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½Ρ‹ΠΉ инструмСнт, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ окаТСтся вострСбован Π² любой области IT. ΠžΡ†Π΅Π½ΠΈΡ‚Π΅ ΠΎΠ±ΡŠΡ‘ΠΌ Ρ€Π°Π±ΠΎΡ‚Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π²Π°ΠΌ прСдстоит ΠΏΡ€ΠΎΠ΄Π΅Π»Π°Ρ‚ΡŒ, ΠΏΠΎΡΡ‚Π°Π²ΡŒΡ‚Π΅ Ρ†Π΅Π»ΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ Π΄ΠΎΡΡ‚ΠΈΡ‡ΡŒ. Ну ΠΈ самоС Π³Π»Π°Π²Π½ΠΎΠ΅ – ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚Π΅ΡΡŒ: Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΏΠΎΠΊΠΎΡ€ΠΈΡ‚ΡŒ ΠΌΠΈΡ€ ΠΈΠ»ΠΈ просто ΠΏΠΎΠΏΡ€ΠΎΠ±ΠΎΠ²Π°Ρ‚ΡŒ для сСбя Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ Π½ΠΎΠ²ΠΎΠ΅?

ΠžΡ‡Π΅Ρ€Ρ‚ΠΈΡ‚Π΅ основныС ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΠΈ

Π•ΡΡ‚ΡŒ ряд вопросов, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΎΡ‚Π²Π΅Ρ‚ΠΈΡ‚ΡŒ:

Π­Ρ‚ΠΈ вопросы ΠΏΠΎΠΌΠΎΠ³ΡƒΡ‚ ΡΡ„ΠΎΡ€ΠΌΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ±Π»ΠΈΠΊ Π±ΡƒΠ΄ΡƒΡ‰Π΅Π³ΠΎ языка ΠΈ породят ряд Π½ΠΎΠ²Ρ‹Ρ… базисных вопросов, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ‚ΠΎΠΆΠ΅ придётся Π΄Π°Ρ‚ΡŒ ΠΎΡ‚Π²Π΅Ρ‚Ρ‹.

ΠŸΠΎΡΠΊΡΠΏΠ΅Ρ€ΠΈΠΌΠ΅Π½Ρ‚ΠΈΡ€ΡƒΠΉΡ‚Π΅ с синтаксисом

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

Π”Π°ΠΉΡ‚Π΅ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ языку

Π’Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ язык для языка

Новый язык Π½Π°Π΄ΠΎ Π½Π° Ρ‡Ρ‘ΠΌ-Ρ‚ΠΎ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ. Π‘ΡƒΡ€ΠΎΠ²Ρ‹Π΅ Π³ΠΈΠΊΠΈ ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ язык ассСмблСра ΠΈΠ»ΠΈ ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹Π΅ ΠΊΠΎΠ΄Ρ‹, Π½ΠΎ Π² XXI Π²Π΅ΠΊΠ΅ ΠΊΡƒΠ΄Π° большС смысла ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π½Π° высокоуровнСвыС языки: Pascal, C, C++, Swift (ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΠ΅ΠΌΡ‹Π΅ языки) для ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚ΠΈΡ€ΡƒΠ΅ΠΌΠΎΠ³ΠΎ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π°; Java, JavaScript, Python, Ruby (ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚ΠΈΡ€ΡƒΠ΅ΠΌΡ‹Π΅ языки) β€” для ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΠ΅ΠΌΠΎΠ³ΠΎ. Π’Π°ΠΊΠΈΠ΅ ΠΏΠ°Ρ€Ρ‹ обСспСчат ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠΎΡ‚Π΅Ρ€ΠΈ Π² ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ.

ΠŸΠΎΡ€Π°Π±ΠΎΡ‚Π°ΠΉΡ‚Π΅ Π½Π°Π΄ лСксСром ΠΈ парсСром

ЛСксСр – инструмСнт, ΠΎΡ‚Π²Π΅Ρ‡Π°ΡŽΡ‰ΠΈΠΉ Π·Π° лСксичСский Π°Π½Π°Π»ΠΈΠ·, разбиСния ΠΊΠΎΠ΄Π° Π½Π° составныС Π΅Π΄ΠΈΠ½ΠΈΡ†Ρ‹, Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹Π΅ Ρ‚ΠΎΠΊΠ΅Π½Π°ΠΌΠΈ. ΠŸΠ°Ρ€ΡΠ΅Ρ€, ΠΎΡ‚Π²Π΅Ρ‡Π°ΡŽΡ‰ΠΈΠΉ Π·Π° синтаксичСский Π°Π½Π°Π»ΠΈΠ·, ΠΎΡ€Π³Π°Π½ΠΈΠ·ΡƒΠ΅Ρ‚ ΠΈΠ΅Ρ€Π°Ρ€Ρ…ΠΈΡŽ ΠΈΠ· Ρ‚ΠΎΠΊΠ΅Π½ΠΎΠ², опрСдСляя порядок ΠΈΡ… взаимодСйствия. ГрафичСски это ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

ΠΊΠ°ΠΊ ΠΏΠΈΡˆΡƒΡ‚ΡΡ языки программирования. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ ΠΊΠ°ΠΊ ΠΏΠΈΡˆΡƒΡ‚ΡΡ языки программирования. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ ΠΊΠ°ΠΊ ΠΏΠΈΡˆΡƒΡ‚ΡΡ языки программирования. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ ΠΊΠ°ΠΊ ΠΏΠΈΡˆΡƒΡ‚ΡΡ языки программирования. Π€ΠΎΡ‚ΠΎ ΠΊΠ°ΠΊ ΠΏΠΈΡˆΡƒΡ‚ΡΡ языки программирования

ΠΊΠ°ΠΊ ΠΏΠΈΡˆΡƒΡ‚ΡΡ языки программирования. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ ΠΊΠ°ΠΊ ΠΏΠΈΡˆΡƒΡ‚ΡΡ языки программирования. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ ΠΊΠ°ΠΊ ΠΏΠΈΡˆΡƒΡ‚ΡΡ языки программирования. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ ΠΊΠ°ΠΊ ΠΏΠΈΡˆΡƒΡ‚ΡΡ языки программирования. Π€ΠΎΡ‚ΠΎ ΠΊΠ°ΠΊ ΠΏΠΈΡˆΡƒΡ‚ΡΡ языки программирования

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

Π‘ΠΎΠ·Π΄Π°ΠΉΡ‚Π΅ ΡΡ‚Π°Π½Π΄Π°Ρ€Ρ‚Π½ΡƒΡŽ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ

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

ΠΠ°ΠΏΠΈΡˆΠΈΡ‚Π΅ ΡƒΠΉΠΌΡƒ тСстов

Π‘ΠΎΠ·Π΄Π°Ρ‚ΡŒ язык – Π½Π΅ Ρ‚Π°ΠΊ слоТно, ΠΊΠ°ΠΊ Π·Π°ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Π΅Π³ΠΎ Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ. ΠžΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚ΠΎΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡ‚ΡŒ всСх ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠΎΠ² языка Π²Π°ΠΌ ΠΏΠΎΠΌΠΎΠ³ΡƒΡ‚ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ тСсты, ΠΎΡ‡Π΅Ρ€Ρ‡ΠΈΠ²Π°ΡŽΡ‰ΠΈΠ΅ Π³Ρ€Π°Π½ΠΈΡ†Ρ‹ Β«ΠΌΠΎΠΆΠ½ΠΎΒ» ΠΈ «нСльзя» ΠΈ Π½Π΅ Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‰ΠΈΠ΅ ΠΏΡ€ΠΈ этом ΠΈΡΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… ситуаций, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ поставят возмоТности языка Π² Ρ‚ΡƒΠΏΠΈΠΊ.

ΠžΠΏΡƒΠ±Π»ΠΈΠΊΡƒΠΉΡ‚Π΅ язык

Когда язык Π±ΡƒΠ΄Π΅Ρ‚ Π³ΠΎΡ‚ΠΎΠ² – Π½Π΅ смСйтС ΠΏΡ€ΡΡ‚Π°Ρ‚ΡŒ Π΅Π³ΠΎ Π² стол. Π”Π°ΠΆΠ΅ Ссли ΠΌΠΈΡ€ΠΎΠ²ΠΎΠ΅ господство – Π½Π΅ ваша Ρ†Π΅Π»ΡŒ, публикация ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΠ±Ρ€Π°Ρ‚ΡŒ ΠΎΡ‚Π·Ρ‹Π²Ρ‹, Π½Π°ΠΉΡ‚ΠΈ Π΅Π΄ΠΈΠ½ΠΎΠΌΡ‹ΡˆΠ»Π΅Π½Π½ΠΈΠΊΠΎΠ² для Π΄Π°Π»ΡŒΠ½Π΅ΠΉΡˆΠΈΡ… ΡƒΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½ΡΡ‚Π²ΠΎΠ²Π°Π½ΠΈΠΉ языка. Ну ΠΈ Π² ΠΊΠΎΠ½Ρ†Π΅ ΠΊΠΎΠ½Ρ†ΠΎΠ², этим Π²Ρ‹ сдСлаСтС Π»ΠΈΡ‡Π½Ρ‹ΠΉ Π²ΠΊΠ»Π°Π΄ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅.

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

ΠΊΠ°ΠΊ ΠΏΠΈΡˆΡƒΡ‚ΡΡ языки программирования. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ ΠΊΠ°ΠΊ ΠΏΠΈΡˆΡƒΡ‚ΡΡ языки программирования. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ ΠΊΠ°ΠΊ ΠΏΠΈΡˆΡƒΡ‚ΡΡ языки программирования. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ ΠΊΠ°ΠΊ ΠΏΠΈΡˆΡƒΡ‚ΡΡ языки программирования. Π€ΠΎΡ‚ΠΎ ΠΊΠ°ΠΊ ΠΏΠΈΡˆΡƒΡ‚ΡΡ языки программирования

Π˜Π·ΡƒΡ‡ΠΈΡ‚Π΅ устройство ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π°

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

Π˜Π·ΡƒΡ‡ΠΈΡ‚Π΅ Ρ‚Π΅Ρ€ΠΌΠΈΠ½ΠΎΠ»ΠΎΠ³ΠΈΡŽ

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

ΠžΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚Π΅ΡΡŒ с Π½Π°Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ языка

Π‘Ρ€Π°Π·Ρƒ Ρ€Π΅ΡˆΠΈΡ‚Π΅, Π±ΡƒΠ΄Π΅Ρ‚ Π»ΠΈ ваш язык ΠΈΠΌΠ΅Ρ‚ΡŒ ΡƒΠ·ΠΊΡƒΡŽ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ ΠΈΠ»ΠΈ ваша Ρ†Π΅Π»ΡŒ – ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½Ρ‹ΠΉ инструмСнт, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ окаТСтся вострСбован Π² любой области IT. ΠžΡ†Π΅Π½ΠΈΡ‚Π΅ ΠΎΠ±ΡŠΡ‘ΠΌ Ρ€Π°Π±ΠΎΡ‚Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π²Π°ΠΌ прСдстоит ΠΏΡ€ΠΎΠ΄Π΅Π»Π°Ρ‚ΡŒ, ΠΏΠΎΡΡ‚Π°Π²ΡŒΡ‚Π΅ Ρ†Π΅Π»ΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ Π΄ΠΎΡΡ‚ΠΈΡ‡ΡŒ. Ну ΠΈ самоС Π³Π»Π°Π²Π½ΠΎΠ΅ – ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚Π΅ΡΡŒ: Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΏΠΎΠΊΠΎΡ€ΠΈΡ‚ΡŒ ΠΌΠΈΡ€ ΠΈΠ»ΠΈ просто ΠΏΠΎΠΏΡ€ΠΎΠ±ΠΎΠ²Π°Ρ‚ΡŒ для сСбя Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ Π½ΠΎΠ²ΠΎΠ΅?

ΠžΡ‡Π΅Ρ€Ρ‚ΠΈΡ‚Π΅ основныС ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΠΈ

Π•ΡΡ‚ΡŒ ряд вопросов, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΎΡ‚Π²Π΅Ρ‚ΠΈΡ‚ΡŒ:

Π­Ρ‚ΠΈ вопросы ΠΏΠΎΠΌΠΎΠ³ΡƒΡ‚ ΡΡ„ΠΎΡ€ΠΌΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ±Π»ΠΈΠΊ Π±ΡƒΠ΄ΡƒΡ‰Π΅Π³ΠΎ языка ΠΈ породят ряд Π½ΠΎΠ²Ρ‹Ρ… базисных вопросов, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ‚ΠΎΠΆΠ΅ придётся Π΄Π°Ρ‚ΡŒ ΠΎΡ‚Π²Π΅Ρ‚Ρ‹.

ΠŸΠΎΡΠΊΡΠΏΠ΅Ρ€ΠΈΠΌΠ΅Π½Ρ‚ΠΈΡ€ΡƒΠΉΡ‚Π΅ с синтаксисом

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

Π”Π°ΠΉΡ‚Π΅ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ языку

Π’Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ язык для языка

Новый язык Π½Π°Π΄ΠΎ Π½Π° Ρ‡Ρ‘ΠΌ-Ρ‚ΠΎ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ. Π‘ΡƒΡ€ΠΎΠ²Ρ‹Π΅ Π³ΠΈΠΊΠΈ ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ язык ассСмблСра ΠΈΠ»ΠΈ ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹Π΅ ΠΊΠΎΠ΄Ρ‹, Π½ΠΎ Π² XXI Π²Π΅ΠΊΠ΅ ΠΊΡƒΠ΄Π° большС смысла ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π½Π° высокоуровнСвыС языки: Pascal, C, C++, Swift (ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΠ΅ΠΌΡ‹Π΅ языки) для ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚ΠΈΡ€ΡƒΠ΅ΠΌΠΎΠ³ΠΎ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π°; Java, JavaScript, Python, Ruby (ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚ΠΈΡ€ΡƒΠ΅ΠΌΡ‹Π΅ языки) β€” для ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΠ΅ΠΌΠΎΠ³ΠΎ. Π’Π°ΠΊΠΈΠ΅ ΠΏΠ°Ρ€Ρ‹ обСспСчат ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠΎΡ‚Π΅Ρ€ΠΈ Π² ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ.

ΠŸΠΎΡ€Π°Π±ΠΎΡ‚Π°ΠΉΡ‚Π΅ Π½Π°Π΄ лСксСром ΠΈ парсСром

ЛСксСр – инструмСнт, ΠΎΡ‚Π²Π΅Ρ‡Π°ΡŽΡ‰ΠΈΠΉ Π·Π° лСксичСский Π°Π½Π°Π»ΠΈΠ·, разбиСния ΠΊΠΎΠ΄Π° Π½Π° составныС Π΅Π΄ΠΈΠ½ΠΈΡ†Ρ‹, Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹Π΅ Ρ‚ΠΎΠΊΠ΅Π½Π°ΠΌΠΈ. ΠŸΠ°Ρ€ΡΠ΅Ρ€, ΠΎΡ‚Π²Π΅Ρ‡Π°ΡŽΡ‰ΠΈΠΉ Π·Π° синтаксичСский Π°Π½Π°Π»ΠΈΠ·, ΠΎΡ€Π³Π°Π½ΠΈΠ·ΡƒΠ΅Ρ‚ ΠΈΠ΅Ρ€Π°Ρ€Ρ…ΠΈΡŽ ΠΈΠ· Ρ‚ΠΎΠΊΠ΅Π½ΠΎΠ², опрСдСляя порядок ΠΈΡ… взаимодСйствия. ГрафичСски это ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

ΠΊΠ°ΠΊ ΠΏΠΈΡˆΡƒΡ‚ΡΡ языки программирования. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ ΠΊΠ°ΠΊ ΠΏΠΈΡˆΡƒΡ‚ΡΡ языки программирования. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ ΠΊΠ°ΠΊ ΠΏΠΈΡˆΡƒΡ‚ΡΡ языки программирования. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ ΠΊΠ°ΠΊ ΠΏΠΈΡˆΡƒΡ‚ΡΡ языки программирования. Π€ΠΎΡ‚ΠΎ ΠΊΠ°ΠΊ ΠΏΠΈΡˆΡƒΡ‚ΡΡ языки программирования

ΠΊΠ°ΠΊ ΠΏΠΈΡˆΡƒΡ‚ΡΡ языки программирования. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ ΠΊΠ°ΠΊ ΠΏΠΈΡˆΡƒΡ‚ΡΡ языки программирования. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ ΠΊΠ°ΠΊ ΠΏΠΈΡˆΡƒΡ‚ΡΡ языки программирования. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ ΠΊΠ°ΠΊ ΠΏΠΈΡˆΡƒΡ‚ΡΡ языки программирования. Π€ΠΎΡ‚ΠΎ ΠΊΠ°ΠΊ ΠΏΠΈΡˆΡƒΡ‚ΡΡ языки программирования

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

Π‘ΠΎΠ·Π΄Π°ΠΉΡ‚Π΅ ΡΡ‚Π°Π½Π΄Π°Ρ€Ρ‚Π½ΡƒΡŽ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ

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

ΠΠ°ΠΏΠΈΡˆΠΈΡ‚Π΅ ΡƒΠΉΠΌΡƒ тСстов

Π‘ΠΎΠ·Π΄Π°Ρ‚ΡŒ язык – Π½Π΅ Ρ‚Π°ΠΊ слоТно, ΠΊΠ°ΠΊ Π·Π°ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Π΅Π³ΠΎ Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ. ΠžΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚ΠΎΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡ‚ΡŒ всСх ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠΎΠ² языка Π²Π°ΠΌ ΠΏΠΎΠΌΠΎΠ³ΡƒΡ‚ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ тСсты, ΠΎΡ‡Π΅Ρ€Ρ‡ΠΈΠ²Π°ΡŽΡ‰ΠΈΠ΅ Π³Ρ€Π°Π½ΠΈΡ†Ρ‹ Β«ΠΌΠΎΠΆΠ½ΠΎΒ» ΠΈ «нСльзя» ΠΈ Π½Π΅ Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‰ΠΈΠ΅ ΠΏΡ€ΠΈ этом ΠΈΡΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… ситуаций, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ поставят возмоТности языка Π² Ρ‚ΡƒΠΏΠΈΠΊ.

ΠžΠΏΡƒΠ±Π»ΠΈΠΊΡƒΠΉΡ‚Π΅ язык

Когда язык Π±ΡƒΠ΄Π΅Ρ‚ Π³ΠΎΡ‚ΠΎΠ² – Π½Π΅ смСйтС ΠΏΡ€ΡΡ‚Π°Ρ‚ΡŒ Π΅Π³ΠΎ Π² стол. Π”Π°ΠΆΠ΅ Ссли ΠΌΠΈΡ€ΠΎΠ²ΠΎΠ΅ господство – Π½Π΅ ваша Ρ†Π΅Π»ΡŒ, публикация ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΠ±Ρ€Π°Ρ‚ΡŒ ΠΎΡ‚Π·Ρ‹Π²Ρ‹, Π½Π°ΠΉΡ‚ΠΈ Π΅Π΄ΠΈΠ½ΠΎΠΌΡ‹ΡˆΠ»Π΅Π½Π½ΠΈΠΊΠΎΠ² для Π΄Π°Π»ΡŒΠ½Π΅ΠΉΡˆΠΈΡ… ΡƒΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½ΡΡ‚Π²ΠΎΠ²Π°Π½ΠΈΠΉ языка. Ну ΠΈ Π² ΠΊΠΎΠ½Ρ†Π΅ ΠΊΠΎΠ½Ρ†ΠΎΠ², этим Π²Ρ‹ сдСлаСтС Π»ΠΈΡ‡Π½Ρ‹ΠΉ Π²ΠΊΠ»Π°Π΄ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅.

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

ПишСм свой язык программирования, Ρ‡Π°ΡΡ‚ΡŒ 1: пишСм ΡΠ·Ρ‹ΠΊΠΎΠ²ΡƒΡŽ Π’Πœ

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

Π”ΠΎΠ±Ρ€ΠΎΠ³ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ суток всСм хабрачитатСлям!

Π˜Ρ‚Π°ΠΊ, ΠΏΠΎΠΆΠ°Π»ΡƒΠΉ стоит ΡΠΊΠ°Π·Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ Ρ†Π΅Π»ΡŒΡŽ ΠΌΠΎΠ΅ΠΉ Ρ€Π°Π±ΠΎΡ‚Ρ‹, Π½Π° основС ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π±ΡƒΠ΄Π΅Ρ‚ написан ряд статССк Π±Ρ‹Π»ΠΎ ΠΏΡ€ΠΎΠΉΡ‚ΠΈ вСсь ΠΏΡƒΡ‚ΡŒ создания ΠΏΠΎΠ»Π½ΠΎΡ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ ЯП самому с 0 ΠΈ Π·Π°Ρ‚Π΅ΠΌ ΠΏΠΎΠ΄Π΅Π»ΠΈΡ‚ΡŒΡΡ своими знаниями, Π½Π°Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°ΠΌΠΈ ΠΈ ΠΎΠΏΡ‹Ρ‚ΠΎΠΌ с ΠΈΠ½Ρ‚Π΅Ρ€Π΅ΡΡƒΡŽΡ‰ΠΈΠΌΠΈΡΡ этим людьми.

Π― Π±ΡƒΠ΄Ρƒ ΠΎΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒ созданиС языка, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ описал Ρ€Π°Π½Π΅Π΅ Ρ‚ΡƒΡ‚.

Он заинтСрСсовал ΠΌΠ½ΠΎΠ³ΠΈΡ… ΠΈ Π²Ρ‹Π·Π²Π°Π» Π±ΡƒΡ€Π½ΡƒΡŽ Π΄ΠΈΡΠΊΡƒΡΡΠΈΡŽ Π² коммСнтариях. Π‘Π»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ β€” Ρ‚Π΅ΠΌΠ° интСрСсна ΠΌΠ½ΠΎΠ³ΠΈΠΌ.

Π”ΡƒΠΌΠ°ΡŽ, Ρ‡Ρ‚ΠΎ сразу стоит Π²Ρ‹Π»ΠΎΠΆΠΈΡ‚ΡŒ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅:

Π‘Π°ΠΉΡ‚ (Π±ΡƒΠ΄Π΅Ρ‚ Π·Π°ΠΏΠΎΠ»Π½Π΅Π½ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠ΅ΠΉ Ρ‡ΡƒΡ‚ΡŒ ΠΏΠΎΠ·ΠΆΠ΅).
Π Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ

Π§Ρ‚ΠΎΠ±Ρ‹ самому ΠΏΠΎΡ‚Ρ€ΠΎΠ³Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ ΠΈ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ всС Π² дСйствии, Π»ΡƒΡ‡ΡˆΠ΅ ΡΠΊΠ°Ρ‡Π°Ρ‚ΡŒ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ ΠΈ Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ всС ΠΈΠ· ΠΏΠ°ΠΏΠΊΠΈ bin. Π’ Ρ€Π΅Π»ΠΈΠ· я Π½Π΅ ΡΠΏΠ΅ΡˆΡƒ Π²Ρ‹ΠΊΠ»Π°Π΄Ρ‹Π²Π°Ρ‚ΡŒ послСдниС вСрсии языка ΠΈ срСды выполнСния, Ρ‚.ΠΊ. ΠΌΠ½Π΅ ΠΏΠΎΡ€ΠΎΠΉ Π±Ρ‹Π²Π°Π΅Ρ‚ просто лСнь это Π΄Π΅Π»Π°Ρ‚ΡŒ.

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

Π˜Ρ‚Π°ΠΊ, Π½Π°Ρ‡Π½Ρƒ ΠΏΠΎΠΆΠ°Π»ΡƒΠΉ я своё повСствованиС.

Π‘Ρ‚Π°Π²ΠΈΠΌ Ρ†Π΅Π»ΠΈ

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

ΠšΠ»ΡŽΡ‡Π΅Π²Ρ‹Π΅ ΠΌΠΎΠΌΠ΅Π½Ρ‚Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ опрСдСляли Π΄Π°Π»ΡŒΠ½Π΅ΠΉΡˆΡƒΡŽ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ ΠΌΠΎΠ΅ΠΉ Π’Πœ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅:

Π‘Ρ€Π°Π·Ρƒ скаТу, Ρ‡Ρ‚ΠΎ Π’Πœ я Π½Π°Π·Π²Π°Π» максимально краснорСчиво β€” SVM (Stack-based Virtual Machine).

НачнСм, ΠΏΠΎΠΆΠ°Π»ΡƒΠΉ, с Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ класса ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ

ΠŸΠ΅Ρ€Π΅Π΄ Ρ‚Π΅ΠΌ, ΠΊΠ°ΠΊ Π½Π°Ρ‡Π°Ρ‚ΡŒ ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΊΠΎΠ΄ класса, я Ρ€Π΅ΡˆΠΈΠ» сразу Π·Π°ΠΊΠΈΠ½ΡƒΡ‚ΡŒ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρƒ <$H+>Π² Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ модуля для Π±ΠΎΠ»Π΅Π΅ Π³ΠΈΠ±ΠΊΠΎΠΉ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ строк Π±ΡƒΠ΄ΡƒΡ‰ΠΈΠΌ языком.

П.с. для Ρ‚Π΅Ρ…, ΠΊΡ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π½Π΅ Π² курсС, Π² Ρ‡Π΅ΠΌ Ρ€Π°Π·Π½ΠΈΡ†Π° ΠΌΠ΅ΠΆΠ΄Ρƒ H- ΠΈ H+ Ρ€Π΅ΠΆΠΈΠΌΠΎΠΌ FPC.

ΠŸΡ€ΠΈ сборкС ΠΊΠΎΠ΄Π° Π² Ρ€Π΅ΠΆΠΈΠΌΠ΅ H- строки Π±ΡƒΠ΄ΡƒΡ‚ прСдставлСны Π² Π²ΠΈΠ΄Π΅ массива символов. ΠŸΡ€ΠΈ H+ β€” Π² Π²ΠΈΠ΄Π΅ указатСля Π½Π° кусок памяти. Π’ ΠΏΠ΅Ρ€Π²ΠΎΠΌ случаС строки Π±ΡƒΠ΄ΡƒΡ‚ ΠΈΠ·Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎ фиксированной Π΄Π»ΠΈΠ½Ρ‹ ΠΈ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Ρ‹ ΠΏΠΎ Π΄Π΅Ρ„ΠΎΠ»Ρ‚Ρƒ 256 символами. Π’ΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠΌ случаС β€” строки Π±ΡƒΠ΄ΡƒΡ‚ динамичСски Ρ€Π°ΡΡˆΠΈΡ€ΡΠ΅ΠΌΡ‹ΠΌΠΈ ΠΈ Π² Π½ΠΈΡ… ΠΌΠΎΠΆΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ Π·Π°ΠΏΠΈΡ…Π½ΡƒΡ‚ΡŒ Π³ΠΎΡ€Π°Π·Π΄ΠΎ большС символов. Π‘ΡƒΠ΄ΡƒΡ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΠΌΠ΅Π΄Π»Π΅Π½Π½Π΅Π΅, Π·Π°Ρ‚ΠΎ Π±ΠΎΠ»Π΅Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎ. ΠŸΡ€ΠΈ H+ ΠΌΠΎΠΆΠ½ΠΎ Ρ‚Π°ΠΊΠΆΠ΅ ΠΎΠ±ΡŠΡΠ²Π»ΡΡ‚ΡŒ строки ΠΊΠ°ΠΊ массив символов, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Ρ‚Π°ΠΊΠΈΠΌ Π²ΠΎΡ‚ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

Π˜Ρ‚Π°ΠΊ, для Π½Π°Ρ‡Π°Π»Π° объявим Enum Ρ‚ΠΈΠΏ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±ΡƒΠ΄Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠ°ΠΊ Π½Π΅ΠΊΠΈΠΉ Ρ„Π»Π°ΠΆΠΎΠΊ, для опрСдСлСния Ρ‚ΠΈΠΏΠ° Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΠΎ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŽ:

Π”Π°Π»Π΅Π΅ опишСм ΠΎΡΠ½ΠΎΠ²Π½ΡƒΡŽ структуру нашСго Ρ‚ΠΈΠΏΠ° ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΈ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹:

Класс Π½ΠΈ ΠΎΡ‚ Ρ‡Π΅Π³ΠΎ Π½Π΅ наслСдуСтся, поэтому inherited Π²Ρ‹Π·ΠΎΠ²Ρ‹ Π² конструкторС ΠΈ дСструкторС ΠΌΠΎΠΆΠ½ΠΎ Π½Π΅ Π΄Π΅Π»Π°Ρ‚ΡŒ. УдСлю Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π΅ inline. Π’ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ Ρ„Π°ΠΉΠ»Π° Π»ΡƒΡ‡ΡˆΠ΅ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ <$inline on>, Ρ‡Ρ‚ΠΎΠ± навСрняка. Π•Ρ‘ Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΠ΅ использованиС Π² Π’Πœ довольно ΠΎΡ‰ΡƒΡ‚ΠΈΠΌΠΎ повысило ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ (ΠΌΠ± Π³Π΄Π΅-Ρ‚ΠΎ Π°ΠΆ Π½Π° 15-20%!). Она Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ компилятору, Ρ‡Ρ‚ΠΎ Ρ‚Π΅Π»ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Π»ΡƒΡ‡ΡˆΠ΅ Π²ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ Π½Π° мСсто Π΅Π³ΠΎ Π²Ρ‹Π·ΠΎΠ²Π°. Π’Ρ‹Ρ…ΠΎΠ΄Π½ΠΎΠΉ ΠΊΠΎΠ΄ Π±ΡƒΠ΄Π΅Ρ‚ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ большС Π² ΠΈΡ‚ΠΎΠ³Π΅, Π½ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π±ΡƒΠ΄Π΅Ρ‚ быстрСС. Π’ Π΄Π°Π½Π½ΠΎΠΌ случаС, использованиС inline цСлСсообразно.

Ок, Π·Π°ΠΏΠΈΠ»ΠΈΠ»ΠΈ ΠΌΡ‹ Π½Π° этом этапС основу нашСго класса. Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π½ΡƒΠΆΠ½ΠΎ ΠΎΠΏΠΈΡΠ°Ρ‚ΡŒ ряд сСттСров ΠΈ Π³Π΅Ρ‚Ρ‚Π΅Ρ€ΠΎΠ² (setter & getter) Ρƒ нашСго класса.

Π—Π°Π΄Π°Ρ‡Π° Π² Ρ‡Π΅ΠΌ β€” Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΏΠ°Ρ€Ρƒ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ позволят Π·Π°ΠΏΠΈΡ…Π½ΡƒΡ‚ΡŒ ΠΈ Π² дальнСйшСм ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎ значСния ΠΈΠ· нашСго класса.

Для Π½Π°Ρ‡Π°Π»Π° разбСрСмся с присвоСниСм значСния для нашСго класса. ΠŸΠ΅Ρ€Π²Ρ‹ΠΌ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½Π½Ρ‹ΠΉ сСттСр, Π½Ρƒ Π° дальшС, для ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ² Π΄Π°Π½Π½Ρ‹Ρ…:

Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΠΎΠΆΠ½ΠΎ ΠΈ для ΠΏΠ°Ρ€Ρ‹ Π³Π΅Ρ‚Ρ‚Π΅Ρ€ΠΎΠ² Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΊΠΎΠ΄:

Ок, Π·Π°ΠΌΠ΅Ρ‡Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ, послС Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Π²Ρ‹ просидСли Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ врСмя пялясь Π² IDE ΠΈ с энтузиазмом пСчатая ΠΊΠΎΠ΄ сСттСров ΠΈ Π³Π΅Ρ‚Ρ‚Π΅Ρ€ΠΎΠ², ΠΌΡ‹ стоим ΠΏΠ΅Ρ€Π΅Π΄ Π·Π°Π΄Π°Ρ‡Π΅ΠΉ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ нашим Ρ‚ΠΈΠΏΠΎΠΌ матСматичСских ΠΈ логичСских ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ. Π’ качСствС ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° я ΠΏΡ€ΠΈΠ²Π΅Π΄Ρƒ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ слоТСния:

ВсС просто. Аналогичным ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΈ дальнСйшиС ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ ΠΈ Π²ΠΎΡ‚ наш класс Π³ΠΎΡ‚ΠΎΠ².
Для массивов Π΅Ρ‰Ρ‘ ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎ Π½ΡƒΠΆΠ½Ρ‹ ΠΏΠ°Ρ€Π° ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ², ΠΏΡ€ΠΈΠΌΠ΅Ρ€ получСния элСмСнта ΠΏΠΎ индСксу:

Π‘ΡƒΠΏΠ΅Ρ€. Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π²ΠΈΠ³Π°Ρ‚ΡŒΡΡ дальшС.

Π Π΅Π°Π»ΠΈΠ·ΡƒΠ΅ΠΌ стСк

Бпустя врСмя я ΠΏΡ€ΠΈΡˆΠ΅Π» ΠΊ Ρ‚Π°ΠΊΠΈΠΌ мыслям. Π‘Ρ‚Π΅ΠΊ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ ΠΈ статичным (для быстродСйствия) ΠΈ Π΄ΠΈΠ½Π°ΠΌΠΈΡ‡Π½Ρ‹ΠΌ (для гибкости) ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ.

ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ стСк Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ Π±Π»ΠΎΡ‡Π½ΠΎ. Π’.Π΅. ΠΊΠ°ΠΊ это Π΄ΠΎΠ»ΠΆΠ½ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ β€” ΠΈΠ·Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎ массив стСка ΠΈΠΌΠ΅Π΅Ρ‚ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΉ Ρ€Π°Π·ΠΌΠ΅Ρ€ (я Ρ€Π΅ΡˆΠΈΠ» ΠΏΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Ρ€Π°Π·ΠΌΠ΅Ρ€ Π±Π»ΠΎΠΊΠ° Π² 256 элСмСнтов, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π±Ρ‹Π»ΠΎ красиво ΠΈ Π½Π΅ ΠΌΠ°Π»ΠΎ). БоотвСтствСнно, Π² ΠΊΠΎΠΌΠΏΠ»Π΅ΠΊΡ‚Π΅ с массивом ΠΈΠ΄Π΅Ρ‚ счСтчик, ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΉ Π½Π° Ρ‚Π΅ΠΊΡƒΡ‰ΡƒΡŽ Π²Π΅Ρ€ΡˆΠΈΠ½Ρƒ стСка. ΠŸΠ΅Ρ€Π΅Π²Ρ‹Π΄Π΅Π»Π΅Π½ΠΈΠ΅ памяти β€” это лишняя долгая опСрация, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ Ρ€Π΅ΠΆΠ΅. Если Π² стСк Π±ΡƒΠ΄Π΅Ρ‚ Π»ΠΎΠΆΠΈΡ‚ΡŒΡΡ большС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ, Ρ‚ΠΎ Π΅Π³ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΌΠΎΠΆΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ всСгда Ρ€Π°ΡΡˆΠΈΡ€ΠΈΡ‚ΡŒ Π½Π° Ρ€Π°Π·ΠΌΠ΅Ρ€ Π΅Ρ‰Ρ‘ ΠΎΠ΄Π½ΠΎΠ³ΠΎ Π±Π»ΠΎΠΊΠ°.

ΠŸΡ€ΠΈΠ²ΠΎΠΆΡƒ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ стСка Ρ†Π΅Π»ΠΈΠΊΠΎΠΌ:

Π’ΠΎ внСшниС ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ Π’Πœ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° стСк, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ½ΠΈ ΠΌΠΎΠ³Π»ΠΈ Π²Π·ΡΡ‚ΡŒ ΠΎΡ‚Ρ‚ΡƒΠ΄Π° Π½ΡƒΠΆΠ½Ρ‹Π΅ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹. Π£ΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° ΠΏΠΎΡ‚ΠΎΠΊ Π’Πœ Π΄ΠΎΠ±Π°Π²ΠΈΠ» ΠΏΠΎΠ·ΠΆΠ΅, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Ρ‹Π²Π°Ρ‚ΡŒ callback Π²Ρ‹Π·ΠΎΠ²Ρ‹ ΠΈΠ· Π²Π½Π΅ΡˆΠ½ΠΈΡ… ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² Π΄Π° ΠΈ Π² ΠΎΠ±Ρ‰Π΅ΠΌ, для ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ большСй власти Π½Π°Π΄ Π’Πœ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌ.

Π˜Ρ‚Π°ΠΊ, ΠΊΠ°ΠΊ с Ρ‚Π΅ΠΌ, ΠΊΠ°ΠΊ устроСн стСк Π²Ρ‹ ознакомились. Π’Π°ΠΊΠΈΠΌ ΠΆΠ΅ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ устроСн callback стСк, для простоты ΠΈ удобства call & return ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ ΠΈ стСк сборщика мусора. ЕдинствСнноС β€” Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Ρ€Π°Π·ΠΌΠ΅Ρ€Ρ‹ Π±Π»ΠΎΠΊΠΎΠ².

ΠŸΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΈΠΌ ΠΎ мусорС

Π•Π³ΠΎ, ΠΊΠ°ΠΊ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ ΠΌΠ½ΠΎΠ³ΠΎ, ΠΎΡ‡Π΅Π½ΡŒ ΠΌΠ½ΠΎΠ³ΠΎ. И с Π½ΠΈΠΌ Π½ΡƒΠΆΠ½ΠΎ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ Π΄Π΅Π»Π°Ρ‚ΡŒ.

ΠŸΠ΅Ρ€Π²Ρ‹ΠΌ Π΄Π΅Π»ΠΎΠΌ Ρ…ΠΎΡ‡Ρƒ Ρ€Π°ΡΡΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΎ Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊ устроСны сборщики мусора Π² Π΄Ρ€ΡƒΠ³ΠΈΡ… языках, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π² Lua, Ruby, Java, Perl, PHP ΠΈ Ρ‚.Π΄. Они Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ ΠΏΠΎ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΡƒ подсчСта ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ Π½Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Π² памяти.

Π’.Π΅. Π²ΠΎΡ‚ Π²Ρ‹Π΄Π΅Π»ΠΈΠ»ΠΈ ΠΌΡ‹ ΠΏΠ°ΠΌΡΡ‚ΡŒ ΠΏΠΎΠ΄ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ, Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎ β€” ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ сразу помСстили Π² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ/массив/ΠΊΡƒΠ΄Π°-Ρ‚ΠΎ Π΅Ρ‰Ρ‘. Π‘Π±ΠΎΡ€Ρ‰ΠΈΠΊ мусора срСды выполнСния сразу ΠΆΠ΅ добавляСт этот ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ сСбС с список Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Ρ… мусорных ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ². Π’ Ρ„ΠΎΠ½Π΅, сборщик мусора постоянно ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΡ‚ всС ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅, массивы ΠΈ Ρ‚.Π΄. Если Ρ‚Π°ΠΌ Π½Π΅ оказываСтся указатСля Π½Π° Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ ΠΈΠ· списка Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΠ³ΠΎ мусора β€” Π·Π½Π°Ρ‡ΠΈΡ‚ это мусор ΠΈ ΠΏΠ°ΠΌΡΡ‚ΡŒ ΠΈΠ· ΠΏΠΎΠ΄ Π½Π΅Π³ΠΎ Π½ΡƒΠΆΠ½ΠΎ ΡƒΠ±Ρ€Π°Ρ‚ΡŒ.

Π― Ρ€Π΅ΡˆΠΈΠ» Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ свой вСлосипСд. МнС Π±ΠΎΠ»Π΅Π΅ ΠΏΡ€ΠΈΠ²Ρ‹Ρ‡Π½Π° Ρ€Π°Π±ΠΎΡ‚Π° с ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ ΠΏΠΎ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΡƒ Вараса Π‘ΡƒΠ»ΡŒΠ±Ρ‹. Π― тСбя ΠΏΠΎΡ€ΠΎΠ΄ΠΈΠ» β€” я тСбя ΠΈ ΡƒΠ±ΡŒΡŽ, ΠΏΠΎΠ΄Ρ€Π°Π·ΡƒΠΌΠ΅Π²Π°ΡŽ я, ΠΊΠΎΠ³Π΄Π° Π²Ρ‹Π·Ρ‹Π²Π°ΡŽ ΠΎΡ‡Π΅Ρ€Π΅Π΄Π½ΠΎΠΉ Free Ρƒ ΠΎΡ‡Π΅Ρ€Π΅Π΄Π½ΠΎΠ³ΠΎ класса. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ сборщик мусора Ρƒ ΠΌΠΎΠ΅ΠΉ Π’Πœ полуавтоматичСский. Π’.Π΅. Π΅Π³ΠΎ Π½ΡƒΠΆΠ½ΠΎ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ Π² Ρ€ΡƒΡ‡Π½ΠΎΠΌ Ρ€Π΅ΠΆΠΈΠΌΠ΅ ΠΈ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с Π½ΠΈΠΌ соотвСтствСнно. Π’ Π΅Π³ΠΎ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ Π΄ΠΎΠ±Π°Π²Π»ΡΡŽΡ‚ΡΡ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ Π½Π° ΠΎΠ±ΡŠΡΠ²Π»ΡΠ΅ΠΌΡ‹Π΅ Π²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ (эта Ρ€ΠΎΠ»ΡŒ лоТится Π½Π° ΠΏΠΎ большСй ΠΌΠ΅Ρ€Π΅ Π½Π° транслятор ΠΈ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ Π½Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°). Для освобоТдСния памяти ΠΈΠ· ΠΏΠΎΠ΄ Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΠΎΠΏΠΊΠΎΠ΄.

Π’.Π΅. Ρƒ сборщика мусора Π½Π° ΠΌΠΎΠΌΠ΅Π½Ρ‚ Π²Ρ‹Π·ΠΎΠ²Π° Π΅ΡΡ‚ΡŒ ΡƒΠΆΠ΅ Π³ΠΎΡ‚ΠΎΠ²Ρ‹ΠΉ список ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ, ΠΏΠΎ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ Π½ΡƒΠΆΠ½ΠΎ ΠΏΡ€ΠΎΠ±Π΅ΠΆΠ°Ρ‚ΡŒΡΡ ΠΈ ΠΎΡΠ²ΠΎΠ±ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΏΠ°ΠΌΡΡ‚ΡŒ.

Π˜Ρ‚Π°ΠΊ, Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ разбСрСмся с компиляциСй Π² абстрактный исполняСмый Ρ„Π°ΠΉΠ»

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

Для этого Π½ΡƒΠΆΠ½ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ исполняСмых Ρ„Π°ΠΉΠ»ΠΎΠ². Π£ мСня ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»ΠΎΡΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅:

Π’Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π°

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

Набор ΠΎΠΏΠΊΠΎΠ΄ΠΎΠ² β€” инструкций для Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ ΠΌΠ°ΡˆΠΈΠ½Ρ‹ с нСбольшими коммСнтариями я ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°ΡŽ Π·Π°Ρ€Π°Π½Π΅Π΅ Π½ΠΈΠΆΠ΅:

Π˜Ρ‚Π°ΠΊ, Π²Ρ‹ Π±Π΅Π³Π»ΠΎ ознакомились с Ρ‚Π΅ΠΌ, ΠΊΠ°ΠΊΠΈΠ΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ написанная ΠΌΠ½ΠΎΠΉ Π’Πœ. Π’Π΅ΠΏΠ΅Ρ€ΡŒ хочСтся ΡΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΎ Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊ это всС Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚.

Π’Πœ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π° ΠΊΠ°ΠΊ object, благодаря Ρ‡Π΅ΠΌΡƒ ΠΌΠΎΠΆΠ½ΠΎ Π±Π΅Π· ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΡƒ многопоточности.

Π˜ΠΌΠ΅Π΅Ρ‚ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° массив с ΠΎΠΏΠΊΠΎΠ΄Π°ΠΌΠΈ, IP (Instruction Pointer) β€” смСщСниС выполняСмой инструкции ΠΈ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ Π½Π° ΠΏΡ€ΠΎΡ‡ΠΈΠ΅ структуры Π’Πœ.

Π’Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° ΠΈΠ΄Π΅Ρ‚ большим switch-case.

ΠŸΡ€ΠΎΡΡ‚ΠΎ ΠΏΡ€ΠΈΠ²Π΅Π΄Ρƒ описаниС Π’Πœ:

НСмного ΠΎΠ± ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ

Для этого Π² Π’Πœ Π΅ΡΡ‚ΡŒ стСк ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ ΠΈ большой try/catch Π±Π»ΠΎΠΊ, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π·Π°Π²Π΅Ρ€Π½ΡƒΡ‚ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π°. Π‘ стСк ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚ΡŒ структуру, которая ΠΈΠΌΠ΅Π΅Ρ‚ смСщСниС Ρ‚ΠΎΡ‡Π΅ΠΊ Π²Ρ…ΠΎΠ΄Π° Π½Π° catch ΠΈ finally/end Π±Π»ΠΎΠΊΠ° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ. Π’Π°ΠΊΠΆΠ΅ я прСдусмотрСл ΠΎΠΏΠΊΠΎΠ΄ trs, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ставится ΠΏΠ΅Ρ€Π΅Π΄ catch ΠΈ пСрСбрасываСт ΠΊΠΎΠ΄ Π½Π° finally/end, Ссли ΠΎΠ½ выполнился ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ, ΠΏΠΎΠΏΡƒΡ‚Π½ΠΎ удаляя Π±Π»ΠΎΠΊ с ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠ΅ΠΉ ΠΎΠ± ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°Ρ… ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ с Π²Π΅Ρ€ΡˆΠΈΠ½Ρ‹ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ стСка. ΠŸΡ€ΠΎΡΡ‚ΠΎ? ΠŸΡ€ΠΎΡΡ‚ΠΎ. Π£Π΄ΠΎΠ±Π½ΠΎ? Π£Π΄ΠΎΠ±Π½ΠΎ.

ΠŸΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΈΠΌ ΠΎ Π²Π½Π΅ΡˆΠ½ΠΈΡ… ΠΌΠ΅Ρ‚ΠΎΠ΄Π°Ρ… ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°Ρ…

Π― ΡƒΠΆΠ΅ ΡƒΠΏΠΎΠΌΠΈΠ½Π°Π» ΠΎ Π½ΠΈΡ… Ρ€Π°Π½Π΅Π΅. Π˜ΠΌΠΏΠΎΡ€Ρ‚Ρ‹, библиотСки… Π‘Π΅Π· Π½ΠΈΡ… язык Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠ±Π»Π°Π΄Π°Ρ‚ΡŒ ΠΆΠ΅Π»Π°Π΅ΠΌΠΎΠΉ Π³ΠΈΠ±ΠΊΠΎΡΡ‚ΡŒΡŽ ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΠΎΠΌ.

ΠŸΠ΅Ρ€Π²Ρ‹ΠΌ Π΄Π΅Π»ΠΎΠΌ Π² Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π’Πœ объявим Ρ‚ΠΈΠΏ внСшнСго ΠΌΠ΅Ρ‚ΠΎΠ΄Π° ΠΈ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ» Π΅Π³ΠΎ Π²Ρ‹Π·ΠΎΠ²Π°.

ΠŸΠ°Ρ€ΡΠ΅Ρ€ сСкции ΠΈΠΌΠΏΠΎΡ€Ρ‚Π° заполняСт ΠΏΡ€ΠΈ ΠΈΡ†ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π’Πœ массив ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ Π½Π° внСшниС ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹. Π‘Π»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΈΠΌΠ΅Π΅Ρ‚ статичный адрСс, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ вычисляСтся Π½Π° этапС сборкС прилоТСния ΠΏΠΎΠ΄ Π’Πœ ΠΈ ΠΏΠΎ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π²Ρ‹Π·Π²Π°Π½ Π½ΡƒΠΆΠ½Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄.

Π’Ρ‹Π·ΠΎΠ² Π² дальнСйшСм происходит Ρ‚Π°ΠΊΠΈΠΌ Π²ΠΎΡ‚ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ Π² процСссС выполнСния ΠΊΠΎΠ΄Π°:

НапишСм ΠΏΡ€ΠΎΡΡ‚ΡƒΡŽ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ для нашСй Π’Πœ

И ΠΏΡƒΡΡ‚ΡŒ ΠΎΠ½Π° Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Ρ‹Π²Π°Ρ‚ΡŒ для Π½Π°Ρ‡Π°Π»Π° ΠΌΠ΅Ρ‚ΠΎΠ΄ Sleep:

Π˜Ρ‚ΠΎΠ³ΠΈ

На этом я ΠΏΠΎΠΆΠ°Π»ΡƒΠΉ Π·Π°ΠΊΠΎΠ½Ρ‡Ρƒ свою ΠΏΠ΅Ρ€Π²ΡƒΡŽ ΡΡ‚Π°Ρ‚ΡŒΡŽ ΠΈΠ· Π·Π°Π΄ΡƒΠΌΠ°Π½Π½ΠΎΠ³ΠΎ Ρ†ΠΈΠΊΠ»Π°.

БСгодня я довольно ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ описал созданиС срСды выполнСния языка. Π‘Ρ‡ΠΈΡ‚Π°ΡŽ, Ρ‡Ρ‚ΠΎ данная ΡΡ‚Π°Ρ‚ΡŒΡ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΡ‡Π΅Π½ΡŒ ΠΏΠΎΠ»Π΅Π·Π½Π° людям, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ€Π΅ΡˆΠ°Ρ‚ ΠΏΠΎΠΏΡ€ΠΎΠ±ΠΎΠ²Π°Ρ‚ΡŒ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ свой ЯП ΠΈΠ»ΠΈ ΠΆΠ΅ Ρ€Π°Π·ΠΎΠ±Ρ€Π°Ρ‚ΡŒΡΡ с Ρ‚Π΅ΠΌ, ΠΊΠ°ΠΊ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹Π΅ языки программирования.

ΠŸΠΎΠ»Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ Π’Πœ доступСн Π² Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΈ, Π² Π²Π΅Ρ‚ΠΊΠ΅ /runtime/svm.

Если Π²Π°ΠΌ ΠΏΠΎΠ½Ρ€Π°Π²ΠΈΠ»Π°ΡΡŒ эта ΡΡ‚Π°Ρ‚ΡŒΡ, Ρ‚ΠΎ Π½Π΅ Π»Π΅Π½ΠΈΡ‚Π΅ΡΡŒ Π·Π°ΠΊΠΈΠ½ΡƒΡ‚ΡŒ плюс Π² ΠΊΠ°Ρ€ΠΌΡƒ ΠΈ ΠΏΠΎΠ΄Π½ΡΡ‚ΡŒ Π΅Ρ‘ Π² Ρ‚ΠΎΠΏΠ΅, я старался ΠΈ Π±ΡƒΠ΄Ρƒ ΡΡ‚Π°Ρ€Π°Ρ‚ΡŒΡΡ для вас.

Если Π²Π°ΠΌ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ нСпонятно β€” Ρ‚ΠΎ Π΄ΠΎΠ±Ρ€ΠΎ ΠΏΠΎΠΆΠ°Π»ΠΎΠ²Π°Ρ‚ΡŒ Π² ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ ΠΈΠ»ΠΈ Π½Π° Ρ„ΠΎΡ€ΡƒΠΌ.

Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ваши вопросы ΠΈ ΠΎΡ‚Π²Π΅Ρ‚Ρ‹ Π½Π° Π½ΠΈΡ… Π±ΡƒΠ΄ΡƒΡ‚ интСрСсны Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π²Π°ΠΌ.

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

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

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