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

Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΊΠΎΠ½Π²Π΅Ρ€Ρ‚ΠΎΡ€Π° Π½Π° языкС Π‘ΠΈ для ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ Π½Π° языкС Паскаль Π² тСкст ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π½Π° языкС Π‘ΠΈ

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

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ΠΈΡ‚ тСкст ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, сохранСнный Π² Ρ„Π°ΠΉΠ»Π΅ filename1 с Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ΠΌ .PAS. ΠŸΡƒΡ‚ΡŒ Π½Π° Π²Ρ…ΠΎΠ΄Π½ΠΎΠΉ Ρ„Π°ΠΉΠ» filename1 ΠΈ ΠΏΡƒΡ‚ΡŒ Π½Π° Π²Ρ‹Ρ…ΠΎΠ΄Π½ΠΎΠΉ Ρ„Π°ΠΉΠ» filename2 с Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ΠΌ .с вводятся с ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Ρ‹. Π’ ΠΊΠΎΠ΄Π΅ Π²Ρ…ΠΎΠ΄Π½ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π° Π½ΡƒΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹: case, assign, rewrite, write, file, ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ, Begin, end ΠΈ Ρ‚ΠΈΠΏ Π΄Π°Π½Π½Ρ‹Ρ…: real Π½Π° ΡΠ·Ρ‹ΠΊ C, послС Ρ‡Π΅Π³ΠΎ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ записываСтся Π² Π²Ρ‹Ρ…ΠΎΠ΄Π½ΠΎΠΉ Ρ„Π°ΠΉΠ»… Π§ΠΈΡ‚Π°Ρ‚ΡŒ Π΅Ρ‰Ρ‘ >

Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΊΠΎΠ½Π²Π΅Ρ€Ρ‚ΠΎΡ€Π° Π½Π° языкС Π‘ΠΈ для ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ Π½Π° языкС Паскаль Π² тСкст ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π½Π° языкС Π‘ΠΈ (Ρ€Π΅Ρ„Π΅Ρ€Π°Ρ‚, курсовая, Π΄ΠΈΠΏΠ»ΠΎΠΌ, ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½Π°Ρ)

ΠœΠΈΠ½ΠΈΡΡ‚Π΅Ρ€ΡΡ‚Π²ΠΎ образования ΠΈ Π½Π°ΡƒΠΊΠΈ Российской Π€Π΅Π΄Π΅Ρ€Π°Ρ†ΠΈΠΈ Π€Π΅Π΄Π΅Ρ€Π°Π»ΡŒΠ½ΠΎΠ΅ агСнтство ΠΏΠΎ ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΡŽ ГосударствСнноС ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ ΡƒΡ‡Ρ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠ΅ Π²Ρ‹ΡΡˆΠ΅Π³ΠΎ ΠΏΡ€ΠΎΡ„Π΅ΡΡΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ образования

" Π‘Π΅Π²Π΅Ρ€ΠΎ-Кавказский ГосударствСнный ВСхничСский УнивСрситСт"

ΠšΠ£Π Π‘ΠžΠ’ΠžΠ™ ΠŸΠ ΠžΠ•ΠšΠ’ ΠŸΠž Π”Π˜Π‘Π¦Π˜ΠŸΠ›Π˜ΠΠ• «ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π½Π° ΡΠ·Ρ‹ΠΊΠ΅ высокого уровня»

НА Π’Π•ΠœΠ£: «Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΊΠΎΠ½Π²Π΅Ρ€Ρ‚ΠΎΡ€Π° Π½Π° ΡΠ·Ρ‹ΠΊΠ΅ Π‘ΠΈ Π΄Π»Ρ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ Π½Π° ΡΠ·Ρ‹ΠΊΠ΅ Паскаль Π² Ρ‚Скст ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π½Π° ΡΠ·Ρ‹ΠΊΠ΅ Π‘ΠΈ»

Π’Ρ‹ΠΏΠΎΠ»Π½ΠΈΠ» студСнт II курса ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ 230 102.65

" АвтоматизированныС систСмы ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΈ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΡ"

Π•.П.Π“Π»Π°Π΄ΠΊΠΈΠΉ Π‘Ρ‚Π°Π²Ρ€ΠΎΠΏΠΎΠ»ΡŒ

Аннотация Π’ Π΄Π°Π½Π½ΠΎΠΌ курсовом ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅ описана ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°, написанная Π½Π° ΡΠ·Ρ‹ΠΊΠ΅ Visual C++.

НСобходимо ΡΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ, которая ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ΠΈΡ‚ ΠΊΠΎΠ΄ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π½Π° ΡΠ·Ρ‹ΠΊΠ΅ Pascal Π² ΠΊΠΎΠ΄ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π½Π° ΡΠ·Ρ‹ΠΊΠ΅ Π‘ΠΈ. ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΠΏΠ΅Ρ€Π΅Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ исходный ΠΊΠΎΠ΄ Π½Π° ΡΠ·Ρ‹ΠΊΠ΅ Pascal, ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ΠΈΡ‚ Π² ΡΠ·Ρ‹ΠΊ Π‘ΠΈ ΠΈ Π·Π°ΠΏΠΈΡΡ‹Π²Π°Π΅Ρ‚ Π² Π½ΠΎΠ²Ρ‹ΠΉ Ρ„Π°ΠΉΠ».

Разработанная ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° позволяСт ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŽ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ с Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΠΌΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π°ΠΌΠΈ: case, assign, rewrite, write, объявлСниС Ρ„Π°ΠΉΠ»Π°, ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ, объявлСниС ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…, ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° присваивания, Π° Ρ‚Π°ΠΊ ΠΆΠ΅ логичСскоС ΠΈ Π°Ρ€ΠΈΡ„мСтичСскоС выраТСния Ρ‚ΠΈΠΏ Π΄Π°Π½Π½Ρ‹Ρ… real ΠΈ integer.

ОглавлСниС Аннотация Π’Π²Π΅Π΄Π΅Π½ΠΈΠ΅

1. ВСхничСскоС Π·Π°Π΄Π°Π½ΠΈΠ΅

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

3. Π’Π½Π΅ΡˆΠ½ΡΡ спСцификация ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹

4. ОписаниС Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ°

5. Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹

6. Листинг ΠΊΠΎΠ΄Π°

7. Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ тСстирования ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π—Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Бписок Π»ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΡƒΡ€Ρ‹

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

Π‘ΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΈΠΊΠΈ для трансляции ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. Π‘ΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ Π²ΠΈΠ΄Ρ‹ трансляторов: адрСсный, Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²Ρ‹ΠΉ, ΠΌΠ½ΠΎΠ³ΠΎΠΏΡ€ΠΎΡ…ΠΎΠ΄Π½ΠΎΠΉ, ΠΎΠ±Ρ€Π°Ρ‚Π½Ρ‹ΠΉ, ΠΎΠ΄Π½ΠΎΠΏΡ€ΠΎΡ…ΠΎΠ΄Π½ΠΎΠΉ, ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΉ, синтаксичСски-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ (синтаксичСски-управляСмый), тСстовый.

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

1. ВСхничСскоС Π·Π°Π΄Π°Π½ΠΈΠ΅ ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π° для трансляции ΠΊΠΎΠ΄Π° Π½Π° ΡΠ·Ρ‹ΠΊΠ΅ Pascal Π² ΠΊΠΎΠ΄ Π½Π° ΡΠ·Ρ‹ΠΊΠ΅ программирования C.

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ΠΈΡ‚ тСкст ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, сохранСнный Π² Ρ„Π°ΠΉΠ»Π΅ filename1 с Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ΠΌ .PAS. ΠŸΡƒΡ‚ΡŒ Π½Π° Π²Ρ…ΠΎΠ΄Π½ΠΎΠΉ Ρ„Π°ΠΉΠ» filename1 ΠΈ ΠΏΡƒΡ‚ΡŒ Π½Π° Π²Ρ‹Ρ…ΠΎΠ΄Π½ΠΎΠΉ Ρ„Π°ΠΉΠ» filename2 с Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ΠΌ .с вводятся с ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Ρ‹. Π’ ΠΊΠΎΠ΄Π΅ Π²Ρ…ΠΎΠ΄Π½ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π° Π½ΡƒΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹: case, assign, rewrite, write, file, ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ, Begin, end ΠΈ Ρ‚ΠΈΠΏ Π΄Π°Π½Π½Ρ‹Ρ…: real Π½Π° ΡΠ·Ρ‹ΠΊ C, послС Ρ‡Π΅Π³ΠΎ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ записываСтся Π² Π²Ρ‹Ρ…ΠΎΠ΄Π½ΠΎΠΉ Ρ„Π°ΠΉΠ».

Π’ ΡΠ»ΡƒΡ‡Π°Π΅ ΠΎΡˆΠΈΠ±ΠΎΡ‡Π½ΠΎΠΉ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π°, ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° добавляСт ΠΊΠΎΠ΄ Π² Π²Ρ‹Ρ…ΠΎΠ΄Π½ΠΎΠΉ Ρ„Π°ΠΉΠ» filename2 <�ошибка!>. ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π½Π΅ ΠΏΡ€Π΅Ρ€Ρ‹Π²Π°Π΅Ρ‚ся, Ссли Π½Π°ΠΉΠ΄Π΅Π½ ΠΎΡˆΠΈΠ±ΠΎΡ‡Π½Ρ‹ΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€.

