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

Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° прСобразования арифмСтичСского выраТСния «ВычислСниС арифмСтичСских Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ, состоящих ΠΈΠ· констант» ΠΈ рСализация ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎ

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

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

Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° прСобразования арифмСтичСского выраТСния «ВычислСниС арифмСтичСских Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ, состоящих ΠΈΠ· констант» ΠΈ рСализация ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎ (Ρ€Π΅Ρ„Π΅Ρ€Π°Ρ‚, курсовая, Π΄ΠΈΠΏΠ»ΠΎΠΌ, ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½Π°Ρ)

Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠ°Π½ΠΈΠ΅

  • Π’Π²Π΅Π΄Π΅Π½ΠΈΠ΅
  • Алгоритм Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ Π·Π°Π΄Π°Ρ‡ΠΈ
  • ОписаниС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹
  • Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ счСта
  • Листинг ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹
  • Бписок Π»ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΡƒΡ€Ρ‹

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

ВСория компиляции базируСтся Π½Π° Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ любой язык ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ описан Ρ„ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎ.

Основа любого СстСствСнного языка Π΅Π³ΠΎ Π°Π»Ρ„Π°Π²ΠΈΡ‚, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ мноТСство символов Π±ΡƒΠΊΠ².

Для Ρ„ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ описания языка Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹ ΠΏΠΎ ΠΊΡ€Π°ΠΉΠ½Π΅ΠΉ ΠΌΠ΅Ρ€Π΅ Π΄Π²Π° элСмСнта Π°Π»Ρ„Π°Π²ΠΈΡ‚ ΠΈ Π½Π°Π±ΠΎΡ€ ΠΏΡ€Π°Π²ΠΈΠ» (синтаксис) для построСния ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠΉ языка. БущСствуСт Π΅Ρ‰Π΅ нСсколько элСмСнтов Ρ„ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ описания, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ‚Π°ΠΊΠΆΠ΅ Π²Π°ΠΆΠ½Ρ‹ для процСсса ΠΎΠ΄Π½ΠΎΠ·Π½Π°Ρ‡Π½ΠΎΠ³ΠΎ построСния ΠΈ Ρ€Π°ΡΠΏΠΎΠ·Π½Π°Π²Π°Π½ΠΈΡ ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠΉ языка.

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

Π’ Ρ€Π°Π±ΠΎΡ‚Π΅ рассмотрСн ΠΈ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ прСобразования арифмСтичСского выраТСния синтаксичСский Π°Π½Π°Π»ΠΈΠ· ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ рСкурсивного спуска.

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

Π Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ прСобразования арифмСтичСского выраТСния «Π’ычислСниС арифмСтичСских Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ, состоящих ΠΈΠ· ΠΊΠΎΠ½ΡΡ‚Π°Π½Ρ‚ «ΠΈ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎ.

БрСдства Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹: язык программирования Π‘ Π΄Π»Ρ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмы DOS.

Алгоритм Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ Π·Π°Π΄Π°Ρ‡ΠΈ

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

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ «Π½ΠΈΡΡ…одящий» ΠΈΠ·-Π·Π° способа построСния синтаксичСского Π΄Π΅Ρ€Π΅Π²Π°. ΠŸΡ€ΠΈ Ρ€Π°Π·Π±ΠΎΡ€Π΅ ΠΎΡ‚ΠΏΡ€Π°Π²Π»ΡΡŽΡ‚ΡΡ ΠΎΡ‚ Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ символа ΠΈ Π½ΠΈΡΡ…одят ΠΊ ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΡŽ (рис. 1).

Рис. 1.

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

Π—Π°ΠΏΠΈΡˆΠ΅ΠΌ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹ для Π½Π΅Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»ΡŒΠ½Ρ‹Ρ… символов Ρ‚Π°ΠΊΠΎΠΉ Π³Ρ€Π°ΠΌΠΌΠ°Ρ‚ΠΈΠΊΠΈ:

: := :=

| IF THEN

| IF THEN ELSE

: := i | i ()

: := | +

: := | *

: := | ()

Π§Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ΄ΠΎΠ±Π½Π΅Π΅ Π±Ρ‹Π»ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ, ΠΏΠ΅Ρ€Π΅ΠΏΠΈΡˆΠ΅ΠΌ Π³Ρ€Π°ΠΌΠΌΠ°Ρ‚ΠΈΠΊΡƒ Ρ‚Π°ΠΊ:

: :=: =

| IF THEN [ELSE ]

: := i [()]

: := {+}

: := {*}

: := | ()

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

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

