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

Π˜Π½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ для подмноТСства языка Ρ€Π°Π·ΠΌΠ΅Ρ‚ΠΊΠΈ гипСртСкста HTML

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

ΠΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Π΄Π°Π½Π½ΠΎΠΉ Ρ€Π°Π±ΠΎΡ‚Ρ‹ связана с Π±ΡƒΡ€Π½Ρ‹ΠΌ Ρ€Π°Π·Π²ΠΈΡ‚ΠΈΠ΅ΠΌ языков программирования, Π° Π² Ρ‡Π°ΡΡ‚ности языков Π²Π΅Π±-программирования, ΠΊ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ Π² ΡΠ²ΠΎΡŽ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ относится HTML. Π’Π°ΠΊΠΆΠ΅ Π² Π΄Π°Π½Π½ΠΎΠΉ Ρ€Π°Π±ΠΎΡ‚Π΅ ΠΌΡ‹ ΠΏΠΎΠ·Π½Π°ΠΊΠΎΠΌΠΈΠΌΡΡ с Π»Π΅ΠΊΡΠΈΡ‡Π΅ΡΠΊΠΈΠΌ ΠΈ ΡΠΈΠ½Ρ‚аксичСским Π°Π½Π°Π»ΠΈΠ·ΠΎΠΌ, ΡƒΠ»ΡƒΡ‡ΡˆΠΈΠΌ знания Π°Π·ΠΎΠ² систСмного программирования. Π’ Ρ…ΠΎΠ΄Π΅ Π΄Π°Π½Π½ΠΎΠΉ Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π±Ρ‹Π»Π° написана ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°, которая Π°Π½Π°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅Ρ‚ HTML ΠΊΠΎΠ΄ Π½Π° ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΡΡ‚ΡŒ, Π² ΡΠ»ΡƒΡ‡Π°Π΅… Π§ΠΈΡ‚Π°Ρ‚ΡŒ Π΅Ρ‰Ρ‘ >

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

ΠšΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½Π°Ρ Ρ€Π°Π±ΠΎΡ‚Π° Π˜Π½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ для подмноТСства языка Ρ€Π°Π·ΠΌΠ΅Ρ‚ΠΊΠΈ гипСртСкста HTML

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

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

3. Π’ΠΈΠ·ΡƒΠ°Π»ΡŒΠ½ΠΎΠ΅ прСдставлСниС Π—Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Π›ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΡƒΡ€Π°

ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, А — Листинг ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹

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

Π’ Π΄Π°Π½Π½ΠΎΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ входная ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ — это лСксСмы, ΡΠΎΠ²ΠΎΠΊΡƒΠΏΠ½ΠΎΡΡ‚ΡŒ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‚ собой язык гипСртСкстовой Ρ€Π°Π·ΠΌΠ΅Ρ‚ΠΊΠΈ HTML.

Π’Π΅Π³ΠΈ — это элСмСнты языка Ρ€Π°Π·ΠΌΠ΅Ρ‚ΠΊΠΈ гипСртСкста, Π² ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΌ для задания Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Ρ‚ΡŒΡΡ тСкст.

Π’Π΅Π³ΠΈ, Ρ€Π°Π·Π±ΠΈΡ€Π°Π΅ΠΌΡ‹Π΅ написанной ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΎΠΉ:

1.

— Π£ΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ просмотра страниц, Ρ‡Ρ‚ΠΎ это HTML Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π° Π½Π°Ρ‡Π°Π»ΠΎ Π²Π΅Π±-ΠΊΠΎΠ΄Π°.

2.

— ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΠ΅Ρ‚ мСсто, Π³Π΄Π΅ помСщаСтся различная информация, Π½Π΅ ΠΎΡ‚обраТаСмая Π² Ρ‚Π΅Π»Π΅ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°. Π—Π΄Π΅ΡΡŒ располагаСтся Ρ‚Π΅Π³ названия Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π° ΠΈ Ρ‚Π΅Π³ΠΈ для поисковых машин.