Для создания ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ использовался Visual Studio 2010, созданиС тСстовой ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ срСду Turbo Pascal 7.0.

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° создаСтся Π½Π° ΡΠ·Ρ‹ΠΊΠ΅ C Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠΌ ΠΏΠ°ΠΊΠ΅Ρ‚Π΅ Visual Studio 2010 Express Edition, Π½Π° ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмС Windows XP SP3.

2. ΠŸΠΎΡΡ‚Π°Π½ΠΎΠ²ΠΊΠ° Π·Π°Π΄Π°Ρ‡ΠΈ Π˜ΡΡ…ΠΎΠ΄Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ находится Π² Ρ„Π°ΠΉΠ»Π΅ filename1. pas с ΠΊΠΎΠ΄ΠΎΠΌ Π½Π° ΡΠ·Ρ‹ΠΊΠ΅ Pascal:

filename1 имя Π²Ρ…ΠΎΠ΄Π½ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π°, содСрТащСго исходный тСкст ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π½Π° ΡΠ·Ρ‹ΠΊΠ΅ Pascal, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ case, assign, rewrite, write, file, ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ, Begin, end ΠΈ Ρ‚ΠΈΠΏ Π΄Π°Π½Π½Ρ‹Ρ…: real

ПослС Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° создаСт Ρ„Π°ΠΉΠ» filename2. c, Π° Ρ‚Π°ΠΊ ΠΆΠ΅ счСтчики ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ² Π΄ΠΎ Ρ‚ранслирования ΠΈ ΠΏΠΎΡΠ»Π΅, Π° Ρ‚Π°ΠΊΠΆΠ΅ количСство ΠΎΡˆΠΈΠ±ΠΎΡ‡Π½Ρ‹Ρ… ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ²:

filename2 имя Π²Ρ‹Ρ…ΠΎΠ΄Π½ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π°, содСрТащий ΠΊΠΎΠ½Π²Π΅Ρ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ тСкст ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π½Π° ΡΠ·Ρ‹ΠΊ C;

koper1 количСство ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ² Π² ΠΈΡΡ…ΠΎΠ΄Π½ΠΎΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅;

koper2 количСство ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ² Π² ΠΊΠΎΠ½Π²Π΅Ρ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅;

ker количСство ΠΎΡˆΠΈΠ±ΠΎΡ‡Π½Ρ‹Ρ… ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ² Π² ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½ΠΎΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅;

Для Π±ΠΎΠ»Π΅Π΅ ΡƒΠ΄ΠΎΠ±Π½ΠΎΠ³ΠΎ понимания Ρ†Π΅Π»Π΅ΠΉ нашСй ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ составим Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ 1, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ сравним синтаксис ΠΏΠΎ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π°ΠΌ Π½Π° ΡΠ·Ρ‹ΠΊΠ΅ C ΠΈ Π½Π° языкС Pascal ΠΏΠΎ Π½Π°ΡˆΠ΅ΠΌΡƒ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Ρƒ.

Π’Π°Π±Π»ΠΈΡ†Π° 1 — Бинтаксис ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ² Π½Π° ΡΠ·Ρ‹ΠΊΠ΅ C ΠΈ Π½Π° языкС Pascal

Бинтаксис ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° Π½Π° ΡΠ·Ρ‹ΠΊΠ΅ Pascal

Бинтаксис ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° Π½Π° ΡΠ·Ρ‹ΠΊΠ΅ C

1.ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ присваивания

v1:=ae1;

v1=ae1;

2. ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ case:

case k of

1: Begin

End;

2:Begin

End;

