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

Π˜Π½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€

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

МоТно Π²Ρ‹Π΄Π΅Π»ΠΈΡ‚ΡŒ нСсколько Π³Ρ€ΡƒΠΏΠΏ классов Π² ΠΏΡ€ΠΎΡΡ‚ранствС ΠΈΠΌΠ΅Π½ interpr. logic — классы, отвСтствСнныС Π·Π° Π²Ρ‹Ρ‡ΠΈΡΠ»Π΅Π½ΠΈΠ΅ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ, Π·Π° Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΡ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, Π·Π° ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ тСкста ΠΊΠΎΠΌΠ°Π½Π΄ ΠΈ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΡ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ Π²ΠΎ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠΉ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ («ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡ†ΠΈΡŽ» тСкста ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹), классы, ΡƒΡ‡Π°ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ Π² ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΈΠ½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΠΉ Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Π°. Π­Ρ‚ΠΈ Π³Ρ€ΡƒΠΏΠΏΡ‹ классов, Ρ€Π°Π²Π½ΠΎ ΠΊΠ°ΠΊ ΠΈ ΠΏΠΎΠ΄ΡΠΈΡΡ‚Π΅ΠΌΠ°… Π§ΠΈΡ‚Π°Ρ‚ΡŒ Π΅Ρ‰Ρ‘ >

Π˜Π½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ (Ρ€Π΅Ρ„Π΅Ρ€Π°Ρ‚, курсовая, Π΄ΠΈΠΏΠ»ΠΎΠΌ, ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½Π°Ρ)

  • Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠ°Π½ΠΈΠ΅. 2
  • Π’Π²Π΅Π΄Π΅Π½ΠΈΠ΅ 3
  • ΠŸΠΎΡΡ‚Π°Π½ΠΎΠ²ΠΊΠ° Π·Π°Π΄Π°Ρ‡ΠΈ. 4
  • ОписаниС Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ Π² ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Π΅ языка программирования. 5
  • ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΡ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ 12
    • 1. Π‘ΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²ΠΊΠ° массива. 12
    • 2. ВычислСниС ΠΠžΠ” ΠΏΠΎ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡƒ Π•Π²ΠΊΠ»ΠΈΠ΄Π° 12
    • 3. РСкурсивноС вычислСниС Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ°Π»Π°. 13
    • 4. ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ°, являСтся Π»ΠΈ строка ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½Ρ‹ΠΌ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠΌ. 13
    • 5. ВычислСниС ΡƒΠ³Π»Π° Ρ‚Ρ€Π΅ΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠ° ΠΏΠΎ Ρ‚Ρ€Π΅ΠΌ сторонам. 14
  • ΠŸΡ€ΠΎΠ΅ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹-ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Π° 15
    • Π’Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅Π΅ прСдставлСниС ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. 18
    • ΠžΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° тСкста ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. 24
    • ГрафичСский интСрфСйс ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ. 27
    • ВзаимодСйствиС подсистСм ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Π°. Класс Facade. 31
  • Π—Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ 33
  • ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. Π˜ΡΡ…ΠΎΠ΄Π½Ρ‹ΠΉ тСкст (сокращСнно). 34
    • 1. Класс VarBase. 34
    • 2. Класс ArrayVar. 34
    • 3. Класс InterprEnvironment. 36
    • 4. Класс Namespace. 40
    • 5. Π˜Π½Ρ‚Π΅Ρ€Ρ„Π΅ΠΉΡ IΠ‘omputable. 42
    • 6. Класс Call. 42
    • 7. Класс ArgList 42
    • 8. Класс Expression. 43
    • 9. Класс Operation (сокращСнно). 49
    • 10. Класс Parser. 50
    • 11. Класс LineCompiler. 56
    • 12. Π˜Π½Ρ‚Π΅Ρ€Ρ„Π΅ΠΉΡ IOperator. 60
    • 13. Класс Command. 60
    • 14. Класс ForOperator. 61
    • 15. Класс NextOperator 62
    • 16. Класс Subroutine. 62
    • 17. Класс Facade. 67
    • 18. Класс SourceBox. 69
    • 19. Класс Form1. 75
  • Использованная Π»ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΡƒΡ€Π° ΠΈ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ация. 78

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

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

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

ОписаниС Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ Π² ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Π΅ языка программирования.

Π˜Π½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π² Ρ€Π΅ΠΆΠΈΠΌΠ΅ консоли ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΠ΅Ρ‚ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹, Π²Π²ΠΎΠ΄ΠΈΠΌΡ‹Π΅ с ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Ρ‹. Π­Ρ‚ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ ΠΌΠΎΠ³ΡƒΡ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ Π²Ρ‹Π·ΠΎΠ²Ρ‹ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΡ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ. Код ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΡ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ создаСтся с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΎΠΊΠ½Π° Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€Π° ΠΊΠΎΠ΄Π° ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Π°. Π˜Π½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ прСдоставляСт Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ создания, рСдактирования ΠΈ ΡƒΠ΄Π°Π»Π΅Π½ΠΈΡ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΡ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ. Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΡΠΎΡ…Ρ€Π°Π½ΡΡŽΡ‚ΡΡ Π² Ρ„Π°ΠΉΠ»Π°Ρ…, имя ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ ΠΈ ΡΠΎΠ²ΠΏΠ°Π΄Π°Π΅Ρ‚ с ΠΈΠΌΠ΅Π½Π΅ΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. Π€Π°ΠΉΠ»Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Ρ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ Π² ΠΏΠΎΠ΄ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅ subroutines Ρ€Π°Π±ΠΎΡ‡Π΅Π³ΠΎ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π° ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Π°. Π‘ΠΎΡ…Ρ€Π°Π½Π΅Π½Π½Ρ‹Π΅ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π·Π°Π³Ρ€ΡƒΠΆΠ°ΡŽΡ‚ΡΡ автоматичСски ΠΏΡ€ΠΈ запускС ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Π°. ВсС ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ управлСния Ρ‚Π΅Ρ‡Π΅Π½ΠΈΠ΅ΠΌ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² Ρ‚СкстС ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. ВсС ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ (ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹) ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Π²Ρ‹Π·Π²Π°Π½Ρ‹ нСпосрСдствСнно ΠΈΠ· ΠΊΠΎΠ½ΡΠΎΠ»ΠΈ. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, Π² ΠΊΠΎΠ½ΡΠΎΠ»ΠΈ ΠΌΠΎΠΆΠ½ΠΎ ввСсти Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π±Π΅Π· Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Ρ… слов, ΠΈ ΠΎΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ вычислСно, Π΅Π³ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π²Π΅Π΄Π΅Π½ΠΎ Π½Π° ΡΠΊΡ€Π°Π½. Для Π²Ρ‹Π²ΠΎΠ΄Π° ΠΆΠ΅ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΠ· Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ Π²Ρ‹Π²ΠΎΠ΄Π° (см. Π½ΠΈΠΆΠ΅).

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

Β· call

Β· clear

Β· else

Β· elseif

Β· endif

Β· error

Β· for

Β· if

Β· loop

Β· next

Β· print

Β· println

Β· result

Β· return

Β· while

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

Π˜ΠΌΠ΅ΡŽΡ‚ΡΡ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ Ρ‚ΠΈΠΏΡ‹ Π΄Π°Π½Π½Ρ‹Ρ…: Ρ†Π΅Π»Ρ‹ΠΉ, вСщСствСнный, строковый, массив. Π¦Π΅Π»Ρ‹ΠΉ, вСщСствСнный ΠΈ ΡΡ‚Ρ€ΠΎΠΊΠΎΠ²Ρ‹ΠΉ Ρ‚ΠΈΠΏΡ‹ Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ простыми Π² ΠΏΡ€ΠΎΡ‚ΠΈΠ²ΠΎΠΏΠΎΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ массиву; вСщСствСнный ΠΈ Ρ†Π΅Π»Ρ‹ΠΉ Ρ‚ΠΈΠΏΡ‹ Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ числовыми. Π’ΠΈΠΏ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π½Π΅ ΠΎΠΏΠΈΡΡ‹Π²Π°Π΅Ρ‚ся, Π½ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ issingle, isarray, isstring, isnum, isint, isreal. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Π½Π°Π΄ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°ΠΌΠΈ нСдопустимых Ρ‚ΠΈΠΏΠΎΠ² ΠΌΠΎΠΆΠ΅Ρ‚ привСсти ΠΊ ΠΎΡˆΠΈΠ±ΠΊΠ΅. Массив ΠΌΠΎΠΆΠ΅Ρ‚ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ элСмСнты Π»ΡŽΠ±Ρ‹Ρ… простых Ρ‚ΠΈΠΏΠΎΠ², ΠΏΡ€ΠΈΡ‡Π΅ΠΌ Ρ‚ΠΈΠΏΡ‹ Ρ€Π°Π·Π½Ρ‹Ρ… элСмСнтов ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈ Ρ‚ΠΎΠ³ΠΎ ΠΆΠ΅ массива ΠΌΠΎΠ³ΡƒΡ‚ Π½Π΅ ΡΠΎΠ²ΠΏΠ°Π΄Π°Ρ‚ΡŒ. По ΠΌΠ΅Ρ€Π΅ заполнСния массива Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ появлСниС Π² Π½Π΅ΠΌ «ΠΏΡƒΡΡ‚Ρ‹Ρ… мСст», Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, послС ΠΊΠΎΠΌΠ°Π½Π΄ a{0}:=1; a{2}:=4; a{4}:=5 (ΠΏΡ€ΠΎΠΏΡƒΡ‰Π΅Π½Ρ‹ элСмСнты с ΠΈΠ½Π΄Π΅ΠΊΡΠ°ΠΌΠΈ 1 ΠΈ 3). ΠŸΠΎΠΏΡ‹Ρ‚ΠΊΠ° ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π΅Ρ‰Π΅ Π½Π΅ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ элСмСнта массива ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ ΠΎΡˆΠΈΠ±ΠΊΠ΅. ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ, ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½ Π»ΠΈ элСмСнт массива с Π·Π°Π΄Π°Π½Π½Ρ‹ΠΌ индСксом, ΠΌΠΎΠΆΠ½ΠΎ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ defined.