3. — ΠΏΠΎΠΌΠ΅Ρ‰Π°Π΅Ρ‚ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π° Π² ΠΎΠ³Π»Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ просмотра страниц.

4.

— ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΠ΅Ρ‚ Π²ΠΈΠ΄ΠΈΠΌΡƒΡŽ Ρ‡Π°ΡΡ‚ΡŒ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°.

5.

— ΡΠΎΠ·Π΄Π°Π΅Ρ‚ Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ.

6.

— ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΠ΅Ρ‚ строку Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅.

7.

— ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΠ΅Ρ‚ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΡƒΡŽ ячСйку Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅.

Π’ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠ°ΠΊ лСксичСский, Ρ‚Π°ΠΊ ΠΈ ΡΠΈΠ½Ρ‚аксичСский Π°Π½Π°Π»ΠΈΠ·.

Для лСксичСского Π°Π½Π°Π»ΠΈΠ·Π° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Lex — ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° для Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ лСксичСских Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ΠΎΠ².

Для синтаксичСского Π°Π½Π°Π»ΠΈΠ·Π° Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ использован ΠΌΠ΅Ρ‚ΠΎΠ΄ рСкурсивного спуска. ΠœΠ΅Ρ‚ΠΎΠ΄ рСкурсивного спуска ΠΈΠ»ΠΈ нисходящий Ρ€Π°Π·Π±ΠΎΡ€ — это ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² опрСдСлСния принадлСТности Π²Ρ…ΠΎΠ΄Π½ΠΎΠΉ строки ΠΊ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ Ρ„ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎΠΌΡƒ языку

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

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

Для описания гипСртСкстовой Ρ€Π°Π·ΠΌΠ΅Ρ‚ΠΊΠΈ языка HTML ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Ρ‚Π΅Π³ΠΈ. HTML Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ начинаСтся с ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°ΡŽΡ‰Π΅Π³ΠΎ Ρ‚Π΅Π³Π° ΠΈ Π·Π°ΠΊΠ°Π½Ρ‡ΠΈΠ²Π°Π΅Ρ‚ся Π·Π°ΠΊΡ€Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΌ ;

. Π”ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ Ρ‚Π΅Π»ΠΎ, Π° Π³ΠΎΠ»ΠΎΠ²Π° ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΡ‚ΡΡƒΡ‚ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ.

Π“ΠΎΠ»ΠΎΠ²Π°, ΠΊΠ°ΠΊ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, Π΄ΠΎΠ»ΠΆΠ½Π° ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ Ρ‚Π΅Π³ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ° —. Π’ ΠΏΠΎΠ»Π΅ ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΌΡΡ ΠΈ Π·Π°ΠΊΡ€Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΌΡΡ Ρ‚Π΅Π³Π°ΠΌΠΈ описываСтся Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ.

Π’Π΅Π»ΠΎ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΠΏΡ€ΠΈΡΡƒΡ‚ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ, хотя ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ пустым. Π’ Ρ‚Π΅Π»Π΅ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π° описываСтся вся структура Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°, Π² Π½Π°ΡˆΠ΅ΠΌ случаС это Ρ‚Π΅Π³ΠΈ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹

ΠΈ Π²ΡΡ‘, Ρ‡Ρ‚ΠΎ входят Π² Ρ„ΠΎΡ€ΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹.

Π’Π΅Π³

создаСт Π½ΠΎΠ²Ρ‹ΠΉ ряд (строку) ячССк Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹. Π―Ρ‡Π΅ΠΉΠΊΠΈ Π² Ρ€ΡΠ΄Ρƒ ΡΠΎΠ·Π΄Π°ΡŽΡ‚ΡΡ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ‚Π΅Π³Π°

"

«returni (b_tabl_tr_en);

»

«returni (b_tabl_td_en);

{L}({L}|{D})* returni (id);

" '" ({L}|{D})+" '" returni (param);

({L}|{D}|{P})* returni (str_ru);

> returnc ('>');

= returnc ('=');

" «;

. returni (lex_error);

%%

end.