switch (k){

case 1:

{

break;

case 2:

{

break;

3. ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ assign, rewrite, write

assign (fl,'c:tuctuc.txt');

rewrite (fl);

write (fl,'bla');

fl = fopen («c:tuctuc.txt» ," w");

fcreate (fl);

fprintf (fl," bla");

4.ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π½Ρ‹Π΅ скобки

Begin…End

{…}

5.ОбъявлСниС Ρ„Π°ΠΉΠ»Π°

fl:file of integer;

FILE *fl;

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

{…}

/*…*/

АрифмСтичСскоС Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ АС3

ЛогичСскоС Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Le2:

3. Π’Π½Π΅ΡˆΠ½ΡΡ спСцификация ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π˜ΡΡ…ΠΎΠ΄Π½Ρ‹ΠΉ тСкст ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, написанный Π½Π° ΡΠ·Ρ‹ΠΊΠ΅ Pascal, filename1. pas вводится послС запроса ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹:

Имя Π²Ρ…ΠΎΠ΄Π½ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π°:<�Имя Π²Ρ…ΠΎΠ΄Π½ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π°>

ПослС Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, ввСсти имя Ρ„Π°ΠΉΠ»Π°: filename2, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ записываСтся ΠΊΠΎΠ΄ послС трансляции:

Имя Π²Ρ‹Ρ…ΠΎΠ΄Π½ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π°:<�Имя Π²Ρ‹Ρ…ΠΎΠ΄Π½ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π°>

ПослС Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, выводится Π½Π° ΡΠΊΡ€Π°Π½ количСство ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ² исходных, ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π½Π½Ρ‹Ρ… ΠΈ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ оказались ΠΎΡˆΠΈΠ±ΠΎΡ‡Π½Ρ‹Π΅ (koper1, koper2, ker).

ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ² Π² ΠΈΡΡ…ΠΎΠ΄Π½ΠΎΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅:<�число>

ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ Π² ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½ΠΎΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅:<�число>

ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ ΠΎΡˆΠΈΠ±ΠΎΡ‡Π½Ρ‹Ρ… ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ² Π² ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½ΠΎΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅:<�число>

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ хранится Π² Ρ„Π°ΠΉΠ»Π΅:<�имя Π²Ρ‹Ρ…ΠΎΠ΄Π½ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π°>

Если ΠΏΡƒΡ‚ΡŒ ΠΊ ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠΌΡƒ Ρ„Π°ΠΉΠ»Ρƒ filename1 Π½Π΅ Π²Π΅Ρ€Π΅Π½ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ:

Ошибка открытия Ρ„Π°ΠΉΠ»Π°!

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

ЛСксичСский Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ — это транслятор, Π²Ρ…ΠΎΠ΄ΠΎΠΌ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ слуТит Ρ†Π΅ΠΏΠΎΡ‡ΠΊΠ° символов, ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‰Π°Ρ ΠΈΡΡ…ΠΎΠ΄Π½ΡƒΡŽ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ, Π° Π²Ρ‹Ρ…ΠΎΠ΄ΠΎΠΌ — ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ лСксСм. этот Π²Ρ‹Ρ…ΠΎΠ΄ ΠΎΠ±Ρ€Π°Π·ΡƒΠ΅Ρ‚ Π²Ρ‹Ρ…ΠΎΠ΄ синтаксичСского Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€Π°.

Π¦Π΅ΠΏΠΎΡ‡ΠΊΠ° лСксСм ΠΎΠ±Ρ€Π°Π·ΡƒΠ΅Ρ‚ Π²Ρ…ΠΎΠ΄ синтаксичСского Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€Π°, ΠΈΡΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π³ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠ΅Ρ€Π²Ρ‹Π΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ лСксСм — ΠΈΡ… Ρ‚ΠΈΠΏΡ‹.

БинтаксичСский Π°Π½Π°Π»ΠΈΠ·, ΠΈΠ»ΠΈ Ρ€Π°Π·Π±ΠΎΡ€ — это процСсс, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ исслСдуСтся Ρ†Π΅ΠΏΠΎΡ‡ΠΊΠ° лСксСм ΠΈ ΡƒΡΡ‚анавливаСтся, удовлСтворяСт Π»ΠΈ ΠΎΠ½Π° структурными условиями, явно сформулированным Π² ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠΈ синтаксиса языка.

Π Π°Π·Π±ΠΎΡ€ — ΠΎΠ΄Π½Π° ΠΈΠ· Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ понятных Ρ„Π°Π· компиляции. По ΡΠΎΠ²ΠΎΠΊΡƒΠΏΠ½ΠΎΡΡ‚ΠΈ синтаксичСских ΠΏΡ€Π°Π²ΠΈΠ» ΠΌΠΎΠΆΠ½ΠΎ автоматичСски ΠΏΠΎΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ синтаксичСский Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡ‚ΡŒ, ΠΈΠΌΠ΅Π΅Ρ‚ Π»ΠΈ исходная ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΡΠΈΠ½Ρ‚Π°ΠΊΡΠΈΡ‡Π΅ΡΠΊΡƒΡŽ структуру, ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΠ΅ΠΌΡƒΡŽ этими ΠΏΡ€Π°Π²ΠΈΠ»Π°ΠΌΠΈ.

Π’Ρ‹Ρ…ΠΎΠ΄ΠΎΠΌ Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€Π° слуТит Π΄Π΅Ρ€Π΅Π²ΠΎ, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ прСдставляСт ΡΠΈΠ½Ρ‚Π°ΠΊΡΠΈΡ‡Π΅ΡΠΊΡƒΡŽ структуру, ΠΏΡ€ΠΈΡΡƒΡ‰ΡƒΡŽ исходной ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅.(Рисунок 1)

Рисунок 1 — Π”Π΅Ρ€Π΅Π²ΠΎ синтаксичСской структуры.

На Ρ€ΠΈΡΡƒΠ½ΠΊΠ΅ 1 ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ позволяСт Ρ‚Ρ€Π°Π½ΡΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ наша ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°, Π° ΠΈΠΌΠ΅Π½Π½ΠΎ: ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ (Comment_is_find, Comment_is_finish), case (Process_case), write, rewrite, assign (Process_begin, Process_write, Process_rewrite, Process_assign), ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ (Process_Var, Process_Vardescr), ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π½Π° Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡˆΠΈΠ±ΠΎΡ‡Π½Ρ‹Ρ… ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ² (Errore_Program).

5. Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹

НазначСниС ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ:

errore_program — ΠŸΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ошибок, Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Π² ΡΠ΅Π±Ρ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ опрСдСлСния мСста ошибки, Π° Ρ‚Π°ΠΊ ΠΆΠ΅ Π²Ρ‹Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΏΠΎΠ»Π½ΠΎΠΉ ΠΎΡˆΠΈΠ±ΠΎΡ‡Π½ΠΎΠΉ конструкции. Заносит Π΄Π°Π½Π½Ρ‹Π΅ ΠΎ ΠΊΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²Π΅ ошибок Π² ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΡƒΡŽ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ.

comment_is_find — ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡΠ΅Ρ‚ строку Π½Π° Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ коммСнтария, ΠΈ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ Π΅Π³ΠΎ Ссли это Ρ‚Π°ΠΊ.

ReadingWord — ΠŸΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π°Π½Π°Π»ΠΈΠ·Π° тСкста Π½Π° Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ Ρ‚ΠΎΠΊΠ΅Π½ΠΎΠ². ΠžΠΏΡ€Π΅Π΄Π΅Π»ΡΠ΅Ρ‚ Ρ‚ΠΈΠΏ Ρ‚ΠΎΠΊΠ΅Π½Π° ΠΈ Π΄Π΅Π»Π°Π΅Ρ‚ Π΅Π³ΠΎ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΡƒ. Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΏΠΎΠ·ΠΈΡ†ΠΈΡŽ Π½Π°Ρ‡Π°Π»Π°, количСство символов Π² Ρ‚ΠΎΠΊΠ΅Π½Π΅, Π° Ρ‚Π°ΠΊ ΠΆΠ΅ Π΅Π³ΠΎ Ρ‚ΠΈΠΏ. Π—Π°ΠΎΠ΄Π½ΠΎ пропускаСт ΠΏΡ€ΠΎΠ±Π΅Π»Ρ‹.

process_begin — ΠŸΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π±Π»ΠΎΠΊΠ° Begin… End, запускаСтся послС Ρ‚ΠΎΠ³ΠΎ ΠΊΠ°ΠΊ Π²ΠΎ Π²Ρ…ΠΎΠ΄Π½ΠΎΠΌ Ρ„Π°ΠΉΠ»Π΅ встрСчСно слово begin ΠΈ Π·Π°ΠΌΠ΅Π½ΡΠ΅Ρ‚ ΠΈΡ… Π½Π° {…}

Process_Var — ΠŸΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π±Π»ΠΎΠΊΠ° ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… — var. ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡΠ΅Ρ‚ конструкции Π½Π° ΠΈΡ… Ρ‚ΠΈΠΏ: ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ΠΈΠ»ΠΈ ΠΌΠ΅Ρ‚ΠΊΠ°. ПослС Ρ‡Π΅Π³ΠΎ ΠΏΠ΅Ρ€Π΅Π΄Π°Π΅Ρ‚ ΠΏΠΎΡ‚ΠΎΠΊ управлСния Π² Ρ‚Ρƒ ΠΈΠ»ΠΈ ΠΈΠ½ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ.

Comment_is_finish — ΠŸΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ окончания коммСнтария.

ReadingWordS — ΠŸΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° посимвольно просматриваСт Ρ„Π°ΠΉΠ» ΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΠ΅Ρ‚ ΠΊ Ρ‡Π΅ΠΌΡƒ ΠΌΠΎΠΆΠ½ΠΎ отнСсти Π΄Π°Π½Π½Ρ‹ΠΉ символ.

process_rewrite — ΠŸΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ³ΠΎ слова rewrite.

process_assign — ΠŸΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ³ΠΎ слова assign.

process_write — ΠŸΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ³ΠΎ слова write

ОписаниС констант, ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.

ΠšΠΎΠ½ΡΡ‚Π°Π½Ρ‚Ρ‹

Array_Key_Word — константа, которая Ρ€Π°Π²Π½Π° количСству слов Π² ΠΌΠ°ΡΡΠΈΠ²Π΅. Π’ Π½Π°ΡˆΠ΅ΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ ΠΎΠ½ΠΎ Ρ€Π°Π²Π½ΠΎ 16. Π­Ρ‚ΠΎ Ρ‚Π°ΠΊΠΈΠ΅ слова ΠΊΠ°ΠΊ: «begin», «end», «var», «real», «boolean», «false», «true», «type, «and», «or», «case», «assign», «rewrite» ю

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

Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹

void IncDt () — функция ΡƒΠ²Π΅Π»ΠΈΡ‡Π΅Π½ΠΈΠ΅ отступа.

void DecDt () — функция ΡƒΠΌΠ΅Π½ΡŒΡˆΠ΅Π½ΠΈΡ отступа.

void copychar () — ΠΊΠΎΠΏΠΈΡ€ΡƒΠ΅Ρ‚ слово ΠΈΠ· Π²Ρ…ΠΎΠ΄Π½ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π° Π² Π²Ρ‹Ρ…ΠΎΠ΄Π½ΠΎΠΉ Π±Π΅Π· ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ.

int fae () — Π²ΡΠΏΠΎΠΌΠΎΠ³Π°Ρ‚Π΅Π»ΡŒΠ½Π°Ρ подфункция ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ арифмСтичСского выраТСния.

int ae () — функция ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ арифмСтичСского выраТСния.

Ѐункция Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… ΠΊΠΎΠ΄ΠΎΠ²

// ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ² слов

Word_errore 0 // Π˜Π΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ ΠΎΡˆΠΈΠ±ΠΎΡ‡Π½ΠΎΠ³ΠΎ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π°

Word_space 1 // Π˜Π΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ символа ΠΏΡ€ΠΎΠ±Π΅Π»Π°

Word_string 2 // Π˜Π΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ строки

Word_numb 3 // Π˜Π΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ числа

Word_char 4 // Π›ΡŽΠ±Ρ‹Π΅ символы Ρ€Π°Π·Π΄Π΅Π»ΠΈΡ‚Π΅Π»ΠΈ, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ n t ΠΈ Ρ‚Π΄

Π’Π°Π±Π»ΠΈΡ†Π° ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΉ:

ΠšΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово

НомСр

KeyS_begin

KeyS_end

KeyS_var

KeyS_real

KeyS_boolean

KeyS_false

KeyS_true

KeyS_array

KeyS_type

KeyS_and

KeyS_or

KeyS_case

KeyS_assign

KeyS_read

KeyS_write

KeyS_rewrite

6. Листинг ΠΊΠΎΠ΄Π°

// Gladky. cpp: опрСдСляСт Ρ‚ΠΎΡ‡ΠΊΡƒ Π²Ρ…ΠΎΠ΄Π° для консольного прилоТСния.

#include

#include

#include

#include

#include

FILE *filename1, *filename2;

const int allbuf = 10 000;//вСсь исходный тСкст прСдставляСтся ΠΎΠ΄Π½ΠΎΠΉ большой символьной строкой, Π° Π½Π΅ ΠΌΠ°ΡΡΠΈΠ²ΠΎΠΌ символов, это максимальная Π΄Π»ΠΈΠ½Π°

const int Array_Key_Word = 18;

char * KWs[Array_Key_Word] =

{

" begin", «end», «var», «real» ,

" boolean", «false», «true», «array» ,

" while", «do», «type», «and» ,

" or", «case», «assign», «read» ,

" write", «rewrite»

};// это массив ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Ρ… слов, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°ΡŽΡ‚ΡΡ Π΄Π°Π½Π½ΠΎΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΎΠΉ

//ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹ΠΉ слова

//ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡƒ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠΌΡƒ слову присвоСн Π½ΠΎΠΌΠ΅Ρ€, это Π±ΡƒΠ΄Π΅Ρ‚ дальшС ΠΈΡΠΏΠΎΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π² ΠΏΡ€ΠΎΠ³Π΅

#define KeyS_begin 1

#define KeyS_end 2

#define KeyS_var 3

#define KeyS_real 4

#define KeyS_boolean 5

#define KeyS_false 6

#define KeyS_true 7

#define KeyS_array 8

#define KeyS_while 9

#define KeyS_do 10

#define KeyS_type 11

#define KeyS_and 12

#define KeyS_or 13

#define KeyS_case 14

#define KeyS_assign 15

#define KeyS_read 16

#define KeyS_write 17

#define KeyS_rewrite 18

//Ρ‚ΠΈΠΏΡ‹

//Ρ‚ΠΎΠΆΠ΅ присвоСны Π½ΠΎΠΌΠ΅Ρ€Π°

#define t_Int 1 //Ρ†Π΅Π»Ρ‹ΠΉ

#define t_Real 2 //Π΄Ρ€ΠΎΠ±Π½Ρ‹ΠΉ

#define t_Bool 3 //логичСский

#define t_Array 4 //массив

#define t_File 5

const int cuservars = 6;

int uvars;

//Ρ‚ΠΈΠΏ «ΡΠ»ΠΎΠ²Π°»

#define Word_errore 0 //ошибка

#define Word_space 1 //ΠΏΡ€ΠΎΠ±Π΅Π»Ρ‹

#define Word_string 2 //строка

#define Word_numb 3 //число

#define Word_char 4 //символ (Ρ€Π°Π·Π΄Π΅Π»ΠΈΡ‚Π΅Π»ΡŒ, …)

//собствСнно это наши Π²Ρ…ΠΎΠ΄Π½Ρ‹Π΅ ΠΈ Π²Ρ‹Ρ…ΠΎΠ΄Π½Ρ‹Π΅ большиС строки, Π² ΡΡ‚ΠΈ большиС

//строки Π·Π°ΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‚ΡΡ Ρ‚Π°ΠΊΠΆΠ΅ символы ΠΊΠΎΠ½Ρ†Π° строки 'n', Ρ‡Ρ‚ΠΎ ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ся Π² Π΄Π°Π»ΡŒΠ½Π΅ΠΉΡˆΠ΅ΠΌ для формирования Π²Ρ‹Ρ…ΠΎΠ΄Π½ΠΎΠ³ΠΎ тСста построчно

char instr[allbuf],

outstr[allbuf];

int inlen, outlen, inpos;//Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠ΅ ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ (строки Π²Ρ…ΠΎΠ΄Π½Ρ‹Π΅, Π²Ρ‹Ρ…ΠΎΠ΄Π½Ρ‹Π΅, позиция Π² ΡΡ‚Ρ€ΠΎΠΊΠ΅ Π²Ρ…ΠΎΠ΄Π½ΠΎΠΉ)

int koper1, koper2,ker;//эти ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ΡΡ‡ΠΈΡ‚Π°ΡŽΡ‚ количСство ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ² Π²ΠΎ Π²Ρ…ΠΎΠ΄Π½ΠΎΠΌ, Π²Ρ‹Ρ…ΠΎΠ΄Π½ΠΎΠΌ Ρ„Π°ΠΉΠ»Π΅ ΠΈ ΠΊΠΎΠ»-Π²ΠΎ ошибок

int wlen; //Π΄Π»ΠΈΠ½Π° «ΡΠ»ΠΎΠ²Π°»

int wtype; //Ρ‚ΠΈΠΏ «ΡΠ»ΠΎΠ²Π°»

int wnumf; //0 — Ρ†Π΅Π»ΠΎΠ΅ число, 1 — Π΄Ρ€ΠΎΠ±Π½ΠΎΠ΅

int dt; //Ρ€Π°Π·ΠΌΠ΅Ρ€ отступа (ΠΎΡ‚ Π½Π°Ρ‡Π°Π»Π° строки)

typedef struct var{ //элСмСнт списка ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…

char s[64]; //ΠΈΠ΄Π΅Π½Ρ‚-Ρ€ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ

int tp; //Ρ‚ΠΈΠΏ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ

var * next;

};

typedef struct types{ //элСмСнт списка Ρ‚ΠΈΠΏΠΎΠ²

char s[64]; //ΠΈΠ΄Π΅Π½Ρ‚-Ρ€ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ

int tid;

types * next;

};

var *vars, *lvars; //списки ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…

//(Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹Ρ… ΠΈ Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ…)

types * typeslist;

// ΠΏΡ€ΠΎΡ‚ΠΎΡ‚ΠΈΠΏΡ‹ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ

int fle ();

// Π”Π°Π»ΡŒΠ½Π΅ΠΉΡˆΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΎΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‚ Ρ€Π°Π±ΠΎΡ‚Ρƒ с Π΄ΠΈΠ½Π°ΠΌΠΈΡ‡Π΅ΡΠΊΠΎΠΉ ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ,

// Π’ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ создаСтся список с ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌΠΈ, ΠΈΡ… Ρ‚ΠΈΠΏΠ°ΠΌΠΈ ΠΈ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ

// Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ этот список, Π·Π°Ρ‚Π΅ΠΌ ΠΈΠ΄Π΅Ρ‚ построСниС Ρ€Π°Π·Π΄Π΅Π»Π° объявлСния ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…

// Π² c++

//Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ Π² ΡΠΏΠΈΡΠΎΠΊ

// Π³Π΄Π΅ gl — Ρ‚ΠΈΠΏ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ, глобальная ΠΈΠ»ΠΈ локальная.

int addvar (int gl){

var *np, *p;

if (gl) p = vars; else p = lvars;

// int memcmp (const void *buf1, const void *buf2, size_t count);

// Ѐункция memcmp () сравниваСт ΠΏΠ΅Ρ€Π²Ρ‹Π΅ count символов массивов, адрСсуСмых ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌΠΈ buf1 ΠΈ buf2.

// buf1 мСньшС buf2 = мСньшС нуля

// buf1 Ρ€Π°Π²Π΅Π½ buf2 = 0

// buf1 большС buf2 = большС нуля

while (p) {

if (strlen (p->s)==wlen&&

!memcmp (p->s,&instr[inpos], wlen)) return 0;

p = p->next;

}

np = new var;

// void *memcpy (void *to, const void *from, size_t count);

// Ѐункция memcpy () ΠΊΠΎΠΏΠΈΡ€ΡƒΠ΅Ρ‚ count символов ΠΈΠ· ΠΌΠ°ΡΡΠΈΠ²Π°,

// адрСсуСмого ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠΌ from, Π² ΠΌΠ°ΡΡΠΈΠ², адрСсуСмый ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠΌ to.

// Если Π·Π°Π΄Π°Π½Π½Ρ‹Π΅ массивы ΠΏΠ΅Ρ€Π΅ΠΊΡ€Ρ‹Π²Π°ΡŽΡ‚ΡΡ, ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ memcopy () Π½Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΎ.

memcpy (np->s,&instr[inpos], wlen);

// послС ΠΈΠΌΠ΅Π½ΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΌΡ‹ Π·Π°ΠΏΠΈΡΡ‹Π²Π°Π΅ΠΌ 0 (ΠΌΠ΅Ρ‚ΠΊΠ°

// Ρ‡Ρ‚ΠΎ Π±Ρ‹ ΠΏΠΎΡ‚ΠΎΠΌ Ρ‡ΠΈΡ‚Π°Ρ‚ΡŒ имя ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π΄ΠΎ ΡΡ‚ΠΎΠ³ΠΎ символа)

np->s[wlen]=0;

// Ρ‚ΠΈΠΏ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π·Π°Π΄Π°Π΅ΠΌ ΠΊΠ°ΠΊ -1 (ΠΌΠ΅Ρ‚ΠΊΠ°, Ρ‡Ρ‚ΠΎ Π±Ρ‹ ΠΏΠΎΡ‚ΠΎΠΌ ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ)

np->tp = -1;

// Если глобальная пСрСмСнная, Ρ‚ΠΎ Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅ΠΌ этот элСмСнт Π² Π½Π°Ρ‡Π°Π»ΠΎ

// (Ρ‚.Π΅. получаСтся стСк ΠΈΠ· ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…) списка Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹Ρ… ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…

// ΠΈΠ½Π°Ρ‡Π΅ Π² Π½Π°Ρ‡Π°Π»ΠΎ списка Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ…

if (gl) {

np->next = vars;

vars = np;

} else {

np->next = lvars;

lvars = np;

}

return 1;

}

int addnewtype ()

{

types *head=typeslist, *ntype;

while (head) {

if (strlen (head->s)==wlen&&

!memcmp (head->s,&instr[inpos], wlen)) return 0;

head = head->next;

}

ntype = new types;

memcpy (ntype->s,&instr[inpos], wlen);

ntype->s[wlen]=0;

ntype->tid = uvars;

uvars++;

ntype->next = typeslist;

typeslist = ntype;

return 1;

}

//установка Ρ‚ΠΈΠΏΠ° ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ

// Ссли gl — ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ = 1, Ρ‚ΠΎ ΡΡ‚ΠΎ глобальная пСрСмСнная

// ΠΈΠ½Π°Ρ‡Π΅ локальная

// Π΅ΡΡ‚ΡŒ Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅ Ρ‚ΠΈΠΏΠ° ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… (описаны Π²Ρ‹ΡˆΠ΅)

// ΠΊΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡŽ while ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π°ΡΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚Π°ΠΊ:

// ΠΏΠΎΠΊΠ° ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° ΡΡ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Ρƒ p ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΠ΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ:

// Ссли Ρ‚ΠΈΠΏ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ -1 Ρ‚ΠΎ ΠΏΡ€ΠΈΡΠ²ΠΎΠΈΡ‚ΡŒ Π΅ΠΉ Π·Π°Π΄Π°Π½Π½Ρ‹ΠΉ Ρ‚ΠΈΠΏ

// ΠΈ Π΄Π°Π»Π΅Π΅ шаг Π²ΠΏΠ΅Ρ€Π΅Π΄

void settype (int gl, int type){

var *p;

if (gl) p = vars; else p = lvars;

while (p) {

if (p->tp==-1) p->tp = type;

p = p->next;

}

}

// ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ Ρ‚ΠΈΠΏΠ° ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ

// ΠΏΡ€ΠΈ этом Ρ‚ΠΈΠΏ ΡƒΠΆΠ΅ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Π» Π·Π°Ρ€Π°Π½Π΅Π΅ Π·Π°Π΄Π°Π½

int vartype (){

var * p;

// ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…

p = lvars;

while (p) {

if (strlen (p->s)==wlen&& // Ссли слово Π²ΠΎ Π²Ρ…ΠΎΠ΄Π½ΠΎΠΌ тСкстС Ρ€Π°Π²Π½ΠΎ названию ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ (Π² ΡΠΏΠΈΡΠΊΠ΅),

!memcmp (p->s,&instr[inpos], wlen)) return p->tp; // Ρ‚ΠΎ Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ Ρ‚ΠΈΠΏ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ

p = p->next;

}

// ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹Ρ… ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…

p = vars;

while (p) {

if (strlen (p->s)==wlen&&

!memcmp (p->s,&instr[inpos], wlen)) return p->tp;

p = p->next;

}

return 0;

}

char* usertype ()

{

types * p;

// ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…

p = typeslist;

while (p) {

if (strlen (p->s)==wlen&& // Ссли слово Π²ΠΎ Π²Ρ…ΠΎΠ΄Π½ΠΎΠΌ тСкстС Ρ€Π°Π²Π½ΠΎ названию ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ (Π² ΡΠΏΠΈΡΠΊΠ΅),

!memcmp (p->s,&instr[inpos], wlen)) return p->s; // Ρ‚ΠΎ Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ Ρ‚ΠΈΠΏ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ

p = p->next;

}

return «0» ;

}

// освобоТдСниС списка ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…

// просто ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ ΠΎΠ±ΠΎΠΈΡ… списков

// ΠΊΠ°ΠΊ для Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…, Ρ‚Π°ΠΊ ΠΈ Π΄Π»Ρ Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹Ρ…

void freevars (int gl){

var *p, *pp;

p = lvars;

while (p) {

pp = p;

p = p->next;

delete pp;

}

lvars = NULL;

if (gl) {

p = vars;

while (p) {

pp = p;

p = p->next;

delete pp;

}

vars = NULL;

}

}

// Одна ΠΈΠ· Π³Π»Π°Π²Π½Ρ‹Ρ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ слова, здСсь посимвольно анализируСтся тСкст

// Π’ΠΊΡ€Π°Ρ‚Ρ†Π΅ описаниС выглядит Ρ‚Π°ΠΊ

// ΠΏΡ€ΠΎΠ³Π° Π°Π½Π°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅Ρ‚ тСкст посимвольно ΠΈ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π· опрСдСляСт Ρ‚ΠΈΠΏ символа

// (число, Π±ΡƒΠΊΠ²Π°, ΠΏΡ€ΠΎΠ±Π΅Π» ΠΈΡ‚.Π΄.),

// ΠΊΠΎΠ³Π΄Π° удаСтся ясно ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ этого символа (Ρ†ΠΈΡ„Ρ€Π°, пСрСмСнная ΠΈ Ρ‚. Π΄.)

// ΠΈΠ»ΠΈ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ символов (пСрСмнная, ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово ΠΈ Ρ‚. Π΄.)

// Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ прСрываСтся ΠΎΠ½Π° Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Ρ‚ΠΈΠΏ этого слова

//Ѐункция Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… ΠΊΠΎΠ΄ΠΎΠ²

////Ρ‚ΠΈΠΏ «ΡΠ»ΠΎΠ²Π°»

// Word_errore 0 //ошибка

// Word_space 1 //ΠΏΡ€ΠΎΠ±Π΅Π»Ρ‹

// Word_string 2 //строка

// w_numb 3 //число

// Word_char 4 //символ (Ρ€Π°Π·Π΄Π΅Π»ΠΈΡ‚Π΅Π»ΡŒ, …)

// Ρ‡Ρ‚Π΅Π½ΠΈΠ΅ слова

int ReadingWord ()

{

int st = 0;

char c; // символ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ сравниваСтся

wlen = 0;// Π΄Π»ΠΈΠ½Π° Π°Π½Π°Π»ΠΈΠ·ΡƒΡ€ΡƒΠ΅ΠΌΠΎΠ³ΠΎ слова

while (wlen+inpos

c = instr[inpos+wlen];

switch (st){ // ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ символа ΠΈ Π΄Π°Π»ΡŒΠ½Π΅ΠΉΡˆΠΈΠΉ Π²Ρ‹Π±ΠΎΡ€ направлСния ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ

case 0:

if (c==' ' || c=='t' || c=='n') st = 1;

else

if ((c>='A' && c<='Z')||(c>='a' && c<='z')) st = 2;

else

if (c>='0' && c<='9') st = 3;

else

if (

c=='.' || c<=',' || c >=':' || c<=';' ||

c=='+' || c<='-' || c>='*' || c<='/' ||

c=='''

)

{ wlen = 1; return wtype = Word_char; }//Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ это символ

else { wlen = 0; return wtype = Word_errore; }

break;

case 1:

if (c==' ' || c=='t' || c=='n') wlen++;

else return wtype = Word_space; ///Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ это символ ΠΏΡ€ΠΎΠ±Π΅Π»

break;

case 2:

if (

(c>='A' && c<='Z') ||

(c>='a' && c<='z') ||

(c>='0' && c<='9') ||

c=='_'

) wlen++;

else return wtype = Word_string;

break;

case 3:

if (c>='0' && c<='9') wlen++; else

if (c=='.'&& instr[inpos+wlen+1]≠'.') { // Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚, Ρ‡Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ Ρ‚ΠΎΡ‡ΠΊΠ° Π² Ρ‡ΠΈΡΠ»Π΅, Ρ‚. Π΅ ΠΎΠ½ΠΎ Π΄Ρ€ΠΎΠ±Π½ΠΎΠ΅

wlen++;

st = 5;

}

else{

wnumf = 0;

return wtype = w_numb;//Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ это число

}

break;

case 5:

if (c>='0' && c<='9') wlen++; else {

wnumf = 1;

return wtype = w_numb;//Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ это число (Π΄Ρ€ΠΎΠ±Π½ΡƒΡŽ Ρ‡Π°ΡΡ‚ΡŒ)

}

}

}

wlen = 0;

return 0;

}

//запись строки Π² Π²Ρ‹Ρ…ΠΎΠ΄Π½ΠΎΠΉ Π±ΡƒΡ„Π΅Ρ€

void put_str (char * s){

int l = strlen (s);

memcpy (&outstr[outlen], s, l);

outlen += l;

}

int scmp (char * m, char * s, int n){

int l = strlen (s);

if (n>l) l = n;

/*int memicmp (buf1, buf2, cnt);

char *buf1; ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ Π±ΡƒΡ„Π΅Ρ€

char *buf2; Π²Ρ‚ΠΎΡ€ΠΎΠΉ Π±ΡƒΡ„Π΅Ρ€

unsigned cnt; количСство символов

Ѐункция memicmp лСксикографичСски сравниваСт ΠΏΠ΅Ρ€Π²Ρ‹Π΅ cnt

Π±Π°ΠΉΡ‚ΠΎΠ² ΠΈΠ· buf1 ΠΈ buf2 Π²Π½Π΅ зависимости ΠΎΡ‚ Ρ‚ΠΈΠΏΠ° рСгистра, Ρ‚. Π΅. Π±ΡƒΠΊ;

Π²Ρ‹ Π²Π΅Ρ€Ρ…Π½Π΅Π³ΠΎ ΠΈ Π½ΠΈΠΆΠ½Π΅Π³ΠΎ рСгистров ΡΡ‡ΠΈΡ‚Π°ΡŽΡ‚ΡΡ эквивалСнтными. Ѐункция

memicmp Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‰Π΅Π΅ ΡΠΎΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠ΅ buf1 ΠΈ buf2,

Π° ΠΈΠΌΠ΅Π½Π½ΠΎ:

Π’Π΅Π»ΠΈΡ‡ΠΈΠ½Π° Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅

мСньшС 0 buf1 мСньшС, Ρ‡Π΅ΠΌ buf2

0 buf1 ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ‡Π½ΠΎ buf2

большС 0 buf1 большС, Ρ‡Π΅ΠΌ buf2*/

return memicmp (m, s, l);

}

//запись символа Π² Π²Ρ‹Ρ…ΠΎΠ΄Π½ΠΎΠΉ Π±ΡƒΡ„Π΅Ρ€

void put_char (char c){

outstr[outlen] = c;

outlen++;

}

void copychar (){

memcpy (&outstr[outlen],&instr[inpos], wlen);

inpos += wlen;

outlen += wlen;

}

int wequ (char * s){

return (!scmp (&instr[inpos], s, wlen));

}

//пропускаСт ΠΏΡ€ΠΎΠ±Π΅Π»Ρ‹

void wskip (){

inpos += wlen;

}

void wstr (char * s){

// char *strncpy (char *dst, const char *src, size_t len);

// dst — ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° Π±ΡƒΡ„Π΅Ρ€ назначСния.

// src — ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° ΠΈΡΡ…ΠΎΠ΄Π½ΡƒΡŽ строку.

// len — максимальноС количСство ΠΊΠΎΠΏΠΈΡ€ΡƒΠ΅ΠΌΡ‹Ρ… символов (см. Ρ€Π°Π·Π΄Π΅Π» Π‘Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ‚ΡŒ Π½ΠΈΠΆΠ΅).

// Ѐункция ΠΊΠΎΠΏΠΈΡ€ΡƒΠ΅Ρ‚ ΠΈΠ· ΡΡ‚Ρ€ΠΎΠΊΠΈ src Π² Π±ΡƒΡ„Π΅Ρ€ dst Π½Π΅ Π±ΠΎΠ»Π΅Π΅ Ρ‡Π΅ΠΌ len символов

// (Π²ΠΊΠ»ΡŽΡ‡Π°Ρ Π½ΡƒΠ»Π΅Π²ΠΎΠΉ символ), Π½Π΅ Π³Π°Ρ€Π°Π½Ρ‚ируя Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ строки

// Π½ΡƒΠ»Π΅Π²Ρ‹ΠΌ символом (Ссли Π΄Π»ΠΈΠ½Π° строки src большС ΠΈΠ»ΠΈ Ρ€Π°Π²Π½Π° len).

// Если Π΄Π»ΠΈΠ½Π° строки src мСньшС len, Ρ‚ΠΎ Π±ΡƒΡ„Π΅Ρ€ добиваСтся Π΄ΠΎ len нулями.

// Ѐункция Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ dst.

strncpy (s,&instr[inpos], wlen);

}

//ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ слов, ΠΈ Π΅ΡΠ»ΠΈ Ρ‚ΠΈΠΏ слова ΠΏΡ€ΠΎΠ±Π΅Π»Ρ‹, запускаСт ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρƒ, ΠΏΡ€ΠΎΠΏΡƒΡΠΊΠ°ΡŽΡ‰ΡƒΡŽ ΠΏΡ€ΠΎΠ±Π΅Π»Ρ‹

int ReadingWordS (){

ReadingWord ();

if (wtype==Word_space) {

wskip ();

ReadingWord ();

}

return wtype;

}

//ΡƒΠ²Π΅Π»ΠΈΡ‡Π΅Π½ΠΈΠ΅ отступа

void IncDt ()

{

dt += 2;

}

//ΡƒΠΌΠ΅Π½ΡŒΡˆΠ΅Π½ΠΈΠ΅ отступа

void DecDt ()

{

dt -= 2;

}

//Π²Ρ‹Π²ΠΎΠ΄ отступа

void put_dt ()

{

for (int i=0; i

}

//Π²Ρ‹Π²ΠΎΠ΄ отступа

void put_dt11()

{

char s[10];

for (int i=0; i

sprintf (s," %d", i/2);

put_str (s);

}

}

//ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ Ρ„Π°ΠΉΠ»Π°

int RecText (char * s1)

{

if ((filename1 = fopen (s1, «rt»)) == NULL){

return 0;

}

fseek (filename1, 0, SEEK_END);

inlen = ftell (filename1);

fseek (filename1, 0, SEEK_SET);

if (inlen>allbuf) inlen = allbuf;

inlen = Process_read (instr, 1, inlen, filename1);

instr[inlen] = 0;

inpos = 0;

outlen = 0;

return 1;

}

//Π²Ρ‹Π²ΠΎΠ΄ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π½Π½ΠΎΠ³ΠΎ тСкста

int PutText (char * s2)

{

if ((filename2 = fopen (s2, «wt»)) == NULL){

return 0;

}

Process_write (outstr, outlen, 1, filename2);

return 1;

}

//Π²Ρ‹Π²ΠΎΠ΄ ΠΎΡˆΠΈΠ±ΠΎΡ‡Π½ΠΎΠ³ΠΎ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π°

void errore_program ()

{

put_char ('n');

put_str («< Ошибка! > n»);

int k;

while (1){

ReadingWordS ();

if (instr[inpos]== ';' || inpos>= inlen) {

copychar ();

break;

};

copychar ();

}

ker++; // ΡƒΠ²Π΅Π»ΠΈΡ‡Π΅Π½ΠΈΠ΅ счСтчика ошибок

}

int flabel (int gl);

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

int Comment_is_find (){

return (instr[inpos]=='instr[inpos+1]=='*');

//ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π½Π° Π·Π°ΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ коммСнтария

void Comment_is_finish (){

if (instr[inpos]=='{'){

outstr[outlen] = '/';

outstr[outlen+1] = '*';

inpos++;

outlen += 2;

while (instr[inpos]≠'}' && inpos

if (inpos>=inlen) return;

outstr[outlen] = instr[inpos];

inpos++;

outlen++;

}

outstr[outlen] = '*';

outstr[outlen+1] = '/';

inpos++;

outlen += 2;

}

else{

outstr[outlen] = '/';

outstr[outlen+1] = '*';

inpos += 2;

outlen += 2;

while (!(instr[inpos]=='*' && instr[inpos+1]==')')

&& inpos

if (inpos>=inlen) return;

outstr[outlen] = instr[inpos];

inpos++;

outlen++;

}

outstr[outlen] = '*';

outstr[outlen+1] = '/';

inpos += 2;

outlen += 2;

}

put_char ('n');

}

// здСсь ΠΈΠ΄Π΅Ρ‚ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π½Π° ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово,

// ΡΡ€Π°Π²Π½ΠΈΠ²Π°ΡŽΡ‚ΡΡ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½ΠΎΠ΅ Π½Π°ΠΌΠΈ слово со ΡΠ»ΠΎΠ²ΠΎΠΌ ΠΈΠ· ΡΠΏΠΈΡΠΊΠ°

// ΠΈ Π΅ΡΠ»ΠΈ Π΄Π°, Ρ‚ΠΎ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ся Π½ΠΎΠΌΠ΅Ρ€ слова Π² ΡΠΏΠΈΡΠΊΠ΅

// ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π½Π° ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово

int fkW (){

for (int i=0; i

if (!scmp (&instr[inpos], KWs[i], wlen))

return i+1;

}

return 0;

}

// Π²ΠΎΡ‚ это ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… послС слова var,

// здСсь ΠΈΠ΄ΡƒΡ‚ обращСния ΠΊ Ρ‚Π΅ΠΌ Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅ΠΌ функциям Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰ΠΈΠΌ со ΡΠΏΠΈΡΠΊΠΎΠΌ ΠΏΠ΅Ρ€Π΅ΠΌΠ½Π½Ρ‹Ρ…

// ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° описания ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…: x1,., xn: Ρ‚ΠΈΠΏ;

int fIntRealBoolAr (int svar, int gl){

char s[256];

int label;

int sp = 0;

ReadingWordS ();

while (1){

if (wtype≠Word_string||fkW ()|| gl>0&&vartype ()) return 0;

addvar (gl);

if (svar) {

s[sp] = '&';

s[sp+1] = ' ';

sp += 2;

}

memcpy (&s[sp],&instr[inpos], wlen);

inpos += wlen;

sp += wlen;

ReadingWordS ();

if (instr[inpos]==','){

s[sp]=',';

inpos++;

sp++;

} else break;

ReadingWordS ();

} // while (1)

if (instr[inpos]==':'){ //Ρ‚ΠΈΠΏ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…

inpos++;

ReadingWordS ();

if (wtype≠Word_string) return 0;

if (!scmp (&instr[inpos]," boolean", wlen)){

settype (gl, t_Bool);

put_str («int «);

wskip ();

memcpy (&outstr[outlen],&s[0], sp);

outlen += sp;

}

else

if (!scmp (&instr[inpos]," real", wlen)){

settype (gl, t_Real);

put_str («float «);

wskip ();

memcpy (&outstr[outlen],&s[0], sp);

outlen += sp;

}

else

if (!scmp (&instr[inpos]," integer", wlen)){

settype (gl, t_Int);

put_str («int «);

wskip ();

memcpy (&outstr[outlen],&s[0], sp);

outlen += sp;

}

else

if (!scmp (&instr[inpos], usertype (), wlen)){

put_str (usertype ());

put_str (««);

wskip ();

memcpy (&outstr[outlen],&s[0], sp);

outlen += sp;

}

else

if (!scmp (&instr[inpos]," array", wlen)){

wskip ();

settype (gl, t_Array);

ReadingWordS ();

if (instr[inpos]≠'[') return 0;

s[sp]='[';

inpos++;

sp++;

while (1) {

ReadingWordS ();

if (instr[inpos]≠'1') return 0;

wskip ();

ReadingWordS ();

if (instr[inpos]≠'.'||instr[inpos+1]≠'.')

return 0;

inpos += 2;

ReadingWordS ();

if (wtype≠w_numb) return 0;

memcpy (&s[sp],&instr[inpos], wlen);

inpos += wlen;

sp += wlen;

ReadingWordS ();

if (instr[inpos]==']'){

s[sp]=']';

inpos++;

sp++;

break;

}

if (instr[inpos]==','){

inpos++;

s[sp]=']';

sp++;

s[sp]='[';

sp++;

}

}

ReadingWordS ();

if (wtype≠Word_string) return 0;

if (scmp (&instr[inpos]," of", wlen)) return 0;

wskip ();

ReadingWordS ();

if (wtype≠Word_string) return 0;

if (scmp (&instr[inpos]," real", wlen)) return 0;

wskip ();

put_str («float «);

memcpy (&outstr[outlen],&s[0], sp);

outlen += sp;

}

if (wequ («file»))

{

wskip ();

ReadingWordS ();

if (!wequ («of»)) return 0;

wskip ();

ReadingWordS ();

put_str («FILE *»);

memcpy (&outstr[outlen],&s[0], sp);

outlen += sp;

wskip ();

settype (gl, t_File);

}

}

else return 0;

return 1;

}

//ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° описания Π±Π»ΠΎΠΊΠ° ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…

int Process_var (int gl){

inpos += wlen;

ReadingWordS ();

do{

koper1++;

if (Comment_is_find ()){ //ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ

Comment_is_finish ();

koper2++;

continue;

}

put_dt ();

if (!fIntRealBoolAr (0,gl)) errore_program ();

else koper2++;

ReadingWordS ();

if (instr[inpos]≠';')

return 0;

wskip ();

put_str («;n»);

ReadingWordS ();

if (wtype≠Word_string || fkW ())

return 1;

}while (1);

}

//ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π±Π»ΠΎΠΊΠ° описания ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…

int Process_vardescr (){

inpos += wlen;

int k, svar;

ReadingWordS ();

do{

k = fkW ();

svar = k==KeyS_var;

if (svar) {

wskip ();

ReadingWordS ();

}

if (!fIntRealBoolAr (svar, 0)) return 0;

ReadingWordS ();

if (instr[inpos]≠';') return 1;

wskip ();

put_str («, «);

ReadingWordS ();

k= fkW ();

if (wtype≠Word_string || k&&k≠KeyS_var) return 0;

}while (1);

}

int fbegin (int k);

//ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° case

int Process_case ()

{

int beg;

wskip ();

put_dt ();

put_str («switch»);

put_str («(»);

ReadingWordS ();

copychar ();

put_str («){n»);

ReadingWordS ();

if (!wequ («of»)) return 0;

wskip ();

while (1)

{

ReadingWordS ();

if (wequ («end»)) {

wskip ();

inpos++;

DecDt ();

put_dt ();

put_str («}n»);

break;

}

put_dt ();

put_str («case «);

if ((wtype≠Word_string)&&(wtype≠w_numb)&&(wtype≠Word_char)) return 0;

if (instr[inpos]==''') {wskip (); put_str («'»);}

ReadingWordS ();

copychar ();

if (instr[inpos]==''') {wskip (); put_str («'»);}

ReadingWordS ();

if (instr[inpos]≠':') return 0;

copychar ();

ReadingWordS ();

beg = 0; // ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΠΎΠΆΠΈΠ΄Π°Π΅ΠΌ case 1: blabla;

if (wequ («begin»)) {wskip (); beg = 1;}; // beg — для ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ begin end Π² ΠΊΠ΅ΠΉΡ.

put_str («n»);

IncDt ();

fbegin (3); // 3 — ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ case

DecDt ();

if (wequ («end»)&&beg)

{

put_dt ();

put_str («break;n»);

wskip ();

if (instr[inpos]==';') inpos++;

} else { put_dt (); put_str («break;n»);}

}

return 1;

}

int Process_rewrite ()

{

wskip ();

if (instr[inpos]≠'(') return 0;

inpos++;

put_dt ();

put_str («fcreate (»);

ReadingWordS ();

if (vartype ()≠t_File) return 0;

copychar ();

if (instr[inpos]≠')') return 0;

inpos++;

put_str («)»);

if (instr[inpos]≠';') return 0;

inpos++;

put_str («;n»);

return 1;

}

int Process_reset ()

{

wskip ();

if (instr[inpos]≠'(') return 0;

inpos++;

ReadingWordS ();

wskip ();

if (instr[inpos]≠')') return 0;

inpos++;

if (instr[inpos]≠';') return 0;

inpos++;

return 1;

}

int Process_assign ()

{

int t;

wskip ();

if (instr[inpos]≠'(') return 0;

inpos++;

ReadingWordS ();

if (t = vartype ())

{

if (t==t_File)

{

put_dt ();

copychar ();

put_str («= fopen (««);

if (instr[inpos]≠',') return 0;

inpos+=2;

while (instr[inpos]≠ ''')

{

outstr[outlen] = instr[inpos];

inpos++;

outlen++;

}

inpos++;

put_str (««»);

put_str («,» w" «);

ReadingWordS ();

if (instr[inpos]≠')') return 0;

inpos++;

put_str («)»);

if (instr[inpos]≠';') return 0;

inpos++;

put_str («;n»);

return 1;

}

}

return 1;

}

//ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° read

int Process_read (int ln){

char s[256];

int sp;

int t;

wskip ();

put_dt ();

ReadingWordS ();

if (instr[inpos]≠'(') return 0;

inpos++;

ReadingWordS ();

if (t = vartype ())

{

if (t==t_File)

{

put_str («fscanf (»);

copychar ();

if (instr[inpos]≠',') return 0;

inpos++;

put_str («,»);

while (instr[inpos]≠ ')')

{

outstr[outlen] = instr[inpos];

inpos++;

outlen++;

}

ReadingWordS ();

if (instr[inpos]≠')') return 0;

inpos++;

put_str («)»);

if (instr[inpos]≠';') return 0;

inpos++;

put_str («;n»);

return 1;

}

}

put_str («scanf»);

put_str («(» «);

sp=0;

while (1) {

ReadingWordS ();

if (wtype≠Word_string) return 0;

t = vartype ();

if (t==t_Int) put_str («%d»);

else if (t==t_Real) put_str («%f»);

else return 0;

s[sp] = '&';

sp += wlen;

ReadingWordS ();

memcpy (&s[sp],&instr[inpos], wlen);

inpos += wlen;

sp += wlen;

ReadingWordS ();

if (instr[inpos]≠',') break;

s[sp] = instr[inpos];

inpos++;

sp++;

}

put_str (««,»);

memcpy (&outstr[outlen], s, sp);

outlen += sp;

ReadingWordS ();

if (instr[inpos]≠')') return 0;

inpos++;

put_char (')');

ReadingWordS ();

if (instr[inpos]≠';') return 0;

inpos++;

if (ln) put_str («; printf („\n“);n»);

else put_str («;n»);

return 1;

}

//ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° write

int Process_write (int ln){

char s[256];

int sp;

int t;

wskip ();

put_dt ();

ReadingWordS ();

if (instr[inpos]≠'(') return 0;

inpos++;

/* ΠžΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Ρ„Π°ΠΉΠ»Π° */

ReadingWordS ();

if (t = vartype ())

{

if (t==t_File)

{

put_str («fprintf (»);

copychar ();

if (instr[inpos]≠',') return 0;

inpos+=2;

put_str («,» «);

while (instr[inpos]≠ ''')

{

outstr[outlen] = instr[inpos];

inpos++;

outlen++;

}

inpos++;

put_str (««»);

ReadingWordS ();

if (instr[inpos]≠')') return 0;

inpos++;

put_str («)»);

if (instr[inpos]≠';') return 0;

inpos++;

put_str («;n»);

return 1;

}

}

put_str («printf»);

put_char ('(');

ReadingWordS ();

if (instr[inpos]≠''') return 0;

put_char ('" ');

inpos++;

while (instr[inpos]≠ ''') {

outstr[outlen] = instr[inpos];

inpos++;

outlen++;

}

inpos++;

if (instr[inpos]==')')

{

if (ln) put_str («\n»);

put_char (')');

inpos++;

if (instr[inpos]≠';') return 0;

inpos++;

put_str («;n»);

return 1;

}

if (instr[inpos]≠',') return 0;

inpos++;

sp=0;

while (1) {

ReadingWordS ();

if (wtype≠Word_string) return 0;

t = vartype ();

if (t==t_Int) put_str («%d»);

else if (t==t_Real) put_str («%f»);

else return 0;

memcpy (&s[sp],&instr[inpos], wlen);

inpos += wlen;

sp += wlen;

ReadingWordS ();

if (instr[inpos]≠',') break;

s[sp] = instr[inpos];

inpos++;

sp++;

}

if (ln) put_str («\n»);

put_char ('" ');

ReadingWordS ();

put_str («,»);

memcpy (&outstr[outlen], s, sp);

outlen += sp;

ReadingWordS ();

if (instr[inpos]≠')') return 0;

inpos++;

put_char (')');

ReadingWordS ();

if (instr[inpos]≠';') return 0;

inpos++;

put_str («;n»);

return 1;

}

//ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° арифмСтичСского выраТСния

int fae () {

ReadingWordS ();

if (instr[inpos]=='+'){

copychar ();

}

else

if (instr[inpos]=='-'){

copychar ();

}

while (1){

ReadingWordS ();

if (wtype==w_numb) copychar (); else

if (wtype==Word_string&&vartype ()==t_Int) copychar (); else

if (wtype==Word_string&&vartype ()==t_Real) copychar (); else

if (wtype==Word_string&&vartype ()==t_Array) {

copychar ();

ReadingWordS ();

if (instr[inpos]=='['){

copychar ();

while (1) {

if (!fae ()) return 0;

put_str («-1»);

ReadingWordS ();

if (instr[inpos]==']'){

copychar ();

break;

}

if (instr[inpos]==','){

wskip ();

put_str («][»);

}

}

}

} else

if (instr[inpos]=='('){

copychar ();

if (!fae ()) return 0;

ReadingWordS ();

if (instr[inpos]≠')') return 0;

inpos++;

put_char (')');

}

else return 0;

ReadingWordS ();

char c = instr[inpos];

if (c=='+'||c=='-'||c=='*'||c=='/') copychar ();

else return 1;

}

}

//ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° арифмСтичСского выраТСния

int ae (){

char c, c1;

if (!fae ()) return 0;

ReadingWordS ();

c = instr[inpos];

c1 = instr[inpos+1];

if (c=='<'&&c1=='>') {

inpos += 2;

put_str («≠»);

}

else

if (c=='=') {

inpos++;

put_str («==»);

}

else

if (c=='>'||c=='<') {

if (c1=='='){

inpos += 2;

}

else copychar ();

}

ReadingWordS ();

if (!fae ()) return 0;

return 1;

}

//ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° логичСского выраТСния

int fle () {

int k;

char c, c1;

int arifm, ip, op;

while (1){

ReadingWordS ();

k = fkW ();

int ip, op;

ip = inpos;

op = outlen;

arifm = 0;

if (instr[inpos]=='+'||

instr[inpos]=='('||

instr[inpos]=='-'||

wtype==Word_string&&!fkW () ||

wtype==w_numb)

arifm = ae ();

if (!arifm){

inpos = ip;

outlen = op;

ReadingWordS ();

k = fkW ();

//———

if (wtype==Word_string&&k==KeyS_true){

wskip ();

put_char ('1');

}

else

if (wtype==Word_string&&k==KeyS_false) {

wskip ();

put_char ('0');

}

else

if (wtype==Word_string&&vartype ()==t_Bool) copychar (); else

if (instr[inpos]=='('){

copychar ();

if (!fle ()) return 0;

ReadingWordS ();

if (instr[inpos]≠')') return 0;

inpos++;

put_char (')');

}

else return 0;

}

ReadingWordS ();

k = fkW ();

if (k==KeyS_or) put_str («||»); else

if (k==KeyS_and) put_str («&&»);

else return 1;

wskip ();

}

}

//ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π½Π° ΠΏΡ€ΠΈΡΠ²Π°ΠΈΠ²Π°Π½ΠΈΠ΅

int asign (){

int type = vartype ();

if (!(type==t_Bool||type==t_Real||type==t_Int)) return 0;

//put_char ('n');

put_dt ();

copychar ();

ReadingWordS ();

if (instr[inpos]≠':'||instr[inpos+1]≠'=')

return 0;

put_char ('=');

inpos += 2;

if (type==t_Bool) {

if (!fle ()) return 0;

}

else

if (!fae ()) return 0;

ReadingWordS ();

if (instr[inpos]≠';') return 0;

copychar ();

put_char ('n');

return 1;

}

//ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° while

int fwhile () fkW ()≠KeyS_do) return 0;

wskip ();

put_str («)n»);

return 1;

//ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π±Π»ΠΎΠΊΠ° ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ²

int fbegin (int gl){

int rep_n = 0;

if (gl≠3) wskip ();

if (gl==1) put_str («nnvoid main ()n»);

if ((gl≠2)||(gl≠3)) {

put_dt ();

put_str («{n»);

IncDt ();

}

int b;

do{

b = 1;

ReadingWordS ();

if (Comment_is_find ()){

Comment_is_finish ();

continue;

}

switch (fkW ()){

case KeyS_begin:

koper1++;

if (!fbegin (0)) return 0;

koper2++;

break;

case KeyS_case:

koper1++;

if (!Process_case ()) return 0;

break;

case KeyS_read:

koper1++;

if (!Process_read (0)) return 0;

koper2++;

break;

case KeyS_write:

koper1++;

if (!Process_write (0)) return 0;

koper2++;

break;

case KeyS_rewrite:

koper1++;

if (!Process_rewrite ()) return 0;

koper2++;

break;

case KeyS_assign:

koper1++;

if (!Process_assign ()) return 0;

koper2++;

break;

case KeyS_while:

koper1++;

if (!fwhile ()) return 0;

koper2++;

break;

case KeyS_end:

koper1++;

if (gl == 3) return 3;

wskip ();

DecDt ();

put_dt ();

put_str («}n»);

ReadingWordS ();

if (gl==1&&instr[inpos]=='.' ||

gl≠1&&instr[inpos]==';'){

wskip ();

koper2++;

return 1;

}

else

{

wskip ();

return 0;

}

case 0:

if (!asign ()) return 0; //присваиваниС

break;

default:

return 0;

}

} while (b);

return 1;

}

//главная функция прСобразования ттСкста

//ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ тСкста

int Translate ()

{

int b;

int k;

koper1 = koper2 = 0;

put_str («#include nn»); //для scanf ΠΈ printf

do{

b = 1;

ReadingWordS ();

k = fkW (); //ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π½Π° ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово

if (k==KeyS_var){ //Π½Π°Ρ‡Π°Π»ΠΎ Π±Π»ΠΎΠΊΠ° ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…

koper1++;

if (!Process_var (1)) {

errore_program ();

}

else koper2++; }

else

if (k==KeyS_type){ //Π±Π»ΠΎΠΊ описания Ρ‚ΠΈΠΏΠΎΠ²

koper1++;

if (!frecord ()) {

errore_program ();

}

else koper2++;

}

else

if (k==KeyS_begin){ //Π½Π°Ρ‡Π°Π»ΠΎ Π±Π»ΠΎΠΊΠ° ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ²

if (!fbegin (1)) {

errore_program ();

}

b = 0;

}

else

if (Comment_is_find ()) Comment_is_finish (); //ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ

else {

koper1++;

errore_program ();

};

} while (b==1);

if (instr[inpos]≠'.') return 0; //Ρ‚ΠΎΡ‡ΠΊΠ° Π² ΠΊΠΎΠ½Ρ†Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹

inpos++;

return 1;

}

void main ()

{

setlocale (LC_ALL," Russian");

char s[128];

printf («Π’Π²Π΅Π΄ΠΈΡ‚Π΅ имя Π²Ρ…ΠΎΠ΄Π½ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π°: «);

scanf («%s», s);

if (!RecText (s))

{

printf («nОшибка открытия Ρ„Π°ΠΉΠ»Π°!»);

}

vars = NULL;

lvars = NULL;

uvars = cuservars;

Translate ();

freevars (1);

printf («nΠ’Π²Π΅Π΄ΠΈΡ‚Π΅ имя Π²Ρ‹Ρ…ΠΎΠ΄Π½ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π°:»);

scanf («%s», s);

if (!PutText (s))

{

printf («nОшибка создания Ρ„Π°ΠΉΠ»Π°!»);

}

printf («nΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ²»

" Π² ΠΈΡΡ…ΠΎΠ΄Π½ΠΎΠΌ Ρ„Π°ΠΉΠ»Π΅: %d", koper1);

printf («nΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ²»

" Π² ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½ΠΎΠΌ Ρ„Π°ΠΉΠ»Π΅: %d", koper2);

printf («nΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ ΠΎΡˆΠΈΠ±ΠΎΡ‡Π½Ρ‹Ρ… ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ²»

" ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ Π±Ρ‹Π»ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π½Ρ‹: %d", ker);

printf («nnΠ Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ хранится Π² Ρ„Π°ΠΉΠ»Π΅: %s», s);

fclose (filename1);

fclose (filename2);

while (!kbhit ()) ;

}

7. Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ тСстирования ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹

На Π²Ρ…ΠΎΠ΄Π΅:

var

i, k: integer;

m:real;

fl:file of integer;

begin

assign (fl,'c:tuctuc.txt');

rewrite (fl);

write (fl,'bla');

Case k of

1: Begin

End;

2: Begin

End;

3: Begin

writeln ('privet!');

readln ();

End;

4: Begin

End;

end;

End.

На Π²Ρ‹Ρ…ΠΎΠ΄Π΅:

#include

int i, k;

float m;

FILE *fl;

void main ()

{

fl = fopen («c:tuctuc.txt» ," w");

fcreate (fl);

fprintf (fl," bla");

switch (k){

case 1:

{

break;

case 2:

{

break;

case 3:

{

break;

case writeln

< Ошибка! >

('privet!');

ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΠΊΠΎΠ΄ язык ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€

На Ρ€ΠΈΡΡƒΠ½ΠΊΠ΅ 1 ΡΠΊΡ€ΠΈΠ½ΡˆΠΎΡ‚ экрана послС Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹

Рисунок 1 — Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹

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

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

Основная

Π—Π°ΠΉΡ†Π΅Π²Π°, Π›. Π’. АлгоритмичСскиС языки ΠΈ ΠΏpoΠ³paΠΌΠΌΠΈpoΠ²aΠ½ΠΈe / Π›. Π’. Π—aΠΉΡ†eΠ²a. — Πœ.: ΠœΠ“Π“Π£, 1996.

Π€apoΠ½oΠ², Π’. Π’. ПpoΠ³paΠΌΠΌΠΈpoΠ²aΠ½ΠΈe Π½a ΠŸΠ­Π’Πœ Π² ΡpeΠ΄e Π’ΡƒpΠ±o-Пaскaль / Π’. Π’. Π€apoΠ½oΠ². — Πœ.: ΠœΠ“Π’Π£, 1999.

Alfred V. Aho Jeffrey D. Ullman The theory of parsing, translation and compiling Prentice-Hall, inc Englewood Clifis, N. J., 1972

Π”oΠΏoΠ»Π½ΠΈΡ‚eльнaя

1. КpaсoΠ², A. Π’. ПpoΠ³paΠΌΠΌΠΈpoΠ²aΠ½ΠΈe Π½a Borland C ΠΏoΠ΄ MS Windows / A. Π’. КpaсoΠ². — Π‘Пб.: Π‘ΠŸΠ±Π“Π£Π’, 2001.

2. Π—aΠΉΡ†eΠ²a, Π›. Π’. МeΡ‚oΠ΄ΠΈΡ‡eскиe ΡƒΠΊaΠ·aния для Π²Ρ‹ΠΏoΠ»Π½eния ΠΊΡƒpсoΠ²oΠ³o ΠΏpoeΠΊΡ‚a ΠΏo Π΄ΠΈΡΡ†ΠΈΠΏΠ»ΠΈΠ½e «AΠ»Π³opΠΈΡ‚ΠΌΠΈΡ‡eскиe языки ΠΈ ΠΏpoΠ³paΠΌΠΌΠΈpoΠ²aΠ½ΠΈe» ΠΏo ΡΠΏeΡ†. 2203 / Π›. Π’. Π—aΠΉΡ†eΠ²a, Π’. Π“. Π‘сopΠΈΠ½, E. A. EpoΡ…ΠΈΠ½a, 2005.

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