2. Подобно этому, ΠΏΠ΅Ρ€Π΅Π΄ Ρ‚Π΅ΠΌ ΠΊΠ°ΠΊ Π²Ρ‹ΠΉΡ‚ΠΈ ΠΈΠ· ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹ с ΡΠΎΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅ΠΌ ΠΎΠ± ΡƒΡΠΏΠ΅Ρ…Π΅, символ, ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ Π·Π° ΡƒΠΆΠ΅ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π½Π½ΠΎΠΉ ΠΏΠΎΠ΄ Ρ†Π΅ΠΏΠΎΡ‡ΠΊΠΎΠΉ, помСщаСтся Π² NXTSYMB.

3. ΠŸΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π° SCAN Π³ΠΎΡ‚ΠΎΠ²ΠΈΡ‚ ΠΎΡ‡Π΅Ρ€Π΅Π΄Π½ΠΎΠΉ символ исходной ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΈ ΠΏΠΎΠΌΠ΅Ρ‰Π°Π΅Ρ‚ Π΅Π³ΠΎ Π² NXTSYMB.

4. ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ERROR вызываСтся Π² Ρ‚Π΅Ρ… случаях, ΠΊΠΎΠ³Π΄Π° ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠ΅Π½Π° ошибка. Она ΠΏΠ΅Ρ‡Π°Ρ‚Π°Π΅Ρ‚ сообщСниС ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Π΅Ρ‚ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎ. ПослС Π²ΠΎΠ·Π²Ρ€Π°Ρ‚Π° ΠΌΡ‹ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠΈΠΌ Ρ€Π°Π±ΠΎΡ‚Ρƒ Ρ‚Π°ΠΊ, ΠΊΠ°ΠΊ Π±ΡƒΠ΄Ρ‚ΠΎ Π±Ρ‹ Π½ΠΈ ΠΊΠ°ΠΊΠΎΠΉ ошибки Π½Π΅ Π±Ρ‹Π»ΠΎ (см. ΡΠΎΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΡ, ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ Π·Π° ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ΠΌ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€).

5. Для Ρ‚ΠΎΠ³ΠΎ Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π°Ρ‡Π°Ρ‚ΡŒ синтаксичСский Π°Π½Π°Π»ΠΈΠ· инструкции, ΠΌΡ‹ ΠΎΠ±Ρ€Π°Ρ‰Π°Π΅ΠΌΡΡ ΠΊ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ SCAN, которая помСстит ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ символ Π² NXTSYMB, Π° Π·Π°Ρ‚Π΅ΠΌ Π²Ρ‹Π·Ρ‹Π²Π°Π΅ΠΌ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρƒ STATE.

ОписаниС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° выполняСт ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ:

Π²Π²ΠΎΠ΄ арифмСтичСского выраТСния, состоящСго ΠΈΠ· ΠΊΠΎΠ½ΡΡ‚Π°Π½Ρ‚, ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…, Π·Π½Π°ΠΊΠΎΠ² ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ;

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

вычислСниС значСния арифмСтичСского выраТСния.

ΠžΡΠ½ΠΎΠ²Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹:

PrintTablVar () Π²Ρ‹Π²ΠΎΠ΄ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…

void AssignOp (void) Ρ€Π°Π·Π±ΠΎΡ€ ΠΈ Ρ€Π°ΡΡ‡Π΅Ρ‚ выраТСния

void ExpressAdd (void) вычислСния выраТСния для слоТСния ΠΈ Π²Ρ‹Ρ‡ΠΈΡ‚ания

void ExpressMult (void) — вычислСниС выраТСния для умноТСния ΠΈ Π΄Π΅Π»Π΅Π½ΠΈΡ

void ExpressFunc (void) — вычислСниС ΠΏΠ΅Ρ€Π²ΠΈΡ‡Π½ΠΎΠ³ΠΎ выраТСния

double getfloat (char *num, int max) — Π²Π·ΡΡ‚ΡŒ число Π²ΠΎ Π²Ρ…ΠΎΠ΄Π½ΠΎΠΉ строкС ΠΈ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊ double

int GetName (char *name, int max) — Π²Π·ΡΡ‚ΡŒ имя Π²ΠΎ Π²Ρ…ΠΎΠ΄Π½ΠΎΠΉ строкС

int FindNameVar (char *var, int *num) — Π½Π°ΠΉΡ‚ΠΈ имя Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅ символов

int AddNameVar (char *var) — Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π½ΠΎΠ²ΠΎΠ΅ имя Π² Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ символов

void SkipBlanks () — пропуск слуТСбных символов

int match (char *str) — ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° вхоТдСния строки Π²ΠΎ Π²Ρ…ΠΎΠ΄Π½ΠΎΠΉ строкС

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