ВсС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ ΠΎΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‚ΡΡ Π² ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠ°Ρ…. Π’ Ρ€Π°Π·Π΄Π΅Π»Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠΉ Ρ„ΠΎΡ€ΠΌΠΈΡ€ΡƒΠ΅ΠΌ строки, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ для компиляции ΠΏΠΎΠ»Π½ΠΎΡ†Π΅Π½Π½ΠΎΠ³ΠΎ модуля лСксичСского Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€Π°.

Для этого ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅ΠΌ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ модуля ΠΈ Π΄Π΅ΠΊΠ»Π°Ρ€ΠΈΡ€ΡƒΠ΅ΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ yylex Π² ΠΈΠ½Ρ‚СрфСйсном Ρ€Π°Π·Π΄Π΅Π»Π΅, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ данная функция Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π² Π΄Ρ€ΡƒΠ³ΠΈΡ… модулях.

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

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

Π’ ΠΊΠ°Ρ‡Π΅ΡΡ‚Π²Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° синтаксичСского Π°Π½Π°Π»ΠΈΠ·Π° Π·Π°Π΄Π°Π½ «ΠΌΠ΅Ρ‚ΠΎΠ΄ рСкурсивного спуска». НСобходимо ΠΏΠΎΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ Π³Ρ€Π°ΠΌΠΌΠ°Ρ‚ΠΈΠΊΡƒ, ΠΎΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‰ΡƒΡŽ Π·Π°Π΄Π°Π½Π½Ρ‹Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹. ВСкст Π³Ρ€Π°ΠΌΠΌΠ°Ρ‚ΠΈΠΊΠΈ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ Π½ΠΈΠΆΠ΅:

GOAL>HTML

HTML>HEAD BODY

.

Π’ ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°ΡŽΡ‰Π΅ΠΌΡΡ Ρ‚Π΅Π³Π΅ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ ΠΈΠ»ΠΈ любого Ρ‚Π΅Π³Π° входящСго Π² Ρ„ΠΎΡ€ΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹, ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹:

1. align — опрСдСляСт способ Π³ΠΎΡ€ΠΈΠ·ΠΎΠ½Ρ‚Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ выравнивания содСрТимого всСх ячССк Π΄Π°Π½Π½ΠΎΠ³ΠΎ ряда.

2. valign — опрСдСляСт способ Π²Π΅Ρ€Ρ‚ΠΈΠΊΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ выравнивания содСрТимого всСх ячССк Π΄Π°Π½Π½ΠΎΠ³ΠΎ ряда.

3. bgcolor — опрСдСляСт Ρ†Π²Π΅Ρ‚ Ρ„ΠΎΠ½Π° для всСх ячССк Π΄Π°Π½Π½ΠΎΠ³ΠΎ ряда.

ВозмоТности гипСртСкстового языка Ρ€Π°Π·ΠΌΠ΅Ρ‚ΠΊΠΈ Π½Π°ΠΌΠ½ΠΎΠ³ΠΎ ΡˆΠΈΡ€Π΅ ΠΈ Π±ΠΎΠ»ΡŒΡˆΠ΅, Π½ΠΎ Π΄Π»Ρ поставлСнной Ρ†Π΅Π»ΠΈ, этого достаточно.

Π’ Π½Π°Ρ‡Π°Π»Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΎΠΏΠΈΡΠ°Ρ‚ΡŒ всС Π²Ρ‹ΡˆΠ΅ΠΏΠ΅Ρ€Π΅Ρ‡ΠΈΡΠ»Π΅Π½Π½Ρ‹Π΅ Ρ‚Π΅Π³ΠΈ ΠΊΠ°ΠΊ лСксСмы Π² Ρ„Π°ΠΉΠ»Π΅ с Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ΠΌ htmllex. l Π΄Π»Ρ Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Π° Lex.

ВСкст Ρ„Π°ΠΉΠ»Π°:

unit htmllex;

interface

const

html_st=257;

html_en=258;

t_st = 259;

t_en = 260;

h_st=261;

h_en=262;

b_st=263;

b_en=264;

b_tabl_st=265;

b_tabl_en=271;