Π›ΡŽΠ±Π°Ρ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΏΡ€ΠΎΠ±Π΅Π»ΠΎΠ² ΠΈ Ρ‚абуляций, ΠΈΠ΄ΡƒΡ‰ΠΈΡ… подряд, считаСтся Π·Π° ΠΎΠ΄ΠΈΠ½ ΠΏΡ€ΠΎΠ±Π΅Π», Ссли ΠΎΠ½Π° находится ΠΌΠ΅ΠΆΠ΄Ρƒ символами, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π²Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒ Π² ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹ (Π±ΡƒΠΊΠ²Ρ‹, Ρ†ΠΈΡ„Ρ€Ρ‹, ΠΏΠΎΠ΄Ρ‡Π΅Ρ€ΠΊΠΈΠ²Π°Π½ΠΈΠ΅), ΠΈΠ»ΠΈ игнорируСтся Π² ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС. Π’Π°ΠΊΠΆΠ΅ ΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΡƒΡŽΡ‚ΡΡ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ΠΎΠΌ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ ΡΠ²Π»ΡΡŽΡ‚ΡΡ строки ΠΈΠ»ΠΈ окончания строк, Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‰ΠΈΠ΅ΡΡ с ΡΠΈΠΌΠ²ΠΎΠ»Π° `#'. Π­Ρ‚ΠΈ ΠΏΡ€Π°Π²ΠΈΠ»Π° Π½Π΅ Ρ€Π°ΡΠΏΡ€ΠΎΡΡ‚Ρ€Π°Π½ΡΡŽΡ‚ΡΡ Π½Π° ΡΡ‚Ρ€ΠΎΠΊΠΎΠ²Ρ‹Π΅ константы, Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅ΠΌΡ‹Π΅ Π² Π΄Π²ΠΎΠΉΠ½Ρ‹Π΅ ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠΈ. Π‘Ρ‚Ρ€ΠΎΠΊΠΎΠ²ΠΎΠΉ константой Π½Π΅ ΡΠ²Π»ΡΠ΅Ρ‚ся ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ символов Π² ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠ°Ρ…, Ссли ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°ΡŽΡ‰Π°Ρ ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠ° находится послС символа Π½Π°Ρ‡Π°Π»Π° коммСнтария '#', Π½ΠΎ ΡΡ‚ΠΎΡ‚ символ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΈΡΡƒΡ‚ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ Π² ΡΡ‚Ρ€ΠΎΠΊΠΎΠ²ΠΎΠΉ константС ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠ°ΠΌΠΈ. Π’Π°ΠΊ Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΊΠΎΠΌΠ°Π½Π΄Π° a: = b + «#"+c#comment эквивалСнтна ΠΊΠΎΠΌΠ°Π½Π΄Π΅ a:=b+"#» + c, Π½ΠΎ Π½Π΅ Ρ€Π°Π²Π½ΠΎΡΠΈΠ»ΡŒΠ½Π° ΠΊΠΎΠΌΠ°Π½Π΄Π΅ a:=b+" #"+c, ΠΈΠ»ΠΈ a+b+" (послСдняя ΠΊΠΎΠΌΠ°Π½Π΄Π° синтаксичСски Π½Π΅Π²Π΅Ρ€Π½Π°).

КаТдая строка, вводимая с ΠΊΠΎΠ½ΡΠΎΠ»ΠΈ, содСрТит ΠΎΠ΄Π½Ρƒ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ ΠΈΠ»ΠΈ Π½ΠΈ ΠΎΠ΄Π½ΠΎΠΉ (пустая строка ΠΈΠ»ΠΈ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ) ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹. Π’ΠΎ ΠΆΠ΅ ΠΊΠ°ΡΠ°Π΅Ρ‚ся ΠΈ ΡΡ‚Ρ€ΠΎΠΊ Ρ„Π°ΠΉΠ»Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΊΡ€ΠΎΠΌΠ΅ ΠΏΠ΅Ρ€Π²ΠΎΠΉ, которая Π΄ΠΎΠ»ΠΆΠ½Π° ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ описаниС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π² Π²ΠΈΠ΄Π΅: <�имя_Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ>[<�список_ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ²>, Π³Π΄Π΅ список ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ², Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅ΠΌΡ‹ΠΉ Π² ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Π½Ρ‹Π΅ скобки, состоит ΠΈΠ· ΠΈΠΌΠ΅Π½ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ², Ρ€Π°Π·Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… запятой (эта строка Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ ΠΈ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ послС описания Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ). ΠšΠ²Π°Π΄Ρ€Π°Ρ‚Π½Ρ‹Π΅ скобки ΠΏΠΈΡˆΡƒΡ‚ΡΡ Π΄Π°ΠΆΠ΅ ΠΏΡ€ΠΈ пустом спискС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ². ИмСна ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² (Ρ„ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½Ρ‹Ρ…) ΠΏΠΎΠ΄Ρ‡ΠΈΠ½ΡΡŽΡ‚ΡΡ Ρ‚Π΅ΠΌ ΠΆΠ΅ ограничСниям, Ρ‡Ρ‚ΠΎ ΠΈ ΠΈΠΌΠ΅Π½Π° ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…, ΠΌΠ°Π»ΠΎ Ρ‚ΠΎΠ³ΠΎ, ΠΎΠ½ΠΈ Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°ΡŽΡ‚ΡΡ ΠΊΠ°ΠΊ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅, ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ Π² Π΄Π°Π½Π½ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Π½ΠΎ Π² Π½Π°Ρ‡Π°Π»Π΅ выполнСния Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΎΠ½ΠΈ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°ΡŽΡ‚ значСния ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… фактичСских ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ². НуТно ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ° ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ Π² ΠΊΠ°Ρ‡Π΅ΡΡ‚Π²Π΅ фактичСского ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ с Π½Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ всСгда ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ ΠΎΡˆΠΈΠ±ΠΊΠ΅, Π΄Π°ΠΆΠ΅ Ссли Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΊ ΡΡ‚ΠΎΠΌΡƒ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρƒ Π½Π΅Ρ‚ Π½ΠΈ ΠΎΠ΄Π½ΠΎΠ³ΠΎ обращСния. Π’Π°ΠΊΠΆΠ΅ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ ΠΎΡˆΠΈΠ±ΠΊΠ΅ Π²Ρ‹Π·ΠΎΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ с Ρ‡ΠΈΡΠ»ΠΎΠΌ фактичСских ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ², Π½Π΅ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΌ числу Ρ„ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ². ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ имССтся пСрСмСнная с ΠΏΡ€Π΅Π΄ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΌ ΠΈΠΌΠ΅Π½Π΅ΠΌ result. Π•Π΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π½Π° ΠΌΠΎΠΌΠ΅Π½Ρ‚ Π²Ρ‹Ρ…ΠΎΠ΄Π° ΠΈΠ· Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈ ΡΠ²Π»ΡΠ΅Ρ‚ся Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΡ‹ΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. Π’ ΠΌΠΎΠΌΠ΅Π½Ρ‚ Π½Π°Ρ‡Π°Π»Π° выполнСния Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π΅Π΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Ρ€Π°Π²Π½ΠΎ 0 (Ρ†Π΅Π»ΠΎΠ΅ число). Если пСрСмСнная result Π±Ρ‹Π»Π° ΡƒΠ΄Π°Π»Π΅Π½Π° ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ clear ΠΈ ΠΎΡΡ‚Π°Π»Π°ΡΡŒ Π½Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΉ Π½Π° ΠΌΠΎΠΌΠ΅Π½Ρ‚ Π²Ρ‹Ρ…ΠΎΠ΄Π° ΠΈΠ· Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ ошибка.

ЗначСния Ρ†Π΅Π»ΠΎΠ³ΠΎ, вСщСствСнного ΠΈ ΡΡ‚Ρ€ΠΎΠΊΠΎΠ²ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ° ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ прСдставлСны Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ Π² Π²ΠΈΠ΄Π΅ констант (Π»ΠΈΡ‚Π΅Ρ€Π°Π»ΠΎΠ²). Π¦Π΅Π»Ρ‹ΠΉ Π»ΠΈΡ‚Π΅Ρ€Π°Π» прСдставляСт собой ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Ρ†ΠΈΡ„Ρ€. Он ΠΏΡ€Π΅Π΄ΡΡ‚авляСт число, ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠΉ записью ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ являСтся. ВСщСствСнный Π»ΠΈΡ‚Π΅Ρ€Π°Π» прСдставляСт собой Π΄Π΅ΡΡΡ‚ΠΈΡ‡Π½ΡƒΡŽ ΠΈΠ»ΠΈ ΡΠΊΡΠΏΠΎΠ½Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½ΡƒΡŽ запись вСщСствСнного числа, ΠΏΡ€ΠΈ этом, Π² ΡΠ»ΡƒΡ‡Π°Π΅ ΡΠΊΡΠΏΠΎΠ½Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠΉ записи, Π±ΡƒΠΊΠ²Π° «Π΅» ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΊΠ°ΠΊ строчной, Ρ‚Π°ΠΊ ΠΈ ΠΏΡ€ΠΎΠΏΠΈΡΠ½ΠΎΠΉ. НапримСр:12.0, 1.6e87, 2Π•-7, 89.0. Π’ Ρ‡ΠΈΡΠ»ΠΎΠ²Ρ‹Ρ… Π»ΠΈΡ‚Π΅Ρ€Π°Π»Π°Ρ… Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒΡΡ Π½Π°Ρ‡Π°Π»ΡŒΠ½Ρ‹ΠΉ символ «+» ΠΈΠ»ΠΈ «-», ΠΎΠ½ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ число. ΠžΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ значСния ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ΠΌ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ ΡƒΠ½Π°Ρ€Π½Ρ‹ΠΉ минус. ЦСлая Ρ‡Π°ΡΡ‚ΡŒ вСщСствСнного числа Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΎΠΏΡƒΡ‰Π΅Π½Π°. Дробная Ρ‡Π°ΡΡ‚ΡŒ (Ρ‚ΠΎΡ‡ΠΊΠ° ΠΈ Ρ…отя Π±Ρ‹ ΠΎΠ΄Π½Π° Ρ†ΠΈΡ„Ρ€Π° послС Π½Π΅Π΅) Π΄ΠΎΠ»ΠΆΠ½Π° ΠΏΡ€ΠΈΡΡƒΡ‚ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ, Ссли Π½Π΅ ΡƒΠΊΠ°Π·Π°Π½ порядок, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, 11Π΅-6 — допустимая запись, Π° 11. Π΅-4 ΠΈ 61. — Π½Π΅Ρ‚. Π‘Ρ‚Ρ€ΠΎΠΊΠΎΠ²Ρ‹ΠΉ Π»ΠΈΡ‚Π΅Ρ€Π°Π» Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Π΄Π²ΠΎΠΉΠ½Ρ‹Π΅ ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠΈ, Ссли Π² Π½Π΅Π³ΠΎ Π½ΡƒΠΆΠ½ΠΎ Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Π΄Π²ΠΎΠΉΠ½ΡƒΡŽ ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΡƒ, Ρ‚ΠΎ ΠΎΠ½Π° ΠΏΠΈΡˆΠ΅Ρ‚ΡΡ Π΄Π²Π°ΠΆΠ΄Ρ‹.

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

Π’Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ являСтся:

Β· ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ;

Β· константа Ρ†Π΅Π»ΠΎΠ³ΠΎ, вСщСствСнного ΠΈΠ»ΠΈ строкового Ρ‚ΠΈΠΏΠ°;

Β· ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ ΠΊ ΡΠ»Π΅ΠΌΠ΅Π½Ρ‚Ρƒ массива с Π·Π°Π΄Π°Π½Π½Ρ‹ΠΌ индСксом, ΠΈΠΌΠ΅ΡŽΡ‰Π΅Π΅ синтаксис <οΏ½ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ массива>{<�индСкс>} (индСкс Π·Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ Π² Ρ„ΠΈΠ³ΡƒΡ€Π½Ρ‹Π΅ скобки). ИндСкс Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ. ΠŸΠ΅Ρ€Π΅Π΄ ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°ΡŽΡ‰Π΅ΠΉ Ρ„ΠΈΠ³ΡƒΡ€Π½ΠΎΠΉ скобкой Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΡΡ‚ΠΎΡΡ‚ΡŒ имя ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ, ΡΠ²Π»ΡΡŽΡ‰Π΅ΠΉΡΡ массивом (Π½ΠΎ Π½Π΅ Π΄Ρ€ΡƒΠ³ΠΎΠ΅ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅, ΠΈΠΌΠ΅ΡŽΡ‰Π΅Π΅ Ρ‚ΠΈΠΏ массива). Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ индСкса Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ Π½Π΅ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ Ρ†Π΅Π»Ρ‹ΠΌ, ΠΈΠ½Π°Ρ‡Π΅ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ ошибка;

Β· Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ примСнСния ΡƒΠ½Π°Ρ€Π½ΠΎΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ ΠΊ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΡŽ;

Β· Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ примСнСния Π±ΠΈΠ½Π°Ρ€Π½ΠΎΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ ΠΊ Π΄Π²ΡƒΠΌ выраТСниям;

Β· Π²Ρ‹Π·ΠΎΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ (Π±Π΅Π· ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ³ΠΎ слова call). Π’ ΡΡ‚ΠΎΠΌ случаС функция обязана Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, ΠΈΠ½Π°Ρ‡Π΅ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ ошибка. ЀактичСскими ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ выраТСния;

Β· Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅, Π·Π°ΠΊΠ»ΡŽΡ‡Π΅Π½Π½ΠΎΠ΅ Π² ΠΊΡ€ΡƒΠ³Π»Ρ‹Π΅ скобки.

ΠžΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Π΅ Π² Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΡΡ…, ΠΈ ΠΈΡ… ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚Ρ‹ (ΠΎΠΏΠ΅Ρ€Π°Π½Π΄Ρ‹ ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π΅Π½Ρ‹ ΠΊΠ°ΠΊ a ΠΈ b; для суммы чисСл, разности ΠΈ ΠΏΡ€ΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ΠΈΡ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ — Ρ†Π΅Π»ΠΎΠ΅ число, Ссли ΠΎΠ±Π° ΠΎΠΏΠ΅Ρ€Π°Π½Π΄Π° — Ρ†Π΅Π»Ρ‹Π΅, ΠΈΠ½Π°Ρ‡Π΅ — вСщСствСнноС число) пСрСчислСны Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅.

Π£Ρ€ΠΎΠ²Π΅Π½ΡŒ ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚Π°

Бинтаксис

Π’ΠΈΠΏΡ‹ ΠΎΠΏΠ΅Ρ€Π°Π½Π΄ΠΎΠ²

Бмысл

Π’ΠΈΠΏ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π°

~a

простой

логичСскоС ΠΎΡ‚Ρ€ΠΈΡ†Π°Π½ΠΈΠ΅

Ρ†Π΅Π»Ρ‹ΠΉ (-1 ΠΈΠ»ΠΈ 1)

— a

число

ΡƒΠ½Π°Ρ€Π½Ρ‹ΠΉ минус

Ρ‚ΠΎΡ‚ ΠΆΠ΅, Ρ‡Ρ‚ΠΎ ΠΈ a

+a

число

ΡƒΠ½Π°Ρ€Π½Ρ‹ΠΉ плюс

a*b

числа

ΠΏΡ€ΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ΠΈΠ΅

число

a/b

числа

вСщСствСнноС Π΄Π΅Π»Π΅Π½ΠΈΠ΅

вСщСствСнноС

a+b

строки Π»ΠΈΠ±ΠΎ a — строка, b — число

конкатСнация строк (число прСобразуСтся Π² ΡΡ‚Ρ€ΠΎΠΊΡƒ)

строка

числа

сумма

число

a-b

числа

Ρ€Π°Π·Π½ΠΎΡΡ‚ΡŒ

число

a=b

простыС (ΠΎΠ±Π° — числа Π»ΠΈΠ±ΠΎ строки ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ)

Ρ€Π°Π²Π½ΠΎ

Ρ†Π΅Π»Ρ‹ΠΉ (-1 ΠΈΠ»ΠΈ 1)

a<>b

Π½Π΅ Ρ€Π°Π²Π½ΠΎ

a>b

большС

a

мСньшС

a<=b

мСньшС Π»ΠΈΠ±ΠΎ Ρ€Π°Π²Π½ΠΎ

a>=b

большС Π»ΠΈΠ±ΠΎ Ρ€Π°Π²Π½ΠΎ

a&b

простыС

«Π˜»

a^b

простыС

ΠΈΡΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‰Π΅Π΅ «Π˜Π›Π˜»

a≅b

логичСская ΡΠΊΠ²ΠΈΠ²Π°Π»Π΅Π½Ρ‚Π½ΠΎΡΡ‚ΡŒ

a|b

«Π˜Π›Π˜»

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

Π’Ρ‹Π·ΠΎΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈΠΌΠ΅Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ синтаксис: <�имя Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ>[<�фактичСский ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ 1>,<�фактичСский ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ 2>,…,<�фактичСский ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ 3>]. Π”Π°ΠΆΠ΅ Ссли список ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² пуст, ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Π½Ρ‹Π΅ скобки всС Ρ€Π°Π²Π½ΠΎ ΠΏΠΈΡˆΡƒΡ‚ΡΡ. ЀактичСскими ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ выраТСния.

НапримСр, function1[a, b+c, function2[a, function3[]], 56.12e-1]. БущСствуСт ряд ΠΏΡ€Π΅Π΄ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, с ΠΈΠΌΠ΅Π½Π°ΠΌΠΈ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΡΠΎΠ²ΠΏΠ°Π΄Π°Ρ‚ΡŒ ΠΈΠΌΠ΅Π½Π° ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΡ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ. Π˜Ρ… ΡΠΏΠΈΡΠΎΠΊ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅.

Ѐункция

Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠ΅

Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅

ОписаниС

abs[число]

Ρ‚ΠΎΠ³ΠΎ ΠΆΠ΅ Ρ‚ΠΈΠΏΠ°, Ρ‡Ρ‚ΠΎ ΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€

Π°Π±ΡΠΎΠ»ΡŽΡ‚Π½Π°Ρ Π²Π΅Π»ΠΈΡ‡ΠΈΠ½Π°

cos[число]

вСщСствСнноС

косинус

sin[число]

синус

tg[число]

тангСнс

arctg[число]

арктангСнс

arcsin[число]

арксинус

arccos[число]

арккосинус

exp[число]

ΡΡ‚Π΅ΠΏΠ΅Π½ΡŒ основания Π½Π°Ρ‚ΡƒΡ€Π°Π»ΡŒΠ½Ρ‹Ρ… Π»ΠΎΠ³Π°Ρ€ΠΈΡ„ΠΌΠΎΠ² (экспонСнта)

pow[число, число]

ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ Π² ΡΡ‚Π΅ΠΏΠ΅Π½ΠΈ Π²Ρ‚ΠΎΡ€ΠΎΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ (ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ Π½Π΅ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ)

ln[число]

Π½Π°Ρ‚ΡƒΡ€Π°Π»ΡŒΠ½Ρ‹ΠΉ Π»ΠΎΠ³Π°Ρ€ΠΈΡ„ΠΌ

lg[число]

дСсятичный Π»ΠΎΠ³Π°Ρ€ΠΈΡ„ΠΌ

log[число, число]

Π»ΠΎΠ³Π°Ρ€ΠΈΡ„ΠΌ ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° ΠΏΠΎ ΠΎΡΠ½ΠΎΠ²Π°Π½ΠΈΡŽ, Π·Π°Π΄Π°Π½Π½ΠΎΠΌΡƒ Π²Ρ‚ΠΎΡ€Ρ‹ΠΌ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠΌ

sqrt[число]

ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Π½Ρ‹ΠΉ ΠΊΠΎΡ€Π΅Π½ΡŒ

pi[]

константа pi (ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠ΅ Π΄Π»ΠΈΠ½Ρ‹ окруТности ΠΊ Π΄ΠΈΠ°ΠΌΠ΅Ρ‚Ρ€Ρƒ)

idiv[Ρ†Π΅Π»ΠΎΠ΅ число, Ρ†Π΅Π»ΠΎΠ΅ число]

Ρ†Π΅Π»ΠΎΠ΅

частноС цСлочислСнного дСлСния

imod[Ρ†Π΅Π»ΠΎΠ΅ число, Ρ†Π΅Π»ΠΎΠ΅ число]

Ρ†Π΅Π»ΠΎΠ΅

остаток цСлочислСнного дСлСния

substr[строка, Ρ†Π΅Π»ΠΎΠ΅ число, Ρ†Π΅Π»ΠΎΠ΅ число]

строка

подстрока (ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ — исходная строка, Π²Ρ‚ΠΎΡ€ΠΎΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ — индСкс ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ символа, Ρ‚Ρ€Π΅Ρ‚ΠΈΠΉ — Π΄Π»ΠΈΠ½Π° подстроки; Ссли происходит Π²Ρ‹Ρ…ΠΎΠ΄ Π·Π° ΠΏΡ€Π΅Π΄Π΅Π»Ρ‹ исходной строки, Ρ‚ΠΎ ΠΎΡˆΠΈΠ±ΠΊΠΈ Π½Π΅Ρ‚, Π½ΠΎ Π΄Π»ΠΈΠ½Π° Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π° — мСньшС ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠΉ Π² Ρ‚Ρ€Π΅Ρ‚ΡŒΠ΅ΠΌ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π΅)

strlen[строка]

Ρ†Π΅Π»ΠΎΠ΅

Π΄Π»ΠΈΠ½Π° строки

strpos[строка, строка]

Ρ†Π΅Π»ΠΎΠ΅

позиция ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ символа ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ вхоТдСния Π²Ρ‚ΠΎΡ€ΠΎΠΉ строки Π² ΠΏΠ΅Ρ€Π²ΡƒΡŽ, Π»ΠΈΠ±ΠΎ -1, Ссли совпадСний Π½Π΅Ρ‚ (нумСрация символов с Π½ΡƒΠ»Ρ)

toint[простой]

Ρ†Π΅Π»ΠΎΠ΅

ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΊ Ρ†Π΅Π»ΠΎΠΌΡƒ (Ссли Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ — Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ ошибка)

toreal[простой]

вСщСствСнноС

ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΊ Π²Π΅Ρ‰Π΅ΡΡ‚Π²Π΅Π½Π½ΠΎΠΌΡƒ (Ссли Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ — Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ ошибка)

tostring[любой]

строка

ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΊ ΡΡ‚Ρ€ΠΎΠΊΠ΅

issingle[любой]

Ρ†Π΅Π»ΠΎΠ΅ (-1 ΠΈΠ»ΠΈ 1)

являСтся Π»ΠΈ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ выраТСния Π½Π΅ ΠΌΠ°ΡΡΠΈΠ²ΠΎΠΌ

isarray[любой]

являСтся Π»ΠΈ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ выраТСния массивом

isstring[любой]

являСтся Π»ΠΈ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ выраТСния строкой

isnum[любой]

являСтся Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ выраТСния числом

isint[любой]

являСтся Π»ΠΈ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ выраТСния Ρ†Π΅Π»Ρ‹ΠΌ числом

isreal[любой]

являСтся Π»ΠΈ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ выраТСния вСщСствСнным числом

size[массив]

число элСмСнтов массива

defined[массив, Ρ†Π΅Π»ΠΎΠ΅]

ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ Π»ΠΈ Π² ΠΌΠ°ΡΡΠΈΠ²Π΅ элСмСнт с Π·Π°Π΄Π°Π½Π½Ρ‹ΠΌ индСксом

iff[простой, любой, любой]

любой

Ссли ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ — истина, Ρ‚ΠΎ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π²Ρ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°, ΠΈΠ½Π°Ρ‡Π΅ — Ρ‚Ρ€Π΅Ρ‚ΡŒΠ΅Π³ΠΎ

Если ΠΏΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅ стандартной Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Ρ‚ΠΈΠΏ хотя Π±Ρ‹ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ· ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² Π½Π΅ ΡΠΎΠΎΡ‚вСтствуСт Ρ‚Ρ€Π΅Π±ΡƒΠ΅ΠΌΠΎΠΌΡƒ, Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ ошибка.

ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ Π²Ρ‹Π·ΠΎΠ²Π° call позволяСт Π²Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚ΡŒ любоС Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅, ΠΏΡ€ΠΎΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΠΎΠ²Π°Π² Π΅Π³ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ ΠΊΠ°ΠΊ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρƒ. Он ΠΈΠΌΠ΅Π΅Ρ‚ синтаксис:

call <οΏ½Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅>

НапримСр, call procedure1[param1, param2].

ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ присваивания ΠΈΠΌΠ΅Π΅Ρ‚ синтаксис <�пСрСмСнная>:=<οΏ½Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅> ΠΈΠ»ΠΈ <�массив>{<οΏ½Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅-индСкс>}:=<οΏ½Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅>.

Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ пСрСмСнная ΠΈΠ»ΠΈ элСмСнт массива ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°ΡŽΡ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, Ρ€Π°Π²Π½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΡŽ выраТСния Π² ΠΏΡ€Π°Π²ΠΎΠΉ части ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° присваивания, Ссли ΠΎΠ½ΠΎ Π±Ρ‹Π»ΠΎ вычислСно ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎ.

Условный ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ ΠΈΠΌΠ΅Π΅Ρ‚ Π²ΠΈΠ΄:

if <οΏ½Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅>

[ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹]

[elseif <οΏ½Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅>]

[ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹]

[elseif <οΏ½Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅>]

[else]

[ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹]

endif

ΠŸΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡŽΡ‚ΡΡ выраТСния-условия Π² ΡΡ‚Ρ€ΠΎΠΊΠ°Ρ… с ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹ΠΌΠΈ словами if ΠΈ elseif. Как Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΎ истинноС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ условия (ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ число ΠΈΠ»ΠΈ нСпустая строка), Ρ‚ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ся ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹, ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ Π·Π° ΡΡ‚Ρ€ΠΎΠΊΠΎΠΉ с Π΄Π°Π½Π½Ρ‹ΠΌ условиСм, Π·Π°Ρ‚Π΅ΠΌ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΈΡ‚ Π½Π° ΡΡ‚Ρ€ΠΎΠΊΡƒ, ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΡƒΡŽ Π·Π° endif. Если Π½ΠΈ ΠΎΠ΄Π½ΠΎ ΠΈΠ· ΡƒΡΠ»ΠΎΠ²ΠΈΠΉ Π½Π΅ ΠΎΠΊΠ°Π·Π°Π»ΠΎΡΡŒ истинным, Ρ‚ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ся ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹, располоТСнныС послС else, Ссли строка с else имССтся Π² Π΄Π°Π½Π½ΠΎΠΌ условном ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π΅, ΠΈΠ½Π°Ρ‡Π΅ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΈΡ‚ Π½ΠΈΠΆΠ΅ endif. Условный ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ использован Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹:

1.)

if a<0

a := abs[a]

flag := 1

endif

2.)

if (ch="a")|(ch="A")

call proc_a[]

elseif (ch="b")|(ch="B")

call proc_b[]

elseif (ch="c")|(ch="C")

call proc_c[]

else

error

endif

ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ Ρ†ΠΈΠΊΠ»Π° while ΠΈΠΌΠ΅Π΅Ρ‚ Π²ΠΈΠ΄:

while <οΏ½Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅>

[ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹]

loop

Π’Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π±Π»ΠΎΠΊΠ° ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ² повторяСтся, ΠΏΠΎΠΊΠ° истинно Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ выраТСния-условия, Π·Π°Ρ‚Π΅ΠΌ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ пСрСдаСтся Π½Π° ΡΡ‚Ρ€ΠΎΠΊΡƒ, ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΡƒΡŽ Π·Π° loop. ΠŸΡ€ΠΈ этом, Ссли Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ выраТСния ΠΈΠ·Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎ Π»ΠΎΠΆΠ½ΠΎ, Ρ‚ΠΎ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ Π½Π΅ Π±ΡƒΠ΄ΡƒΡ‚ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½Ρ‹ Π½ΠΈ Ρ€Π°Π·Ρƒ. ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ Ρ†ΠΈΠΊΠ»Π° while ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ использован Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. ΠŸΡ€ΠΈΠΌΠ΅Ρ€:

i := 1

s:=0

while i<=n

s := s+i

i := i+1

loop

Π—Π΄Π΅ΡΡŒ пСрСмСнная s ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ суммы чисСл ΠΎΡ‚ 1 Π΄ΠΎ n.

ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ Ρ†ΠΈΠΊΠ»Π° for ΠΈΠΌΠ΅Π΅Ρ‚ Π²ΠΈΠ΄:

for <�пСрСмСнная-счСтчик> := <οΏ½Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅1>: <οΏ½Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅2>

[ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹]

next

Π’ Π½Π°Ρ‡Π°Π»Π΅ выполнСния Ρ†ΠΈΠΊΠ»Π° Π²Ρ‹Ρ‡ΠΈΡΠ»ΡΡŽΡ‚ΡΡ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅1 ΠΈ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅2 (ΠΈΡ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΡ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ Ρ†Π΅Π»Ρ‹ΠΌΠΈ, ΠΈΠ½Π°Ρ‡Π΅ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ ошибка), Π·Π°Ρ‚Π΅ΠΌ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ-счСтчику присваиваСтся Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅1 ΠΈ, Ссли ΠΎΠ½ΠΎ мСньшС ΠΈΠ»ΠΈ Ρ€Π°Π²Π½ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΡŽ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅2, Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΈΡ‚ Π²Π½ΡƒΡ‚Ρ€ΡŒ Ρ†ΠΈΠΊΠ»Π°, ΠΈΠ½Π°Ρ‡Π΅ — Π·Π° ΡΡ‚Ρ€ΠΎΠΊΡƒ с ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹ΠΌ словом next. ПослС ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ Ρ†ΠΈΠΊΠ»Π° Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ счСтчика увСличиваСтся Π½Π° Π΅Π΄ΠΈΠ½ΠΈΡ†Ρƒ ΠΈ ΡΡ€Π°Π²Π½ΠΈΠ²Π°Π΅Ρ‚ся со Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅2 (ΠΎΠ½ΠΎ вычисляСтся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π· Π² Π½Π°Ρ‡Π°Π»Π΅), Ссли ΠΎΠ½ΠΎ оказываСтся мСньшим ΠΈΠ»ΠΈ Ρ€Π°Π²Π½Ρ‹ΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΡŽ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅2, Ρ‚ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΠ΅Ρ‚ся ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π°Ρ итСрация Ρ†ΠΈΠΊΠ»Π°, ΠΈΠ½Π°Ρ‡Π΅ — Ρ†ΠΈΠΊΠ» Π·Π°Π²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ΡΡ. Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ счСтчика Π² Ρ†ΠΈΠΊΠ»Π΅, Π² ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠ΅, ΠΌΠΎΠΆΠ½ΠΎ ΠΌΠ΅Π½ΡΡ‚ΡŒ, Π½Π΅ Π΅ΡΠ»ΠΈ ΠΎΠ½ΠΎ окаТСтся Π½Π΅ Ρ†Π΅Π»Ρ‹ΠΌ Π½Π° ΠΌΠΎΠΌΠ΅Π½Ρ‚ окончания ΠΎΡ‡Π΅Ρ€Π΅Π΄Π½ΠΎΠΉ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ, Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ ошибка. ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ Ρ†ΠΈΠΊΠ»Π° for ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ использован Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. ΠŸΡ€ΠΈΠΌΠ΅Ρ€:

for i :=0: size[a]

a{i} := a{i}*2

next

ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ Π²ΠΎΠ·Π²Ρ€Π°Ρ‚Π° return Π½Π΅Π·Π°ΠΌΠ΅Π΄Π»ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΏΡ€Π΅Ρ€Ρ‹Π²Π°Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ (ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ использован Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ). НапримСр,

if a

result := 1

return

endif

Если ΠΏΡ€ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π½Π΅ Π²ΡΡ‚рСтился ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ return, Π²Ρ‹Ρ…ΠΎΠ΄ ΠΈΠ· Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ происходит ΠΊΠ°ΠΊ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΈΡ‚ Π½ΠΈΠΆΠ΅ послСднСй строки Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.

ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ error ΠΏΡ€Π΅Ρ€Ρ‹Π²Π°Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ — искусствСнно гСнСрируСтся ошибка Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ выполнСния. Он ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ использован Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€:

a:=toint[str]

if a<0

error

endif

Для Π²Ρ‹Π²ΠΎΠ΄Π° Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ print ΠΈ println. ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ print ΠΈΠΌΠ΅Π΅Ρ‚ синтаксис print <οΏ½Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅>. Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ выраТСния автоматичСски приводится ΠΊ ΡΡ‚Ρ€ΠΎΠΊΠ΅ (Ρ‚. Π΅. ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ println[a] ΠΈ println[tostring[a]] - Ρ€Π°Π²Π½ΠΎΡΠΈΠ»ΡŒΠ½Ρ‹). Π­Ρ‚Π° строка выводится Π½Π° ΠΊΠΎΠ½ΡΠΎΠ»ΡŒ. ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ println ΠΈΠΌΠ΅Π΅Ρ‚ Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½Ρ‹ΠΉ синтаксис ΠΈ Π½Π°Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅. ΠžΡ‚Π»ΠΈΡ‡ΠΈΠ΅ Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ println ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ Π½Π° Π½ΠΎΠ²ΡƒΡŽ строку послС Π²Ρ‹Π²ΠΎΠ΄Π°, print — Π½Π΅Ρ‚. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, Ссли ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ Π² ΠΊΠΎΠ½ΡΠΎΠ»ΠΈ Π²Π²Π΅Π΄Π΅Π½ΠΎ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π±Π΅Π· ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Ρ… слов ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° присваивания, Ρ‚ΠΎ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Π΅Π³ΠΎ вычислСния выводится Π½Π° ΠΊΠΎΠ½ΡΠΎΠ»ΡŒ Π² ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠΉ строкС — это сокращСнная Ρ„ΠΎΡ€ΠΌΠ° ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° println.

ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ clear позволяСт ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ ΠΈΠ· ΠΏΠ°ΠΌΡΡ‚ΠΈ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΊΠΎΠΌΠ°Π½Π΄Π° «clear n» удаляСт ΠΈΠ· ΠΏΠ°ΠΌΡΡ‚ΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ n, послС Ρ‡Π΅Π³ΠΎ ΠΎΠ½Π° считаСтся Π½Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΉ. Π£Π΄Π°Π»ΠΈΡ‚ΡŒ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Π΅ элСмСнты массива нСльзя. Π’Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° clear Π½Π°Π΄ Π½Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΉ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ Π½ΠΈΠΊΠ°ΠΊΠΎΠ³ΠΎ эффСкта ΠΈ Π½Π΅ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ ΠΎΡˆΠΈΠ±ΠΊΠ΅. Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° clear ΠΌΠΎΠΆΠ½ΠΎ Ρ‚Π°ΠΊΠΆΠ΅ ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ фактичСскиС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈ Π΄Π°ΠΆΠ΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ result, Ρ‡Ρ‚ΠΎ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΠ΅Ρ€Π΅Π΄ Ρ€Π°Π±ΠΎΡ‚ΠΎΠΉ с Π½Π΅ΠΉ ΠΊΠ°ΠΊ с ΠΌΠ°ΡΡΠΈΠ²ΠΎΠΌ. Но Π΅ΡΠ»ΠΈ пСрСмСнная result Π½Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π° Π½Π° ΠΌΠΎΠΌΠ΅Π½Ρ‚ Π²Ρ‹Ρ…ΠΎΠ΄Π° ΠΈΠ· Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Ρ‚ΠΎ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ ошибка Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ выполнСния. Бинтаксис ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° clear ΠΈΠΌΠ΅Π΅Ρ‚ Π²ΠΈΠ΄:

clear <�имя_ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ1>

ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΡ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ

1. Π‘ΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²ΠΊΠ° массива.

sort [a]

#сортируСт массив, Π° ΠΏΠΎ Π²ΠΎΠ·Ρ€Π°ΡΡ‚Π°Π½ΠΈΡŽ.

#ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ прямого Π²Ρ‹Π±ΠΎΡ€Π°

if ~isarray[a]

println «Invalid argument»

error

endif

n:=size[a]

for i:=0:n-2

k:=i

for j:=i+1:n-1

k:=iff[a{j}

next

if i<>k

t:=a{i}

a{i}:=a{k}

a{k}:=t

endif

next

result:=a

2. ВычислСниС ΠΠžΠ” ΠΏΠΎ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡƒ Π•Π²ΠΊΠ»ΠΈΠ΄Π°

nod [n,m]

#вычисляСт наимСньший ΠΎΠ±Ρ‰ΠΈΠΉ Π΄Π΅Π»ΠΈΡ‚Π΅Π»ΡŒ

#Π½Π°Ρ‚ΡƒΡ€Π°Π»ΡŒΠ½Ρ‹Ρ… чисСл n ΠΈ m

#ΠΏΠΎ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡƒ Π•Π²ΠΊΠ»ΠΈΠ΄Π°

if ~isint[n]|~isint[m]

println «Invalid arguments»

error

endif

if (n<0)|(m<0)

println «Invalid arguments»

error

endif

if n=0

result:=m

return

endif

if m=0

result:=n

return

endif

while m>0

t:=n

n:=m

m:=imod[t, m]

loop

result:=n

3. РСкурсивноС вычислСниС Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ°Π»Π°.

factor [n]

#рСкурсивноС вычислСниС Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ°Π»Π° числа n

if ~isint[n]

println «Invalid argument»

error

elseif n<0

println «Invalid argument»

error

elseif (n=0)|(n=1)

result:=1

else

result:=n*factor[n-1]

endif

4. ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ°, являСтся Π»ΠΈ строка ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½Ρ‹ΠΌ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠΌ.

test_d [str]

#Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ 1, Ссли строка являСтся ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½Ρ‹ΠΌ

#ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠΌ, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ состоит Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΈΠ·

#Π±ΡƒΠΊΠ², Ρ†ΠΈΡ„Ρ€, Π·Π½Π°ΠΊΠΎΠ² подчСркивания ΠΈ Π½Π°Ρ‡ΠΈΠ½Π°Π΅Ρ‚ся

#c Ρ†ΠΈΡ„Ρ€Ρ‹, ΠΏΡ€ΠΈ этом ΠΈΠΌΠ΅Π΅Ρ‚ Π½Π΅Π½ΡƒΠ»Π΅Π²ΡƒΡŽ Π΄Π»ΠΈΠ½Ρƒ,

#ΠΈ -1 Π² ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС

if ~isstring[str]

println «Invalid argument»

error

endif

n:=strlen[str]

if n=0

result:=-1

return

endif

ch:=substr[str, 0,1]

if (ch>="0″)&(ch<="9″)

result:=-1

return

endif

for i:=0:n-1

ch:=substr[str, i,1]

if ~(((ch>="0″)&(ch<="9″))|((ch>="A")&(ch<="Z"))|((ch>="a")&(ch<="z"))|(ch="_"))

result:=-1

return

endif

next

result:=1

5. ВычислСниС ΡƒΠ³Π»Π° Ρ‚Ρ€Π΅ΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠ° ΠΏΠΎ Ρ‚Ρ€Π΅ΠΌ сторонам.

angle [a,b,c]

#вычисляСт ΡƒΠ³ΠΎΠ» Ρ‚Ρ€Π΅ΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠ° со ΡΡ‚ΠΎΡ€ΠΎΠ½Π°ΠΌΠΈ

#a, b ΠΈ c ΠΌΠ΅ΠΆΠ΄Ρƒ сторонами a ΠΈ b (Π² Π³Ρ€Π°Π΄ΡƒΡΠ°Ρ…)

if ~isnum[a]|~isnum[b]|~isnum[c]

println «Invalid arguments»

error

endif

if (a<=0)|(b<=0)|(c<=0)

println «Not a triangle»

error

endif

cos_alpha:=(a*a+b*b-c*c)/(2*a*b)

if (cos_alpha>=1)|(cos_alpha<=-1)

println «Not a triangle»

error

endif

alpha:=arccos[cos_alpha]

result:=alpha*180/pi[]

ΠŸΡ€ΠΎΠ΅ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹-ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Π°

Для Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Π° Π±Ρ‹Π»ΠΎ Ρ€Π΅ΡˆΠ΅Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡƒ Microsoft .NET v.1.1 ΠΈ ΡΠ·Ρ‹ΠΊ программирования C#. Π­Ρ‚ΠΎ связано с Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ° .NET обСспСчиваСт достаточно Π²Ρ‹ΡΠΎΠΊΡƒΡŽ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ (быстродСйствиС) ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ ΠΏΡ€ΠΈ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΌ ΡƒΠ²Π΅Π»ΠΈΡ‡Π΅Π½ΠΈΠΈ скорости Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ. ПослСднСС обСспСчиваСтся Π·Π° ΡΡ‡Π΅Ρ‚ наличия ΡƒΠ΄ΠΎΠ±Π½Ρ‹Ρ… Π²ΠΈΠ·ΡƒΠ°Π»ΡŒΠ½Ρ‹Ρ… срСдств Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ, ΠΎΠ±ΡˆΠΈΡ€Π½ΠΎΠΉ ΠΈ ΠΌΠΎΡ‰Π½ΠΎΠΉ стандартной Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ классов, использования автоматичСской сборки мусора, ΠΊΠΎΠ³Π΄Π° ΠΏΠ°ΠΌΡΡ‚ΡŒ ΠΈΠ·-ΠΏΠΎΠ΄ Π±ΠΎΠ»Π΅Π΅ Π½Π΅ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Ρ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² освобоТдаСтся автоматичСски. Π―Π·Ρ‹ΠΊ C# ΠΆΠ΅ являСтся основным языком ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹ .NET, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΠΈΠΌ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ всС прСимущСства Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ Microsoft .NET, ΠΎΠ½ ΠΈΠΌΠ΅Π΅Ρ‚ вСсьма Π³ΠΈΠ±ΠΊΠΈΠΉ синтаксис, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΠΈΠΉ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Ρ‹Π²Π°Ρ‚ΡŒ достаточно слоТныС Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡ‹ ΡΡ€Π°Π²Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ нСбольшими, Π½ΠΎ Π»Π΅Π³ΠΊΠΎ Ρ‡ΠΈΡ‚Π°Π΅ΠΌΡ‹ΠΌΠΈ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Π°ΠΌΠΈ ΠΊΠΎΠ΄Π°.

Π’ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹Π΄Π΅Π»ΠΈΡ‚ΡŒ Π΄Π²Π΅ основныС Π³Ρ€ΡƒΠΏΠΏΡ‹ классов, Π΄Π²Π΅ подсистСмы, отвСтствСнныС Π·Π° Π»ΠΎΠ³ΠΈΠΊΡƒ Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Π° ΠΈ Π³Ρ€Π°Ρ„ичСский интСрфСйс ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ соотвСтствСнно. ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ пСрвая подсистСма содСрТит Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ большСС число классов, Ρ‡Π΅ΠΌ вторая, Π±Ρ‹Π»ΠΎ Ρ€Π΅ΡˆΠ΅Π½ΠΎ Ρ€Π°ΡΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚ΡŒ Π΅Π΅ Π² ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠΌ пространствС ΠΈΠΌΠ΅Π½ logic, Π²Π»ΠΎΠΆΠ΅Π½Π½ΠΎΠΌ Π² ΠΊΠΎΡ€Π½Π΅Π²ΠΎΠ΅ пространство ΠΈΠΌΠ΅Π½ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°. ΠšΠ»Π°ΡΡΡ‹, отвСтствСнныС Π·Π° Π³Ρ€Π°Ρ„ичСский интСрфСйс ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ, располоТСны нСпосрСдствСнно Π² ΠΊΠΎΡ€Π½Π΅Π²ΠΎΠΌ пространствС ΠΈΠΌΠ΅Π½ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, Π² ΠΏΡ€ΠΎΡΡ‚ранствС ΠΈΠΌΠ΅Π½ logic имССтся Π΄Π²Π° Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Ρ… пространства ΠΈΠΌΠ΅Π½ — operators ΠΈ vartypes, ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ Π΄Π²ΡƒΠΌ основным иСрархиям наслСдования Π² ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅ — ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π°ΠΌ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΈ Ρ‚ΠΈΠΏΠ°ΠΌ Π΄Π°Π½Π½Ρ‹Ρ…. ΠšΠΎΡ€Π½Π΅Π²ΠΎΠ΅ пространство ΠΈΠΌΠ΅Π½ ΠΈΠΌΠ΅Π΅Ρ‚ имя interpr. Π”ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΠ° ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ² ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½Π° Π½Π° Ρ€ΠΈΡ. 1.

Роль посрСдника ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠΌ интСрфСйсом ΠΈ ΠΏΠΎΠ΄ΡΠΈΡΡ‚Π΅ΠΌΠΎΠΉ, Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‰Π΅ΠΉ Π»ΠΎΠ³ΠΈΠΊΡƒ Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Π°, выполняСт класс Facade (фасад). Он Ρ‚Π°ΠΊΠΆΠ΅ отвСтствСнСн Π·Π° ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΏΠΎΡ‚ΠΎΠΊΠ° для выполнСния ΠΊΠΎΠΌΠ°Π½Π΄ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ (Π²Π²ΠΎΠ΄ΠΈΠΌΡ‹Ρ… с ΠΊΠΎΠ½ΡΠΎΠ»ΠΈ). Π’Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ ΠΈΡ… Π² Ρ‚ΠΎΠΌ ΠΆΠ΅ ΠΏΠΎΡ‚ΠΎΠΊΠ΅, Ρ‡Ρ‚ΠΎ ΠΈ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ сообщСния ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ интСрфСйса нСльзя Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Π² ΡΡ‚ΠΎΠΌ случаС Π·Π°Ρ†ΠΈΠΊΠ»ΠΈΠ²ΡˆΡƒΡŽΡΡ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ Π±ΡƒΠ΄Π΅Ρ‚ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€Π΅Ρ€Π²Π°Ρ‚ΡŒ. МногиС ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ класса Facade сводятся ΠΊ ΠΏΡ€ΠΎΡΡ‚ΠΎΠΌΡƒ Π²Ρ‹Π·ΠΎΠ²Ρƒ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² Π΄Ρ€ΡƒΠ³ΠΈΡ… классов ΠΈΠ· ΠΏΡ€ΠΎΡΡ‚ранства ΠΈΠΌΠ΅Π½ logic. Π­Ρ‚ΠΎΡ‚ класс Π² Π΄Π°Π»ΡŒΠ½Π΅ΠΉΡˆΠ΅ΠΌ Π±ΡƒΠ΄Π΅Ρ‚ рассмотрСн Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ.

Для ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ошибок примСняСтся ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ структурной ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ. ΠŸΡ€ΠΈ этом ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ классы ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΡ… ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ (для ошибок Π² ΠΊΠ»Π°ΡΡΠ°Ρ… пространства ΠΈΠΌΠ΅Π½ interpr. logic):

Β· CalcException — ошибка ΠΏΠΎ Π²ΠΈΠ½Π΅ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ (синтаксичСская ΠΈΠ»ΠΈ Π² Π²Ρ‹Ρ‡ΠΈΡΠ»Π΅Π½ΠΈΡΡ…);

Β· SyntaxErrorException — синтаксичСская ошибка, обнаруТиваСмая Π²ΠΎ Π²Ρ€Π΅ΠΌΡ «ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡ†ΠΈΠΈ», Ρ‚. Π΅. ΠΏΡ€ΠΈ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈΠ»ΠΈ прСобразования Π²Π²Π΅Π΄Π΅Π½Π½ΠΎΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ Π²ΠΎ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠΉ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚. УнаслСдован ΠΎΡ‚ CalcException;

Β· LineSyntaxException — синтаксичСская ошибка Π² ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΌ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠΈΡ‚ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎΠ± ΠΌΠ΅ΡΡ‚Π΅ обнаруТСния (имя Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, строка).

Β· OtherException — ошибки, связанныС с Π½Π΅ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎΠΉ Ρ€Π°Π±ΠΎΡ‚ΠΎΠΉ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Π° Π½Π΅ ΠΏΠΎ Π²ΠΈΠ½Π΅ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ. Класс ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для ΠΎΡ‚Π»Π°Π΄ΠΎΡ‡Π½Ρ‹Ρ… Ρ†Π΅Π»Π΅ΠΉ. ΠŸΡ€ΠΈ Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎΠΉ Ρ€Π°Π±ΠΎΡ‚Π΅ Ρ‚Π°ΠΊΠΎΠ΅ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ.

Β· LinkedListException — ошибка Π² ΠΌΠ΅Ρ‚ΠΎΠ΄Π°Ρ… класса LinkedList. УнаслСдован ΠΎΡ‚ ΠΊΠ»Π°ΡΡΠ° OtherException.

Β· NamespaceSerializationException — унаслСдован нСпосрСдствСнно ΠΎΡ‚ System.Exception. Π’Π°ΠΊΠΎΠ΅ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ — гСнСрируСтся Ссли пространство ΠΈΠΌΠ΅Π½ консоли Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ восстановлСно.

Π‘ΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π°Ρ Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΠ° классов ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½Π° Π½Π° Ρ€ΠΈΡ. 2.

МоТно Π²Ρ‹Π΄Π΅Π»ΠΈΡ‚ΡŒ нСсколько Π³Ρ€ΡƒΠΏΠΏ классов Π² ΠΏΡ€ΠΎΡΡ‚ранствС ΠΈΠΌΠ΅Π½ interpr. logic — классы, отвСтствСнныС Π·Π° Π²Ρ‹Ρ‡ΠΈΡΠ»Π΅Π½ΠΈΠ΅ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ, Π·Π° Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΡ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, Π·Π° ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ тСкста ΠΊΠΎΠΌΠ°Π½Π΄ ΠΈ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΡ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ Π²ΠΎ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠΉ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ («ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡ†ΠΈΡŽ» тСкста ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹), классы, ΡƒΡ‡Π°ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ Π² ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΈΠ½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΠΉ Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Π°. Π­Ρ‚ΠΈ Π³Ρ€ΡƒΠΏΠΏΡ‹ классов, Ρ€Π°Π²Π½ΠΎ ΠΊΠ°ΠΊ ΠΈ ΠΏΠΎΠ΄ΡΠΈΡΡ‚Π΅ΠΌΠ° графичСского интСрфСйса ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ, Π±ΡƒΠ΄ΡƒΡ‚ рассмотрСны Π½ΠΈΠΆΠ΅. Π’ ΠΏΡ€ΠΎΡΡ‚ранствС ΠΈΠΌΠ΅Π½ interpr. logic Ρ‚Π°ΠΊΠΆΠ΅ имССтся ΠΎΠ΄ΠΈΠ½ класс Π²ΡΠΏΠΎΠΌΠΎΠ³Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ назначСния — LinkedList. Он ΠΏΡ€Π΅Π΄ΡΡ‚авляСт двухсвязный список. Π’ Π½Π΅ΠΌ ΠΈΠΌΠ΅ΡŽΡ‚ΡΡ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΈ ΡΠ²ΠΎΠΉΡΡ‚Π²Π° добавлСния ΠΈ Ρ‡Ρ‚Сния элСмСнтов Π² Π½Π°Ρ‡Π°Π»Π΅ ΠΈ ΠΊΠΎΠ½Ρ†Π΅ списка, опрСдСлСния числа элСмСнтов списка. ΠŸΡ€ΠΈ этом, ΠΏΡ€ΠΈ ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ΅ чтСния ΠΈΠ· ΠΏΡƒΡΡ‚ΠΎΠ³ΠΎ списка, гСнСрируСтся ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅LinkedListException. ΠœΠ΅Ρ‚ΠΎΠ΄ GetIterator (), ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ Π² Π΄Π²ΡƒΡ… ΠΏΠ΅Ρ€Π΅Π³Ρ€ΡƒΠΆΠ΅Π½Π½Ρ‹Ρ… вСрсиях (для ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ элСмСнта списка ΠΈ Π΄Π»Ρ Π·Π°Π΄Π°Π½Π½ΠΎΠ³ΠΎ индСкса), Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π²Π»ΠΎΠΆΠ΅Π½Π½ΠΎΠ³ΠΎ класса LinkedList. Iterator, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ прСдставляСт собой ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΠΈΠΉ Ρ‡ΠΈΡ‚Π°Ρ‚ΡŒ элСмСнты списка, ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π°ΡΡΡŒ ΠΏΠΎ Π½Π΅ΠΌΡƒ ΠΎΡ‚ Π½Π°Ρ‡Π°Π»Π° ΠΊ ΠΊΠΎΠ½Ρ†Ρƒ, Π° Ρ‚Π°ΠΊΠΆΠ΅ Π΄Π²ΠΈΠ³Π°Ρ‚ΡŒΡΡ Π² ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠΌ Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠΈ. Π­Π»Π΅ΠΌΠ΅Π½Ρ‚ списка прСдставляСтся ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ частного Π²Π»ΠΎΠΆΠ΅Π½Π½ΠΎΠ³ΠΎ класса Link, содСрТащСго Ρ‚Ρ€ΠΈ поля с Π²ΠΈΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒΡŽ internal — ΠΎΠ΄Π½ΠΎ для хранСния значСния элСмСнта списка ΠΈ Π΄Π²Π° для ссылок Π½Π° ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΠΉ ΠΈ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ элСмСнты.

Π‘Π»Π΅Π΄ΡƒΠ΅Ρ‚ Ρ‚Π°ΠΊΠΆΠ΅ ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ интСрфСйс interpr.logic.IConsole, ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‰ΠΈΠΉ Π½Π΅Ρ‡Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ использовано для Π²Ρ‹Π²ΠΎΠ΄Π° тСкста. Он ΠΈΠΌΠ΅Π΅Ρ‚ Π΄Π²Π° ΠΌΠ΅Ρ‚ΠΎΠ΄Π° — void Print (string str) ΠΈ void PrintLn (string str), Π½Π°Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… понятно ΠΈΠ· Π½Π°Π·Π²Π°Π½ΠΈΡ.

ΠžΡΠ½ΠΎΠ²Π½Ρ‹Π΅ классы пространства ΠΈΠΌΠ΅Π½ interpr. logic ΠΏΠΎΠΊΠ°Π·Π°Π½Ρ‹ Π½Π° Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΠ΅ Π½Π° Ρ€ΠΈΡ. 3.

Рис. 3.

ΠšΠ»Π°ΡΡΡ‹ пространства ΠΈΠΌΠ΅Π½ interpr.logic.

Π’Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅Π΅ прСдставлСниС ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.

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

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

НапримСр, Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ a+(b*c-d)/e Π² ΠžΠŸΠ— ΠΈΠΌΠ΅Π΅Ρ‚ Π²ΠΈΠ΄ abc*d-e/+. ΠŸΡ€ΠΈΠΌΠ΅Π½ΠΈΠΌ ΠΊ Π½Π΅ΠΌΡƒ описанный Π²Ρ‹ΡˆΠ΅ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ вычислСния.

1. Заносим Π² ΡΡ‚Π΅ΠΊ a.

2. Заносим Π² ΡΡ‚Π΅ΠΊ b.

3. Заносим Π² ΡΡ‚Π΅ΠΊ c.

БостояниС стСка Π½Π° ΡΡ‚ΠΎΡ‚ ΠΌΠΎΠΌΠ΅Π½Ρ‚: a, b, c — Π²Π΅Ρ€ΡˆΠΈΠ½Π°.

4. ИзвлСкаСм ΠΈΠ· ΡΡ‚Π΅ΠΊΠ° ΠΎΠΏΠ΅Ρ€Π°Π½Π΄Ρ‹ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ умноТСния — b ΠΈ c ΠΈ Π·Π°Π½ΠΎΡΠΈΠΌ Π² ΡΡ‚Π΅ΠΊ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚.

Π‘Ρ‚Π΅ΠΊ: a, b*c.

5. Заносим Π² ΡΡ‚Π΅ΠΊ d.

Π‘Ρ‚Π΅ΠΊ: a, b*c, d.

6. ИзвлСкаСм ΠΈΠ· ΡΡ‚Π΅ΠΊΠ° ΠΎΠΏΠ΅Ρ€Π°Π½Π΄Ρ‹, ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΠΌ Π²Ρ‹Ρ‡ΠΈΡ‚Π°Π½ΠΈΠ΅, заносим Π² ΡΡ‚Π΅ΠΊ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚.

Π‘Ρ‚Π΅ΠΊ: a, b*c-d.

7. Заносим Π² ΡΡ‚Π΅ΠΊ e.

Π‘Ρ‚Π΅ΠΊ: a, b*c-d, e.

8. ИзвлСкаСм ΠΈΠ· ΡΡ‚Π΅ΠΊΠ° ΠΎΠΏΠ΅Ρ€Π°Π½Π΄Ρ‹, ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΠΌ Π΄Π΅Π»Π΅Π½ΠΈΠ΅, заносим Π² ΡΡ‚Π΅ΠΊ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚.

Π‘Ρ‚Π΅ΠΊ: a, (b*c-d)/e.

9. ИзвлСкаСм ΠΈΠ· ΡΡ‚Π΅ΠΊΠ° ΠΎΠΏΠ΅Ρ€Π°Π½Π΄Ρ‹, ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΠΌ слоТСниС, заносим Π² ΡΡ‚Π΅ΠΊ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚.

Π˜Ρ‚ΠΎΠ³ΠΎ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ Π² ΡΡ‚Π΅ΠΊΠ΅ a+(b*c-d)/e, Ρ‡Ρ‚ΠΎ ΠΈ Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Π»ΠΎΡΡŒ.

Для прСдставлСния Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ Π² ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ класс Expression. Он ΡΠΎΠ΄Π΅Ρ€ΠΆΠΈΡ‚ ΠΎΠ±Ρ€Π°Ρ‚Π½ΡƒΡŽ ΠΏΠΎΠ»ΡŒΡΠΊΡƒΡŽ запись выраТСния Π² Π²ΠΈΠ΄Π΅ связанного списка (ΠΎΠ΄Π½ΠΎΠ½Π°ΠΏΡ€Π°Π²Π»Π΅Π½Π½ΠΎΠ³ΠΎ). Π—Π²Π΅Π½ΠΎ этого списка, Ρ€Π°Π²Π½ΠΎ ΠΊΠ°ΠΊ ΠΈ ΡΡ‚Π΅ΠΊΠ°, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΠ³ΠΎ ΠΏΡ€ΠΈ вычислСнии выраТСния, прСдставляСтся ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ Π²Π»ΠΎΠΆΠ΅Π½Π½ΠΎΠ³ΠΎ класса Expression. Element, содСрТащим ссылки Π½Π° ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅ Π·Π²Π΅Π½ΠΎ ΠΈ Π½Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‰ΠΈΠΉ интСрфСйс IComputable, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ содСрТит ΠΎΠ΄ΠΈΠ½ ΠΌΠ΅Ρ‚ΠΎΠ΄ logic.vartypes.VarBase Compute () — ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅. ВычислСниС значСния выраТСния ΠΏΠΎ Ρ€Π°ΡΡΠΌΠΎΡ‚Ρ€Π΅Π½Π½ΠΎΠΌ Π²Ρ‹ΡˆΠ΅ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡƒ производится Π² ΠΌΠ΅Ρ‚ΠΎΠ΄Π΅ VarBase Expression. Calculate (). Π‘Ρ‚Ρ€ΠΎΠΊΠ°, содСрТащая запись выраТСния, обрабатываСтся Π² ΠΊΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΎΡ€Π΅ этого класса. Π˜Π½Ρ‚Π΅Ρ€Ρ„Π΅ΠΉΡ IComputable Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ трСмя классами:

Β· VarBase — абстрактный класс, ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‰ΠΈΠΉ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ любого Ρ‚ΠΈΠΏΠ° Π΄Π°Π½Π½Ρ‹Ρ…;

Β· VarName — прСдставляСт ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ ΠΏΠΎ Π΅Π΅ ΠΈΠΌΠ΅Π½ΠΈ;

Β· Call — прСдставляСт Π²Ρ‹Π·ΠΎΠ² ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Π»ΠΈΠ±ΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.

Π’Π½Π°Ρ‡Π°Π»Π΅ рассмотрим классы, ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‰ΠΈΠ΅ значСния Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ². ВсС ΠΎΠ½ΠΈ ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΏΠΎΡ‚ΠΎΠΌΠΊΠ°ΠΌΠΈ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‡Ρ‚ΠΎ Π½Π°Π·Π²Π°Π½Π½ΠΎΠ³ΠΎ класса VarBase. Как Π±Ρ‹Π»ΠΎ сказано Π²Ρ‹ΡˆΠ΅, Π² ΡΠ·Ρ‹ΠΊΠ΅ сущСствуСт Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅ Ρ‚ΠΈΠΏΠ° Π΄Π°Π½Π½Ρ‹Ρ… — Ρ†Π΅Π»ΠΎΠ΅ число, вСщСствСнноС число, строка ΠΈ ΠΌΠ°ΡΡΠΈΠ². ΠŸΡ€ΠΈ этом числовыС ΠΈ ΡΡ‚Ρ€ΠΎΠΊΠΎΠ²Ρ‹ΠΉ Ρ‚ΠΈΠΏΡ‹, Π² ΠΏΡ€ΠΎΡ‚ΠΈΠ²ΠΎΠΏΠΎΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ массиву, Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ простыми Ρ‚ΠΈΠΏΠ°ΠΌΠΈ. Для простых Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ Π±Π°Π·ΠΎΠ²Ρ‹ΠΌ являСтся абстрактный класс SingleVar. Π¦Π΅Π»Ρ‹ΠΉ ΠΈ Π²Π΅Ρ‰Π΅ΡΡ‚Π²Π΅Π½Π½Ρ‹ΠΉ Ρ‚ΠΈΠΏΡ‹ Ρ‚Π°ΠΊΠΆΠ΅ особо Π²Ρ‹Π΄Π΅Π»ΡΡŽΡ‚ΡΡ ΠΊΠ°ΠΊ числовыС, ΠΈ Π΄Π»Ρ Π½ΠΈΡ… сущСствуСт свой Π±Π°Π·ΠΎΠ²Ρ‹ΠΉ абстрактный класс NumVar. НаконСц, ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡƒ ΠΈΠ· Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅Ρ… Ρ‚ΠΈΠΏΠΎΠ² Π΄Π°Π½Π½Ρ‹Ρ… соотвСтствуСт свой ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹ΠΉ класс — IntVar, RealVar, StringVar ΠΈ ArrayVar. Π­Ρ‚Π° иСрархия классов находится Π² ΠΏΡ€ΠΎΡΡ‚ранствС ΠΈΠΌΠ΅Π½ interpr.logic.vartypes. Она ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½Π° Π½Π° Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΠ΅ Π½Π° Ρ€ΠΈΡ. 4.

Рис. 4.

ΠšΠ»Π°ΡΡΡ‹ пространства ΠΈΠΌΠ΅Π½ interpr.logic.vartypes.

ΠœΠ΅Ρ‚ΠΎΠ΄ Compute () класса VarBase просто Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ссылку this. ΠœΠ΅Ρ‚ΠΎΠ΄Ρ‹ IsArray (), IsSingle (), IsString (), IsNum (), IsInt (), IsReal () ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Ρ‚ΠΈΠΏ значСния. Они ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ RTTI is ΡΠ·Ρ‹ΠΊΠ° C#. Π’ ΠΊΠ»Π°ΡΡΠ΅ VarBase ΠΎΠ±ΡŠΡΠ²Π»Π΅Π½Ρ‹ абстрактными унаслСдованныС ΠΎΡ‚ System. Object ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ Clone () ΠΈ ToString (), Ρ‡Ρ‚ΠΎ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΈΡ… ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΡ Ρƒ Π½Π΅Π°Π±ΡΡ‚Ρ€Π°ΠΊΡ‚Π½Ρ‹Ρ… ΠΏΠΎΡ‚ΠΎΠΌΠΊΠΎΠ². Абстрактный ΠΌΠ΅Ρ‚ΠΎΠ΄ Serialise () сохраняСт ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ (Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΈ Π΅Π³ΠΎ Ρ‚ΠΈΠΏ) Π² Ρ„Π°ΠΉΠ»Π΅. Класс ArrayVar ΠΈΠΌΠ΅Π΅Ρ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ для присвоСния ΠΈ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΡ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Ρ… элСмСнтов массива, получСния Ρ€Π°Π·ΠΌΠ΅Ρ€Π° массива, выяснСния вопроса, ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΎ Π»ΠΈ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ элСмСнта массива с Π·Π°Π΄Π°Π½Π½Ρ‹ΠΌ индСксом. Класс SingleVar опрСдСляСт абстрактный ΠΌΠ΅Ρ‚ΠΎΠ΄ ToBool (), Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‰ΠΈΠΉ логичСскоС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°. Π’ ΠΊΠ»Π°ΡΡΠ΅ NumVar Ρ‚Π°ΠΊΠΆΠ΅ имССтся абстрактный ΠΌΠ΅Ρ‚ΠΎΠ΄ ToDouble (), Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‰ΠΈΠΉ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° ΠΊΠ°ΠΊ вСщСствСнноС число. Π­Ρ‚ΠΈ классы ΠΈ ΠΈΡ… ΠΏΠΎΡ‚ΠΎΠΌΠΊΠΈ содСрТат Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ для выполнСния Π½Π°Π΄ значСниями арифмСтичСских ΠΈ Π»ΠΎΠ³ΠΈΡ‡Π΅ΡΠΊΠΈΡ… ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ.

Π’ Π²ΠΈΠ΄Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² классов, ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½Ρ‹Ρ… ΠΎΡ‚ VarBase, Π² Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΡΡ… (экзСмплярах класса Expression), хранятся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ константныС значСния. ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ΠΆΠ΅ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‚ΡΡ здСсь ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ класса VarName, содСрТащими имя (ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€) ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ. Π‘Π°ΠΌΠΈ ΠΆΠ΅ значСния ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… хранятся Π² ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°Ρ… класса Namespace ΠΈΠ»ΠΈ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΎΡ‚ Π½Π΅Π³ΠΎ ConsoleNamespace.

Класс Namespace прСдставляСт пространство ΠΈΠΌΠ΅Π½ (ΠΎΠ±Π»Π°ΡΡ‚ΡŒ видимости) ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, класс ConsoleNamespace — срСды консоли. ΠŸΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Π° создаСтся стСк пространств ΠΈΠΌΠ΅Π½ (областСй видимости), Π½Π° Π²Π΅Ρ€ΡˆΠΈΠ½Π΅ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ находится пространство ΠΈΠΌΠ΅Π½ выполняСмой Π² Π΄Π°Π½Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Π½Π° Π΄Π½Π΅ — срСды консоли. ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π· ΠΏΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ создаСтся ΠΈ Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅Ρ‚ся Π½Π° Π²Π΅Ρ€ΡˆΠΈΠ½Ρƒ стСка Π½ΠΎΠ²Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Namespace, ΠΏΡ€ΠΈ Π²Ρ‹Ρ…ΠΎΠ΄Π΅ ΠΈΠ· Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΎΠ½ ΡƒΠ½ΠΈΡ‡Ρ‚оТаСтся. Класс Namespace ΠΈΠΌΠ΅Π΅Ρ‚ ΠΏΠΎΠ»Π΅, содСрТащСС ссылку Π½Π° ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΠΉ элСмСнт стСка, Ρƒ Π½Π°Ρ…одящСгося Π½Π° Π΄Π½Π΅ стСка ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° ConsoleNamespace ΠΎΠ½ΠΎ всСгда содСрТит Π½ΡƒΠ»Π΅Π²ΠΎΠΉ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ.

Бсылки Π½Π° Π²Π΅Ρ€ΡˆΠΈΠ½Ρƒ ΠΈ Π½Π° Π΄Π½ΠΎ стСка пространств ΠΈΠΌΠ΅Π½ хранятся Π² ΠΏΠΎΠ»ΡΡ… класса InterprEnvironment. Доступ ΠΊ Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΌΡƒ пространству ΠΈΠΌΠ΅Π½ осущСствляСтся Ρ‡Π΅Ρ€Π΅Π· Π΅Π³ΠΎ свойство CurrentNamespace. Для этого класса ΠΏΡ€ΠΈ запускС ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Π° создаСтся СдинствСнный ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, хранящийся Π² Π΅Π³ΠΎ статичСском ΠΏΠΎΠ»Π΅ ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΡ‹ΠΉ статичСским свойством Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для чтСния Instance. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, здСсь использован ΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½ Singleton. Класс InterprEnvironment выполняСт нСсколько Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ. Π‘Ρ€Π΅Π΄ΠΈ Π½ΠΈΡ…, Π²ΠΎ-ΠΏΠ΅Ρ€Π²Ρ‹Ρ…, Ρ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅ ссылки Π½Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ IConsole, с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ производится Π²Ρ‹Π²ΠΎΠ΄. Π’ΠΎ-Π²Ρ‚ΠΎΡ€Ρ‹Ρ… — Ρ€Π°Π±ΠΎΡ‚Π° с ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌΠΈ срСды консоли — ΠΈΡ… ΡΠΎΡ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅ Π² Ρ„Π°ΠΉΠ»Π΅, восстановлСниС ΠΈΠ· Ρ„Π°ΠΉΠ»Π° (производится Π²ΠΎ Π²Ρ€Π΅ΠΌΡ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° ΠΏΡ€ΠΈ запускС ΠΈΠ»ΠΈ пСрСзапускС ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Π°), ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ ΠΈΡ… ΡΠΏΠΈΡΠΊΠ°. Π’-Ρ‚Ρ€Π΅Ρ‚ΡŒΠΈΡ… — Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ° ΠΈ Ρ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΡ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ. ПослСдняя функция Π±ΡƒΠ΄Π΅Ρ‚ рассмотрСна ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ Π½ΠΈΠΆΠ΅.

ПослСдний ΠΈΠ· ΠΊΠ»Π°ΡΡΠΎΠ², Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‰ΠΈΡ… интСрфСйс IComputable, — класс Call прСдставляСт Π²Ρ‹Π·ΠΎΠ² ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ, встроСнной ΠΈΠ»ΠΈ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π² Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΈ. Он ΠΈΠΌΠ΅Π΅Ρ‚ Π΄Π²Π° поля. ΠŸΠ΅Ρ€Π²ΠΎΠ΅ ΠΈΠ· Π½ΠΈΡ… Ρ…Ρ€Π°Π½ΠΈΡ‚ ссылку Π½Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ класса ArgList, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ содСрТит список ΠΎΠΏΠ΅Ρ€Π°Π½Π΄ΠΎΠ². Оно инициализируСтся ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ SetArgList () ΠΏΡ€ΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ ΠΈΠ»ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. Π’Ρ‚ΠΎΡ€ΠΎΠ΅ ΠΏΠΎΠ»Π΅ содСрТит ссылку Π½Π° Π°Π±ΡΡ‚Ρ€Π°ΠΊΡ‚Π½Ρ‹ΠΉ класс Operation, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΈ ΠΏΡ€Π΅Π΄ΡΡ‚авляСт ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΡŽ ΠΈΠ»ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ. Π­Ρ‚ΠΎΡ‚ класс содСрТит абстрактноС свойство Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для чтСния ReqCount, Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‰Π΅Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΠ΅ число ΠΎΠΏΠ΅Ρ€Π°Π½Π΄ΠΎΠ² (Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ²). К ΡΡ‚ΠΎΠΌΡƒ свойству обращаСтся свойство класса Call с Ρ‚Π°ΠΊΠΈΠΌ ΠΆΠ΅ ΠΈΠΌΠ΅Π½Π΅ΠΌ. Π’Ρ‚ΠΎΡ€ΠΎΠΉ абстрактный Ρ‡Π»Π΅Π½ класса Operation, ΠΌΠ΅Ρ‚ΠΎΠ΄ VarBase Perform (ArgList al), выполняСт ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΡŽ (Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ) Π½Π°Π΄ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°ΠΌΠΈ, содСрТащимися Π² ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π΅ ArgList, ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Π΅ΠΌΡ‹ΠΌΠΈ Π² ΠΊΠ°Ρ‡Π΅ΡΡ‚Π²Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ². Π­Ρ‚ΠΎΡ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, ΡΠ²Π»ΡΡŽΡ‰Π΅Π΅ΡΡ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠΌ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ (Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ). Никакого Π°Π½Π°Π»ΠΎΠ³Π° Ρ‚ΠΈΠΏΠ° void Π½Π΅ ΠΏΡ€Π΅Π΄ΡƒΡΠΌΠΎΡ‚Ρ€Π΅Π½ΠΎ — опСрация (функция) ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π΅ Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ Ρ‚ΠΎ ΠΈΠ»ΠΈ ΠΈΠ½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ лишь Π² ΡΠ»ΡƒΡ‡Π°Π΅ ошибки. ΠžΡ‚ ΠΊΠ»Π°ΡΡΠ° Operation унаслСдован класс SubName, ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‰ΠΈΠΉ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ ΠΏΠΎ Π΅Π΅ ΠΈΠΌΠ΅Π½ΠΈ, ΠΈ ΠΌΠ½ΠΎΠ³ΠΎΡ‡ΠΈΡΠ»Π΅Π½Π½Ρ‹Π΅ классы, ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‰ΠΈΠ΅ стандартныС ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ ΠΈ Π²ΡΡ‚Ρ€ΠΎΠ΅Π½Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. ПослСдниС ΡΠ²Π»ΡΡŽΡ‚ΡΡ Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹ΠΌΠΈ Π² ΡΠ°ΠΌ класс Operation, ΠΏΡ€ΠΈΡ‚ΠΎΠΌ ΠΈΠΌΠ΅ΡŽΡ‚ спСцификатор доступа private. Для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΈΠ· Π½ΠΈΡ… Π² ΠΊΠ»Π°ΡΡΠ΅ Operation имССтся ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΎΠ΅ статичСскоС ΠΏΠΎΠ»Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для чтСния, ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΡŽΡ‰Π΅Π΅ΡΡ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ Ρ‚ΠΈΠΏΠ°. Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² этих Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Ρ… классов Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ. Π—Π΄Π΅ΡΡŒ Ρ‚Π°ΠΊΠΆΠ΅ использован ΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½ Singleton. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, ΠΌΠΎΠΆΠ½ΠΎ Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ΡŒ ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠΈ ΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½Π° Strategy — ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ класса Call (контСкст) конфигурируСтся ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ· ΠΊΠ»Π°ΡΡΠΎΠ², ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½Ρ‹Ρ… ΠΎΡ‚ Operation (стратСгия), Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, для Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΎΠ³ΠΎ повСдСния (выполнСния Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ) ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΎΠ΄ΠΈΠ½ ΠΈ Ρ‚ΠΎΡ‚ ΠΆΠ΅ интСрфСйс. Π”ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΠ° классов, ΠΏΠΎΡΡΠ½ΡΡŽΡ‰Π°Ρ структуру ΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½Π° Strategy ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΊ Π΄Π°Π½Π½ΠΎΠΌΡƒ ΡΠ»ΡƒΡ‡Π°ΡŽ, ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π° Π½Π° Ρ€ΠΈΡ. 5.

Рис. 5.

ИспользованиС ΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½Π° Strategy ΠΏΡ€ΠΈ выполнСния ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ.

ΠŸΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ прСдставляСт ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ класса Subroutine, содСрТащий список ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. Π­Ρ‚ΠΎΡ‚ класс содСрТит Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹ΠΉ класс Subroutine. Moment, ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ выполнСния Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ; Π΅Π³ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Π½Π° ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ Π»ΠΈΠ±ΠΎ Π½Π° ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ с Π·Π°Π΄Π°Π½Π½Ρ‹ΠΌ Π½ΠΎΠΌΠ΅Ρ€ΠΎΠΌ, Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ ΠΎΡ‚ Π½Π°Ρ‡Π°Π»Π° Π΄ΠΎ ΠΊΠΎΠ½Ρ†Π°. ΠŸΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½Ρ‹ΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ языка прСдставляСтся интСрфСйсом IOperator. Π­Ρ‚ΠΎΡ‚ интСрфСйс ΠΈ Π²ΡΠ΅ Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‰ΠΈΠ΅ Π΅Π³ΠΎ классы находятся Π² ΠΏΡ€ΠΎΡΡ‚ранствС ΠΈΠΌΠ΅Π½ interpr.logic.operators.

Π˜Π½Ρ‚Π΅Ρ€Ρ„Π΅ΠΉΡ IOperator ΠΈΠΌΠ΅Π΅Ρ‚ Π΄Π²Π° ΠΌΠ΅Ρ‚ΠΎΠ΄Π°. ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ ΠΈΠ· Π½ΠΈΡ…, GetKind (), Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Ρ‚ΠΈΠΏΠ° пСрСчислСния OperatorKind, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Ρ…Π°Ρ€Π°ΠΊΡ‚Π΅Ρ€ΠΈΠ·ΡƒΠ΅Ρ‚ Π²ΠΈΠ΄ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π°. Π’Ρ‚ΠΎΡ€ΠΎΠΉ — void Execute (Subroutine.Moment pos) выполняСт ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€. Π’ ΠΊΠ°Ρ‡Π΅ΡΡ‚Π²Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° пСрСдаСтся ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Subroutine. Moment, с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ пСрСдаСтся Π½Π° Π½ΡƒΠΆΠ½ΠΎΠ΅ мСсто. НуТно ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π΄Π°ΠΆΠ΅ Ссли Π΄Π°Π½Π½Ρ‹ΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ Π½Π΅ Π½Π°Ρ€ΡƒΡˆΠ°Π΅Ρ‚ Π»ΠΈΠ½Π΅ΠΉΠ½ΠΎΠΉ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ выполнСния, Ρ‚ΠΎ Π²ΡΠ΅ Ρ€Π°Π²Π½ΠΎ ΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²Π΅Π½Π½ΠΎΡΡ‚ΡŒ Π·Π° ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ Π½Π° ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ Π»Π΅ΠΆΠΈΡ‚ Π½Π° ΠΌΠ΅Ρ‚ΠΎΠ΄Π΅ Execute () ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π°.

Как Π±Ρ‹Π»ΠΎ сказано Π²Ρ‹ΡˆΠ΅, ряд ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ² ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ использован Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² Ρ„ункциях. Π‘ΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ классы Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‚ интСрфСйс IOperator нСпосрСдствСнно. Π”Ρ€ΡƒΠ³ΠΈΠ΅ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‚ собой ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Π²Π²Π΅Π΄Π΅Π½Ρ‹ Π² ΠΊΠΎΠ½ΡΠΎΠ»ΠΈ. ΠžΠ±Ρ‰ΠΈΠΌ свойством Ρ‚Π°ΠΊΠΈΡ… ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ² являСтся Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΈ Π½Π΅ Π½Π°Ρ€ΡƒΡˆΠ°ΡŽΡ‚ Π»ΠΈΠ½Π΅ΠΉΠ½ΠΎΠΉ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ выполнСния, Π²ΡΡ‚Ρ€Π΅Ρ‚ΠΈΠ²ΡˆΠΈΡΡŒ Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. ΠšΠ»Π°ΡΡΡ‹, ΠΈΡ… ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‰ΠΈΠ΅, ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΏΠΎΡ‚ΠΎΠΌΠΊΠ°ΠΌΠΈ абстрактного класса Command, Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‰Π΅Π³ΠΎ интСрфСйс IOperator. ΠœΠ΅Ρ‚ΠΎΠ΄ Execute () Π² ΠΊΠ»Π°ΡΡΠ΅ Command ΠΈΠΌΠ΅Π΅Ρ‚ ΠΏΠ΅Ρ€Π΅Π³Ρ€ΡƒΠΆΠ΅Π½Π½ΡƒΡŽ Π²Π΅Ρ€ΡΠΈΡŽ Π±Π΅Π· ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ², ΠΎΠ±ΡŠΡΠ²Π»Π΅Π½Π½ΡƒΡŽ абстрактной. ВСрсия ΠΆΠ΅ ΠΈΠ· ΠΈΠ½Ρ‚СрфСйса, ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°ΡŽΡ‰Π°Ρ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ Ρ‚ΠΈΠΏΠ° Subroutine. Moment, Π² ΡΡ‚ΠΎΠΌ классС Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π° ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ: вызываСтся ΠΌΠ΅Ρ‚ΠΎΠ΄ Execute () Π±Π΅Π· ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ², Π·Π°Ρ‚Π΅ΠΌ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ пСрСдаСтся Π½Π° ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€. Π’ ΠΊΠ»Π°ΡΡΠ΅ Command ΠΌΠ΅Ρ‚ΠΎΠ΄ GetKind () Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ OperatorKind. Plain, этот ΠΌΠ΅Ρ‚ΠΎΠ΄ здСсь Π½Π΅ ΡΠ²Π»ΡΠ΅Ρ‚ся Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹ΠΌ ΠΈ Π½Π΅ ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΠ΅Ρ‚ся Ρƒ ΠΏΠΎΡ‚ΠΎΠΌΠΊΠΎΠ².

Рассмотрим Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Π΅ классы, Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‰ΠΈΠ΅ интСрфСйс IOperator. НачнСм с ΠΏΠΎΡ‚ΠΎΠΌΠΊΠΎΠ² класса Command.

Π’ΠΎ ΠΏΠ΅Ρ€Π²Ρ‹Ρ…, ΠΏΡ€ΠΈΡΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‚ Π΄Π²Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹, ΠΎΡ‚Π²Π΅Ρ‡Π°ΡŽΡ‰ΠΈΠ΅ Π·Π° Π²Ρ‹Π²ΠΎΠ΄ Π½Π° ΠΊΠΎΠ½ΡΠΎΠ»ΡŒ — print ΠΈ println. Они ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‚ΡΡ классами PrintCommand ΠΈ PrintLnCommand соотвСтствСнно. Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π° этих классов ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½Π°. Они содСрТат ΠΏΠΎΠ»Π΅ m_expr, со ΡΡΡ‹Π»ΠΊΠΎΠΉ Π½Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Expression, ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‰ΠΈΠΉ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅, Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ вычислСния ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ Π²Ρ‹Π²Π΅Π΄Π΅Π½ Π½Π° ΠΊΠΎΠ½ΡΠΎΠ»ΡŒ. Π’ ΠΌΠ΅Ρ‚ΠΎΠ΄Π΅ Execute () Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ вычислСния выраТСния сначала приводится ΠΊ ΡΡ‚Ρ€ΠΎΠΊΠ΅ (вызываСтся ΠΌΠ΅Ρ‚ΠΎΠ΄ ToString), Π·Π°Ρ‚Π΅ΠΌ выводится Π½Π° ΠΊΠΎΠ½ΡΠΎΠ»ΡŒ Π²Ρ‹Π·ΠΎΠ²ΠΎΠΌ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° InterprNamespace.CurrentConsole.

Команда call рСализуСтся с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ класса CallCommand, Π² ΠΌΠ΅Ρ‚ΠΎΠ΄Π΅ execute () ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ просто вычисляСтся Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ ΠΈΠ· ΠΏΠΎΠ»Ρ m_expr, Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ ΠΆΠ΅ вычислСния выраТСния Π½ΠΈΠΊΠ°ΠΊ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ся.

ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΎΡ€Ρ‹ этих Ρ‚Ρ€Π΅Ρ… классов ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°ΡŽΡ‚ ΠΎΠ΄ΠΈΠ½ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ Ρ‚ΠΈΠΏΠ° Expression.

Класс EmptyCommand, ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‰ΠΈΠΉ ΠΏΡƒΡΡ‚ΡƒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ (пустая строка Π»ΠΈΠ±ΠΎ строка коммСнтария), содСрТит лишь пустыС конструктор Π±Π΅Π· ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ Execute ().

Класс ClearCommand содСрТит ΠΏΠΎΠ»Π΅ Ρ‚ΠΈΠΏΠ° string, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ хранится имя удаляСмой ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ. Π’ ΠΌΠ΅Ρ‚ΠΎΠ΄Π΅ execute () вызываСтся ΠΌΠ΅Ρ‚ΠΎΠ΄ Remove ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ пространства ΠΈΠΌΠ΅Π½.

И, Π½Π°ΠΊΠΎΠ½Π΅Ρ†, класс AssignCommand прСдставляСт ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ присваивания. Он ΠΈΠΌΠ΅Π΅Ρ‚ Π΄Π²Π° конструктора, ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°ΡŽΡ‰ΠΈΠ΅ Π΄Π²Π° ΠΈΠ»ΠΈ Ρ‚Ρ€ΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° соотвСтствСнно, для ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ² присваивания значСния ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΈΠ»ΠΈ элСмСнту массива. Π’ ΠΏΠ΅Ρ€Π²ΠΎΠΌ ΠΈΠ· ΡΡ‚ΠΈΡ… ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² содСрТится имя ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΈΠ»ΠΈ массива Π² Π»Π΅Π²ΠΎΠΉ части ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° присваивания, Π² ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Ρ… — присваиваСмоС Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ ΠΈ, Π²ΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠΌ случаС, индСксноС Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅. ВыраТСния ΠΏΠ΅Ρ€Π΅Π΄Π°ΡŽΡ‚ΡΡ Π² ΠΈΡ… ΡΡ‚Ρ€ΠΎΠΊΠΎΠ²ΠΎΠΉ записи, ΠΎΠ½ΠΈ «ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΡŽΡ‚ся» Π² ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ класса Expression Π² ΠΊΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΎΡ€Π΅ послСднСго. Π Π°Π±ΠΎΡ‚Π° с ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌΠΈ осущСствляСтся с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ пространства ΠΈΠΌΠ΅Π½, Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠ³ΠΎ свойством InterprEnvironment.Instance.CurrentNamespace.

К Ρ‡ΠΈΡΠ»Ρƒ классов, ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‰ΠΈΡ… ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ управлСния ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒΡŽ выполнСния, относятся ErrorOperator, ReturnOperator, ForOperator, NextOperator, WhileOperator, LoopOperator, IfOperator, ElseifOperator, ElseOperator, EndifOperator. Для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΈΠ· Π½ΠΈΡ… имССтся своС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π² ΠΏΠ΅Ρ€Π΅Ρ‡ΠΈΡΠ»Π΅Π½ΠΈΠΈ OperatorKind, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ся ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ GetKind ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ класса.

ΠœΠ΅Ρ‚ΠΎΠ΄ execute () класса ErrorOperator содСрТит всСго ΠΎΠ΄Π½Ρƒ строку — Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΡŽ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ CalcException. Π’Π°ΠΊΠΎΠΉ ΠΆΠ΅ ΠΊΠΎΡ€ΠΎΡ‚ΠΊΠΈΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ выполнСния ΠΈ Π² ΠΊΠ»Π°ΡΡΠ΅ ReturnOperator — вызываСтся ΠΌΠ΅Ρ‚ΠΎΠ΄ return () ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Subroutine. Moment pos, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½Π΅ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎ ΠΏΠ΅Ρ€Π΅Π΄Π°Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π·Π° ΠΊΠΎΠ½Π΅Ρ† Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.

ΠžΡΡ‚Π°Π»ΡŒΠ½Ρ‹Π΅ ΠΆΠ΅ ΠΈΠ· Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Π΅ΠΌΡ‹Ρ… ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ² Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ Π² ΠΏΠ°Ρ€Π΅ с Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π°ΠΌΠΈ — while — с loop, for — с end, if — с elseif, else ΠΈ endif. Π‘ΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ классы ΠΈΠΌΠ΅ΡŽΡ‚ поля, содСрТащиС Π½ΠΎΠΌΠ΅Ρ€Π° (ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ) ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… ΠΏΠ°Ρ€Π½Ρ‹Ρ… ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ², ΠΈ ΡΠ²ΠΎΠΉΡΡ‚Π²Π° для доступа ΠΊ Π½ΠΈΠΌ:

Β· Π² ΠΊΠ»Π°ΡΡΠ΅ ForOperator — свойство NextPos — позиция ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° next;

Β· Π² ΠΊΠ»Π°ΡΡΠ΅ NextOperator — свойство ForPos — позиция ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° for;

Β· Π² ΠΊΠ»Π°ΡΡΠ΅ WhileOperator — свойство LoopPos — позиция ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° loop;

Β· Π² ΠΊΠ»Π°ΡΡΠ΅ LoopOperator — свойство WhilePos — позиция ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° while;

Β· Π² ΠΊΠ»Π°ΡΡΠ°Ρ… IfOperator, ElseIfOperator ΠΈ ElseOperator — свойство NextPos — позиция блиТайшСго снизу ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° elseif, else ΠΈΠ»ΠΈ endif.

Условия ΠΈ Π³Ρ€Π°Π½ΠΈΡ†Ρ‹ Ρ†ΠΈΠΊΠ»ΠΎΠ² Ρ‚Π°ΠΌ, Π³Π΄Π΅ ΠΎΠ½ΠΈ Π½ΡƒΠΆΠ½Ρ‹, хранятся Π² Π²ΠΈΠ΄Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Ρ‚ΠΈΠΏΠ° Expression. Π›ΠΎΠ³ΠΈΠΊΠ° выполнСния ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π°Ρ:

Β· ΠŸΡ€ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° while ΠΌΠ΅Ρ‚ΠΎΠ΄ Execute () класса WhileOperator вычисляСт Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅-условиС ΠΈ, Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΠΈ ΠΎΡ‚ Π΅Π³ΠΎ логичСского значСния, ΠΏΠ΅Ρ€Π΅Π΄Π°Π΅Ρ‚ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Π»ΠΈΠ±ΠΎ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌΡƒ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρƒ, Π»ΠΈΠ±ΠΎ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρƒ, ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌΡƒ Π·Π° ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠΌ loop. ΠœΠ΅Ρ‚ΠΎΠ΄ Execute () класса LoopOperator ΠΏΠ΅Ρ€Π΅Π΄Π°Π΅Ρ‚ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Π½Π° ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ while.

Β· ΠŸΡ€ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° for ΠΌΠ΅Ρ‚ΠΎΠ΄ Execute () класса ForOperator вычисляСт значСния Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ-Π³Ρ€Π°Π½ΠΈΡ† Ρ†ΠΈΠΊΠ»Π°, Π·Π°ΠΏΠΎΠΌΠΈΠ½Π°Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π²Π΅Ρ€Ρ…Π½Π΅ΠΉ Π³Ρ€Π°Π½ΠΈΡ†Ρ‹ Π² ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΌ ΠΏΠΎΠ»Π΅ класса, Π·Π°Ρ‚Π΅ΠΌ, Ссли ниТняя Π³Ρ€Π°Π½ΠΈΡ†Π° большС Π²Π΅Ρ€Ρ…Π½Π΅ΠΉ Π³Ρ€Π°Π½ΠΈΡ†Ρ‹, ΠΏΠ΅Ρ€Π΅Π΄Π°Π΅Ρ‚ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Π½Π° ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€, ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ Π·Π° next, ΠΈΠ½Π°Ρ‡Π΅ — Π½Π° ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€. ΠŸΡ€ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ ΠΆΠ΅ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° next вызываСтся ΠΌΠ΅Ρ‚ΠΎΠ΄ Step () Ρƒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‰Π΅Π³ΠΎ ΠΏΠ°Ρ€Π½Ρ‹ΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ for, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°Π΅Ρ‚ Π½Π° Π΅Π΄ΠΈΠ½ΠΈΡ†Ρƒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ-счСтчик Ρ†ΠΈΠΊΠ»Π° ΠΈ, Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΠΈ ΠΎΡ‚ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π° сравнСния послСднСй с Π²Π΅Ρ€Ρ…Π½Π΅ΠΉ Π³Ρ€Π°Π½ΠΈΡ†Π΅ΠΉ Ρ†ΠΈΠΊΠ»Π°, ΠΏΡ€Π΅Π΄Π°Π΅Ρ‚ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Π½Π° ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€, ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ Π»ΠΈΠ±ΠΎ Π·Π° for, Π»ΠΈΠ±ΠΎ Π·Π° next. ΠŸΡ€ΠΈ этом Π·Π° Π²ΡΠ΅ врСмя выполнСния Ρ†ΠΈΠΊΠ»Π° ΠΌΠ΅Ρ‚ΠΎΠ΄ Execute () класса ForOperator выполняСтся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π·.

Β· ΠŸΡ€ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° if ΠΌΠ΅Ρ‚ΠΎΠ΄ Execute () класса IfOperator просматриваСт подряд ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ elseif, else ΠΈ endif Π΄ΠΎ Π½Π°Ρ…оТдСния Π±Π»ΠΎΠΊΠ° ΠΊΠΎΠ΄Π°, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ слСдуСт ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅. ΠŸΡ€ΠΈ этом ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ свойство NextPos классов IfOperator, ElseOperator, ElseifOperator ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ TestCondition класса ElseifOperator, ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡŽΡ‰ΠΈΠΉ содСрТащССся Π² ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π΅ условиС. Для опрСдСлСния Π²ΠΈΠ΄Π° ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π°, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ свойства NextPos ΠΎΡ‡Π΅Ρ€Π΅Π΄Π½ΠΎΠ³ΠΎ рассматриваСмого ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π°, Ρƒ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° вызываСтся Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ GetKind.

Π”ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΠ° классов пространства ΠΈΠΌΠ΅Π½ interpr.logic.operators ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π° Π½Π° Ρ€ΠΈΡ. 6.

Рис. 6.

ΠšΠ»Π°ΡΡΡ‹ пространства ΠΈΠΌΠ΅Π½ interpr.logic.operators.

ΠŸΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π·Π°Π³Ρ€ΡƒΠΆΠ°ΡŽΡ‚ΡΡ Π»ΠΈΠ±ΠΎ ΠΏΡ€ΠΈ запускС ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Π°, Π»ΠΈΠ±ΠΎ ΠΏΡ€ΠΈ сохранСнии ΠΈΡ… Π² Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€Π΅ ΠΊΠΎΠ΄Π°. Для хранСния Π·Π°Π³Ρ€ΡƒΠΆΠ΅Π½Π½Ρ‹Ρ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ класса Subroutine. Ѐункция прСдставляСтся списком ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ² (ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ ArrayList, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ хранятся ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Ρ‚ΠΈΠΏΠ° интСрфСйса IOperator). Π’Π°ΠΊΠΆΠ΅ Π² ΠΊΠ»Π°ΡΡΠ΅ ΠΈΠΌΠ΅ΡŽΡ‚ΡΡ поля, содСрТащиС ΠΎΠ±Ρ‰Π΅Π΅ число ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ², список ΠΈΠΌΠ΅Π½ Ρ„ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈ ΠΈΠΌΡ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. Как Π±Ρ‹Π»ΠΎ сказано Π²Ρ‹ΡˆΠ΅, Π² ΠΊΠ»Π°ΡΡΠ΅ Subroutine находится Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹ΠΉ класс Subroutine.Moment. Он ΠΏΡ€Π΅Π΄ΡΡ‚авляСт Ρ‚Π΅ΠΊΡƒΡ‰ΡƒΡŽ ΠΏΠΎΠ·ΠΈΡ†ΠΈΡŽ выполнСния Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈ Π² ΡΠ²ΠΎΠΈΡ… полях Ρ…Ρ€Π°Π½ΠΈΡ‚ Π½ΠΎΠΌΠ΅Ρ€ ссылку Π½Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Subroutine ΠΈ Π½ΠΎΠΌΠ΅Ρ€ Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π°. Π•Π³ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ с Ρ‡Π°ΡΡ‚Π½Ρ‹ΠΌΠΈ полями экзСмпляра класса Subroutine. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ наслСдованиС ΠΎΡ‚ ΠΊΠ»Π°ΡΡΠ° Subroutine становится Π½Π΅ΠΆΠ΅Π»Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ, ΠΈ ΠΎΠ½ ΠΎΠ±ΡŠΡΠ²Π»Π΅Π½ ΠΊΠ°ΠΊ sealed.

Π—Π° Ρ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅ Π·Π°Π³Ρ€ΡƒΠΆΠ΅Π½Π½Ρ‹Ρ… ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΡ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ отвСтствСнСн класс SubroutinesManager, Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹ΠΉ (со ΡΠΏΠ΅Ρ†ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠΌ доступа private) Π² ΠΊΠ»Π°ΡΡ InterprEnvironment. Он Ρ…Ρ€Π°Π½ΠΈΡ‚ Π² Π΄Π²ΡƒΡ… полях Ρ‚ΠΈΠΏΠ° System.Collections.ArrayList список Π·Π°Π³Ρ€ΡƒΠΆΠ΅Π½Π½Ρ‹Ρ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, ΠΊΠ°ΠΊ экзСмпляров класса Subroutine, ΠΈ ΡΠΏΠΈΡΠΎΠΊ ΠΈΡ… ΠΈΠΌΠ΅Π½, соотвСтствиС ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ ΠΈ Π΅Π΅ ΠΈΠΌΠ΅Π½Π΅ΠΌ устанавливаСтся ΠΏΠΎ ΠΈΠ½Π΄Π΅ΠΊΡΡƒ Π² ΡΠΏΠΈΡΠΊΠ°Ρ…. Singleton-ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ класса InterprEnvironment Ρ…Ρ€Π°Π½ΠΈΡ‚ ссылку Π½Π° ΠΎΠ΄ΠΈΠ½ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ класса SubroutinesManager. К Π΅Π³ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌ ΠΎΠ±Ρ€Π°Ρ‰Π°ΡŽΡ‚ΡΡ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ класса InterprEnvironment, Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰ΠΈΠ΅ с ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠΌΠΈ функциями, срСди ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ…:

Β· GetSub (string) — ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΏΠΎ Π΅Π΅ ΠΈΠΌΠ΅Π½ΠΈ;

Β· LoadSub (string) — Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ с Π·Π°Π΄Π°Π½Π½Ρ‹ΠΌ ΠΈΠΌΠ΅Π½Π΅ΠΌ;

Β· LoadSubs () — Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈΠ· Π²ΡΠ΅Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ² Π² ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅ subroutines;

Β· UnloadSub (string) — Π²Ρ‹Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ с Π·Π°Π΄Π°Π½Π½Ρ‹ΠΌ ΠΈΠΌΠ΅Π½Π΅ΠΌ.

Π’ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΡΡ… ΠΆΠ΅ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‚ΡΡ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ класса VarName, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ содСрТат имя Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΏΠΎ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ Π²ΠΎ Π²Ρ€Π΅ΠΌΡ выполнСния с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° InterprEnvironment. GetSub () поучаСтся ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Subroutine. Π­Ρ‚ΠΎ связано с Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ Ссли Π±Ρ‹ Π² Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΡΡ… Π² ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°Ρ… Call Ρ…Ρ€Π°Π½ΠΈΠ»Π°ΡΡŒ Π±Ρ‹ ссылка нСпосрСдствСнно Π½Π° Subroutine, функция, Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‰Π°Ρ Π΄Ρ€ΡƒΠ³ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ, Π½Π΅ ΠΌΠΎΠ³Π»Π° Π±Ρ‹ Π±Ρ‹Ρ‚ΡŒ Π·Π°Π³Ρ€ΡƒΠΆΠ΅Π½Π° ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎ Ρ€Π°Π½Π΅Π΅ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ послСднСй.

ΠžΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° тСкста ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.

ВСкст ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ Π² Π΄Π²ΡƒΡ… Π²ΠΈΠ΄Π°Ρ… — ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹, Π²Π²ΠΎΠ΄ΠΈΠΌΡ‹Π΅ с ΠΊΠΎΠ½ΡΠΎΠ»ΠΈ, ΠΈ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. Π’ ΠΎΠ±ΠΎΠΈΡ… случаях ΠΎΠ΄Π½Π° строка (Π·Π° ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ) прСобразуСтся Π² ΠΎΠ΄ΠΈΠ½ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, пустой. Π’ ΠΏΠ΅Ρ€Π²ΠΎΠΌ случаС этот ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡ‚ΡŒΡΡ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ класса, ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΎΡ‚ Command, Π²ΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠΌ — Π»ΡŽΠ±Ρ‹ΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ, Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‰ΠΈΠΌ интСрфСйс IOperator.

Для прСобразования строки тСкста ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π² ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‰ΠΈΠΉ интСрфСйс IOperator, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ статичСскиС ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ класса LineCompiler: Command CompileCommand (string) для ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹, Π²Π²Π΅Π΄Π΅Π½Π½ΠΎΠΉ с ΠΊΠΎΠ½ΡΠΎΠ»ΠΈ ΠΈ IOperator CompileOperator (string) для строки Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. Класс LineCompiler Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ нСстатичСских Ρ‡Π»Π΅Π½ΠΎΠ², ΠΊΡ€ΠΎΠΌΠ΅ Π·Π°ΠΊΡ€Ρ‹Ρ‚ΠΎΠ³ΠΎ конструктора, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ, замСщая конструктор ΠΈΠ· Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ класса System. Object, Π½Π΅ Π΄Π°Π΅Ρ‚ возмоТности ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ экзСмпляры этого класса. Алгоритм Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΎΠ±ΠΎΠΈΡ… Π½Π°Π·Π²Π°Π½Π½Ρ‹Ρ… ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π΅Π½. Π’Π½Π°Ρ‡Π°Π»Π΅ провСряСтся Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ Π² ΡΡ‚Ρ€ΠΎΠΊΠ΅ лСксСмы «:=», ΠΏΡ€ΠΈΡ‚ΠΎΠΌ Π½Π΅ ΠΌΠ΅ΠΆΠ΄Ρƒ Π΄Π²ΠΎΠΉΠ½Ρ‹ΠΌΠΈ ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠ°ΠΌΠΈ (Π½Π΅ Π² ΡΡ‚Ρ€ΠΎΠΊΠΎΠ²ΠΎΠΉ константС). Если ΠΎΠ½Π° Π½Π°ΠΉΠ΄Π΅Π½Π°, Ρ‚ΠΎ Π΄Π°Π½Π½Π°Ρ строка рассматриваСтся ΠΊΠ°ΠΊ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ присваивания. Π’Π½Π°Ρ‡Π°Π»Π΅ анализируСтся лСвая Ρ‡Π°ΡΡ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° присваивания. Π’ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΠΈ ΠΎΡ‚ Π΅Π΅ Π²ΠΈΠ΄Π°, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π½ΡƒΠΆΠ½Ρ‹ΠΉ конструктор класса AssignCommand — для присваивания значСния ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΈΠ»ΠΈ элСмСнту массива. Π•ΠΌΡƒ Π² ΠΊΠ°Ρ‡Π΅ΡΡ‚Π²Π΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ· ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² пСрСдаСтся Ρ‡Π°ΡΡ‚ΡŒ строки справа ΠΎΡ‚ ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ² «:=», которая разбираСтся ΠΊΠ°ΠΊ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π² ΠΊΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΎΡ€Π΅ класса Expression. Если ΠΆΠ΅ Π΄Π°Π½Π½Ρ‹ΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ Π½Π΅ ΡΠ²Π»ΡΠ΅Ρ‚ся ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠΌ присваивания, Ρ‚ΠΎ ΠΈΠ· ΡΡ‚Ρ€ΠΎΠΊΠΈ выдСляСтся пСрвая лСксСма, которая ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ сравниваСтся с ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹ΠΌΠΈ словами, с ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‚ΡΡ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ (ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹). Если совпадСний Π½Π΅ Π½Π°ΠΉΠ΄Π΅Π½ΠΎ, Ρ‚ΠΎ Π² ΠΌΠ΅Ρ‚ΠΎΠ΄Π΅ CompileOperator () гСнСрируСтся ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ SyntaxErrorException — синтаксичСская ошибка, Π² ΠΌΠ΅Ρ‚ΠΎΠ΄Π΅ ΠΆΠ΅ CompileCommand () Π² ΡΡ‚ΠΎΠΌ случаС строка рассматриваСтся ΠΊΠ°ΠΊ сокращСнная Ρ„ΠΎΡ€ΠΌΠ° ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ println (Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅). Как Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π²ΠΈΠ΄ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½, ΠΎΡΡ‚Π°Π²ΡˆΠ°ΡΡΡ Ρ‡Π°ΡΡ‚ΡŒ строки анализируСтся ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ. Для ΠΌΠ½ΠΎΠ³ΠΈΡ… ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ² — if, else if, while, print, println — ΠΎΠ½Π° рассматриваСтся ΠΊΠ°ΠΊ ΠΎΠ΄Π½ΠΎ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅. ΠŸΡ€ΠΈ этом Π½Π° Π»ΡŽΠ±ΠΎΠΌ ΠΈΠ· ΡΡ‚Π°ΠΏΠΎΠ² Π°Π½Π°Π»ΠΈΠ·Π° строки ΠΏΡ€ΠΈ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠ΅Π½ΠΈΠΈ ошибки ΠΌΠΎΠΆΠ΅Ρ‚ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΡƒΡ‚ΡŒ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ SyntaxErrorException.

Для лСксичСского Ρ€Π°Π·Π±ΠΎΡ€Π° строки (разбиСния Π½Π° Π»Π΅ΠΊΡΠ΅ΠΌΡ‹) ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ класс Parser. ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ Π΅Π³ΠΎ экзСмпляр ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для Ρ€Π°Π·Π±ΠΎΡ€Π° ΠΎΠ΄Π½ΠΎΠΉ строки. Класс ΠΈΠΌΠ΅Π΅Ρ‚ ΠΎΠ΄ΠΈΠ½ конструктор, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ ΠΎΠ΄ΠΈΠ½ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ Ρ‚ΠΈΠΏΠ° string, содСрТащий ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅ΠΌΡƒΡŽ строку. Π’ ΠΊΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΎΡ€Π΅ строка подвСргаСтся ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΡŽ — ΡƒΠ΄Π°Π»ΡΡŽΡ‚ΡΡ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ, Ссли ΠΎΠ½ ΠΏΡ€ΠΈΡΡƒΡ‚ствуСт, ΠΈ Π»ΠΈΡˆΠ½ΠΈΠ΅ ΠΏΡ€ΠΎΠ±Π΅Π»Ρ‹. Класс Parser Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅Ρ‚ стандартныС интСрфСйсы System. IEnumerable ΠΈ System.IEnumerator. Π˜Π½Ρ‚Π΅Ρ€Ρ„Π΅ΠΉΡ IEnumerable прСдставляСт ΠΎΠ±ΡŠΠ΅ΠΊΡ‚-список Ρ‚ΠΎΠ³ΠΎ ΠΈΠ»ΠΈ ΠΈΠ½ΠΎΠ³ΠΎ Π²ΠΈΠ΄Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ допускаСт ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΠΏΠ΅Ρ€Π΅Π±ΠΎΡ€ элСмСнтов. Он ΠΈΠΌΠ΅Π΅Ρ‚ СдинствСнный ΠΌΠ΅Ρ‚ΠΎΠ΄ IEnumerator GetEnumerator (). Π˜Π½Ρ‚Π΅Ρ€Ρ„Π΅ΠΉΡ IEnumerator прСдставляСт ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для ΠΏΠ΅Ρ€Π΅Π±ΠΎΡ€Π° элСмСнтов списка. Π’ Π΄Π°Π½Π½ΠΎΠΌ случаС эту Ρ€ΠΎΠ»ΡŒ выполняСт сам ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ класса Parser, поэтому ΠΌΠ΅Ρ‚ΠΎΠ΄ GetEnumerator Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ссылку this. Π­Ρ‚ΠΎΡ‚ интСрфСйс содСрТит ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ MoveNext () — ΠΏΡ€Π΅ΠΉΡ‚ΠΈ Π½Π° ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ элСмСнт, Reset () — сброс Π½Π° Π½Π°Ρ‡Π°Π»ΠΎ списка ΠΈ ΡΠ²ΠΎΠΉΡΡ‚Π²ΠΎ Current — Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ элСмСнт списка. Π’ Π΄Π°Π½Π½ΠΎΠΌ случаС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Parser рассматриваСтся ΠΊΠ°ΠΊ список строк-лСксСм, входящих Π² ΡΠΎΡΡ‚Π°Π² Ρ€Π°Π·Π±ΠΈΡ€Π°Π΅ΠΌΠΎΠΉ строки. Бвойство Current доступно Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для чтСния ΠΈ Π΅Π³ΠΎ Π±Π»ΠΎΠΊ get содСрТит Π²Ρ‹Π·ΠΎΠ² ΠΌΠ΅Ρ‚ΠΎΠ΄Π° private string GetCurrent (), Π²Ρ‹Π΄Π΅Π»ΡΡŽΡ‰Π΅Π³ΠΎ Ρ‚Π΅ΠΊΡƒΡ‰ΡƒΡŽ лСксСму ΠΈΠ· ΡΡ‚Ρ€ΠΎΠΊΠΈ. Π‘Ρ‚Ρ€ΠΎΠΊΠ° дСлится Π½Π° Π»Π΅ΠΊΡΠ΅ΠΌΡ‹ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… Π²ΠΈΠ΄ΠΎΠ²:

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