id=300;

str_ru=301;

param=302;

b_tabl_tr_st=303;

b_tabl_tr_en=304;

b_tabl_td_st=305;

b_tabl_td_en=306;

lex_error=313;

function yylex: integer;

implementation

uses lexlib;

D [0−9]

L [a-zA-Z]

P [а-яА-Я]

%%

" «returni (html_st);

"

«returni (html_en);

»

" «returni (t_en);

"

«returni (h_st);

» «returni (h_en);

"

«returni (b_st);

»

«returni (b_en);

»

"

«returni (b_tabl_en);

»

"

HEAD>

TITLE

|Π΅

TITLE>

|Π΅

HEADLINE > str_ru

|Π΅

BODY>

CONTENT

CONTENT > TABLE0 CONTENT

|str_ru CONTENT

|id CONTENT

|Π΅

TABLE0 >

TR0

TR0 >

TR0

| TR0 > TR0

| Π΅

TD0 >

str_ruTD0

ATTRIB > id=param ATTRIB

|Π΅

3. Π’ΠΈΠ·ΡƒΠ°Π»ΡŒΠ½ΠΎΠ΅ прСдставлСниС

Для Π²ΠΈΠ·ΡƒΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ прСдставлСния Π²Ρ…ΠΎΠ΄Π½ΠΎΠΉ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ Π΄Π΅Ρ€Π΅Π²ΠΎ.

Π§Ρ‚ΠΎΠ±Ρ‹ Π²ΠΈΠ·ΡƒΠ°Π»ΡŒΠ½ΠΎ ΠΎΡ‚ΠΎΠ±Ρ€Π°Π·ΠΈΡ‚ΡŒ Π΄Π΅Ρ€Π΅Π²ΠΎ использовали стандартный ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ Embarcadero RAD Studio 2010 — TreeView. Π’Π°ΠΊ ΠΆΠ΅ происходит автоматичСскоС экспортированиС Π΄Π΅Ρ€Π΅Π²Π° ΠΈΠ· Π²ΠΈΠ·ΡƒΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° Π² xml Ρ„Π°ΠΉΠ» ΠΈ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΉ тСкстовый Ρ„Π°ΠΉΠ», ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡ‚ΠΈ Π² Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΈ с ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΎΠΉ. Для построСния абстрактного синтаксичСского Π΄Π΅Ρ€Π΅Π²Π° ΠΏΠΎ Ρ…ΠΎΠ΄Ρƒ Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π½Π°ΠΌ ΡƒΠ΄Π°Π»ΠΎΡΡŒ ΠΈΠ·ΡƒΡ‡ΠΈΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹ΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚.

К ΡƒΠ·Π»Π°ΠΌ Π΄Π΅Ρ€Π΅Π²Π° крСпятся Π»ΠΈΡΡ‚ΡŒΡ, Ссли ΠΆΠ΅ листа Π½Π΅Ρ‚, Ρ‚ΠΎ ΡƒΠ·Π΅Π» сам становится листом (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, послС Ρ‚Π΅Π³Π°

ΠΈΠ΄Π΅Ρ‚ Ρ‚Π΅Π³, Ссли ΠΆΠ΅ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚, Ρ‚ΠΎ ΡƒΠ·Π΅Π», станСт листом Π΄Π΅Ρ€Π΅Π²Π°)

Π§Ρ‚ΠΎ Π±Ρ‹ Ρ€Π°ΡΠΏΠΎΠ·Π½Π°Ρ‚ΡŒ родитСля ΡƒΠ·Π»Π° Π·Π°Π²Π΅Π»ΠΈ счСтчик, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π° Ρ€ΠΎΠ΄ΠΈΡ‚Сля Ρ‚ΠΎΠ³ΠΎ ΠΈΠ»ΠΈ ΠΈΠ½ΠΎΠ³ΠΎ ΡƒΠ·Π»Π°.

Π’Π½Π΅ΡˆΠ½ΠΈΠΉ Π²ΠΈΠ΄ созданного ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Π° соотвСтствуСт ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΡŽ Π½Π° Ρ€ΠΈΡΡƒΠ½ΠΊΠ΅ 1.

Рисунок 1 — Π’Π½Π΅ΡˆΠ½ΠΈΠΉ Π²ΠΈΠ΄

На Ρ„ΠΎΡ€ΠΌΠ΅ располоТСны ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹:

1. Кнопка «ΠžΠš», которая запускаСт ΠΎΡΠ½ΠΎΠ²Π½ΡƒΡŽ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρƒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹;

2. Кнопка «ΠžΡ‚ΠΌΠ΅Π½Π°», которая Π·Π°Π²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Ρƒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹;

3. Кнопка «ΠžΡ‡ΠΈΡΡ‚ΠΈΡ‚ΡŒ», которая ΠΎΡ‡ΠΈΡ‰Π°Π΅Ρ‚ исходныС Π΄Π°Π½Π½Ρ‹Π΅;

4. Memo1- ΠΎΠ±Π»Π°ΡΡ‚ΡŒ, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ вписан исходный HTML ΠΊΠΎΠ΄;

5. TreeView — ΠΎΠ±Π»Π°ΡΡ‚ΡŒ, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ строится абстрактноС Π΄Π΅Ρ€Π΅Π²ΠΎ.

ПослС Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ процСсса Π°Π½Π°Π»ΠΈΠ·Π° ΠΊΠΎΠ΄Π°, ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΠΏΡ€ΠΈΠΌΠ΅Ρ‚ Π²ΠΈΠ΄ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ рисунку 2.

Рисунок 2 — Π—Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΠ΅ процСсса Π°Π½Π°Π»ΠΈΠ·Π°

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

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

ΠŸΡ€ΠΈ написании ΠΌΡ‹ Ρ€Π°Π·ΠΎΠ±Ρ€Π°Π»ΠΈΡΡŒ с Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠΌ рСкурсивного спуска, ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»ΠΈ Π½Π°Π²Ρ‹ΠΊΠΈ построСния Π³Ρ€Π°ΠΌΠΌΠ°Ρ‚ΠΈΠΊΠΈ ΠΈ Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Π»Π΅ΠΊΡΠΈΡ‡Π΅ΡΠΊΠΈΠΌ Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ΠΎΠΌ Lex. ΠŸΡ€ΠΈΠΎΠ±Ρ€Π΅Π»ΠΈ практичСскиС Π½Π°Π²Ρ‹ΠΊΠΈ Π² ΠΎΠ±Π»Π°ΡΡ‚ΠΈ построСния трансляторов.

Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ Π³Ρ€Π°ΠΌΠΌΠ°Ρ‚ΠΈΠΊΠ° ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ Ρ€Π°Π·ΠΌΠ΅Ρ‚ΠΊΠ° ΠΊΠΎΠ΄

ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ А

Листинг ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹

unit Interpreate;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, Lexlib, HTMLLEX, ComCtrls, StdCtrls, ExtCtrls ;

type

TPInt = ^integer;

TForm2 = class (TForm)

Button1: TButton;

Memo4: TMemo;

GroupBox1: TGroupBox;

Memo1: TMemo;

GroupBox2: TGroupBox;

TreeView1: TTreeView;

Memo2: TMemo;

Button2: TButton;

Button3: TButton;

StatusBar1: TStatusBar;

Memo3: TMemo;

procedure FormShow (Sender: TObject);

procedure Button1Click (Sender: TObject);

procedure FormCreate (Sender: TObject);

function fglav: boolean;

function fhtml_st: boolean; //Π½Π°Ρ‡Π°Π»ΠΎ

function fh_st: boolean; //head start — end

function ft_st: boolean; //title

function ft_en: boolean;

function fh_en: boolean;

function fb_st: boolean; //body

function fb_tabl_st: boolean; //body — table

function fparam: boolean;

function fb_tabl_tr_st: boolean;

function fb_tabl_td_st: boolean;

function fb_tabl_td_en: boolean;

procedure push (i: integer);

procedure pop (var i: integer);

function fb_tabl_tr_en: boolean;

function fb_tabl_en: boolean;

function fb_en: boolean;

function fhtml_en: boolean;

procedure Button2Click (Sender: TObject); //ΠΊΠΎΠ½Π΅Ρ†

private

stack: TList;

{ Private declarations }

public

{ Public declarations }

end;

var

Form2: TForm2;

token: integer;

tree_i,

tree_t, // ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ Π² title ΠΈ table

tree_tr,

tree_td,

tree_p: integer;

backup: array [1.4] of integer;

implementation

{$R *.dfm}

function TForm2. fhtml_en: boolean;

begin

if token = html_en then

begin

token := yylex;

result := true;

end

else

result := false;

end;

procedure TForm2. Button2Click (Sender: TObject);

begin

Memo1.Clear;

end;

function TForm2. fb_en: boolean;

begin

if (token = b_en) then

begin

result := true;

token := yylex;

end

else

if (token = str_ru) or (token = id) then

begin

TreeView1.Items.AddChild (TreeView1.Items.Item[tree_t], yytext);

inc (tree_i);

token := yylex;

result := fb_en;

end

else

result := false;

end;

function TForm2. fb_tabl_en: boolean;

begin

if token = b_tabl_en then

begin

result := true;

token := yylex;

end

else

result := false;

end;

function TForm2. fb_tabl_tr_en:boolean;

begin

if (token = b_tabl_tr_en) then

begin

result := true;

token := yylex;

end

else

if token = str_ru then

begin

token := yylex;

result := fb_tabl_tr_en;

end

else

result := false;

end;

procedure TForm2. pop (var i: integer);

var

zn: TPInt;

begin

zn := stack. Items[stack.count-1];

i := zn^;

stack.Delete (stack.count-1);

end;

procedure TForm2. push (i: integer);

var

zn: TPInt;

begin

new (zn);

zn^ := i;

stack.Add (zn);

end;

function TForm2. fb_tabl_td_en:boolean;

begin

result := true;

if token = b_tabl_st then

begin

push (tree_t);

push (tree_tr);

push (tree_td);

push (tree_p);

tree_t := tree_i;

result := fb_tabl_st;

pop (tree_p);

pop (tree_td);

pop (tree_tr);

pop (tree_t);

end;

if token = b_tabl_td_en then

begin

result := true;

token := yylex;

end

else

if (token = str_ru) or (token = b_tabl_st)then

begin

TreeView1.Items.AddChild (TreeView1.Items.Item[tree_p], yytext);

inc (tree_i);

token := yylex;

result := result and fb_tabl_td_en;

end

else

result := false;

end;

function TForm2. fb_tabl_td_st:boolean;

begin

result := false;

if token = b_tabl_td_st then

begin

TreeView1.Items.AddChild (TreeView1.Items.Item[tree_td], '

inc (tree_i);

token := yylex;

tree_p := tree_i;

result := fparam;

TreeView1.Items.AddChild (TreeView1.Items.Item[tree_td], '>

');

inc (tree_i);

tree_p := tree_i;

result := result and fb_tabl_td_en;

if token = b_tabl_td_st then

result := result and fb_tabl_td_st;

end

end;

function TForm2. fb_tabl_tr_st: boolean;

begin

result := false;

if token = b_tabl_tr_st then

begin

TreeView1.Items.AddChild (TreeView1.Items.Item[tree_tr], '

');

inc (tree_i);

tree_td := tree_i;

result := result and fb_tabl_td_st and fb_tabl_tr_en ;

if token = b_tabl_tr_st then

result := result and fb_tabl_tr_st;

end

end;

function TForm2. fparam:boolean;

var

pr: string;

begin

pr := '';

if token = ord ('>') then

begin

result := true;

token := yylex;

end

else

result := false;

if token = id then

begin

pr := yytext;

token := yylex;

if token = ord ('=') then

begin

pr := pr + yytext;

TreeView1.Items.AddChild (TreeView1.Items.Item[tree_p], pr);

inc (tree_i);

token := yylex;

if token = param then

begin

TreeView1.Items.AddChild (TreeView1.Items.Item[tree_i], yytext);

inc (tree_i);

token := yylex;

result := fparam;

end;

end;

end;

end;

function TForm2. fb_tabl_st: boolean;

begin

if token = b_tabl_st then

begin

TreeView1.Items.AddChild (TreeView1.Items.Item[tree_t], '

inc (tree_i);

token := yylex;

tree_p := tree_i;

result := fparam;

TreeView1.Items.AddChild (TreeView1.Items.Item[tree_t], '>

');

inc (tree_i);

tree_tr := tree_i;

result := result and fb_tabl_tr_st and fb_tabl_en;

if token = b_tabl_st then

result := result and fb_tabl_st

else

if (token = str_ru) or (token = id) then

begin

TreeView1.Items.AddChild (TreeView1.Items.Item[tree_t], yytext);

inc (tree_i);

token := yylex;

result := fb_tabl_st;

end;

end

else

if (token = str_ru) or (token = id) then

begin

TreeView1.Items.AddChild (TreeView1.Items.Item[tree_t], yytext);

inc (tree_i);

token := yylex;

result := fb_tabl_st;

end

else

result := true;

end;

function TForm2. fb_st: boolean;

begin

if token = b_st then

begin

TreeView1.Items.AddChild (TreeView1.Items.Item[0], '

');

inc (tree_i);

tree_t := tree_i;

token := yylex;

result := fb_tabl_st and fb_en;

end

else

result := false;

end;

function TForm2. fh_en: boolean;

begin

if token = h_en then

begin

token := yylex;

result := true;

end

else

result := false;

end;

function TForm2. ft_en: boolean;

begin

if (token = t_en) then

begin

result := true;

token := yylex;

end

else

if token = str_ru then

begin

TreeView1.Items.AddChild (TreeView1.Items.Item[tree_t], yytext);

inc (tree_i);

token := yylex;

result := ft_en;

end

else

result := false;

end;

function TForm2. ft_st: boolean;

begin

if token = t_st then

begin

TreeView1.Items.AddChild (TreeView1.Items.Item[tree_i], '');

inc (tree_i);

tree_t := tree_i;

token := yylex;

result := ft_en;

end

else

result := false;

end;

function TForm2. fh_st: boolean;

begin

if token = h_st then

begin

TreeView1.Items.AddChild (TreeView1.Items.Item[0], '

');

inc (tree_i);

token := yylex;

result := ft_st and fh_en;

end

else

result := true;

end;

function TForm2. fhtml_st: boolean;

begin

if token = html_st then

begin

TreeView1.Items.Clear;

TreeView1.Items.Add (nil, '

');

token := yylex;

result := fh_st and fb_st and fhtml_en;

end

else result:=false;

end;

function TForm2. fglav: boolean;

begin

result := fhtml_st;

end;

procedure TForm2. Button1Click (Sender: TObject);

begin

tree_i := 0;

memo2.Clear;

yyclear;

yymemoinit (memo1,memo2,memo3,memo4);

yylineno:=0;

token:=yylex;

if fglav and (token=0) then

begin

StatusBar1.Panels[0]. Text := 'ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° ΠΊΠΎΠ΄Π° Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½Π° ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ';

StatusBar1.Panels[1]. Text := 'Π”Π΅Ρ€Π΅Π²ΠΎ построСно';

end

else

begin

StatusBar1.Panels[0]. Text := 'Ошибка ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ ΠΊΠΎΠ΄Π°';

StatusBar1.Panels[1]. Text := 'Ошибка ΠΏΡ€ΠΈ построСнии Π΄Π΅Ρ€Π΅Π²Π°';

showmessage ('Ошибка!');

end;

end;

procedure TForm2. FormCreate (Sender: TObject);

begin

stack := TList. Create;

end;

procedure TForm2. FormShow (Sender: TObject);

begin

Button1.SetFocus;

end;

end.

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