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

ВСория языков программирования ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ трансляции

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

Π£ΠΏΡ€Π°Π²Π»ΡΡŽΡ‰Π°Ρ Ρ‚Π°Π±Π»ΠΈΡ†Π° содСрТит Π² ΡΠ²ΠΎΠΈΡ… ΠΊΠ»Π΅Ρ‚ΠΊΠ°Ρ… ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚. ΠšΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ ΠΊΠ»Π΅Ρ‚ΠΊΠΈ, ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ слСдуСт Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ ΠΎΡ‡Π΅Ρ€Π΅Π΄Π½ΡƒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ, ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‚ΡΡ содСрТаниСм Π²Π΅Ρ€ΡˆΠΈΠ½Ρ‹ стСка (ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Π° строки) ΠΈ ΠΎΠ±ΠΎΠ·Ρ€Π΅Π²Π°Π΅ΠΌΡ‹ΠΌ Π½Π° Π²Ρ…ΠΎΠ΄Π½ΠΎΠΉ Π»Π΅Π½Ρ‚Π΅ символом Π°Π½Π°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅ΠΌΠΎΠΉ строки (ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Π° столбца). Π£ΠΏΡ€Π°Π²Π»ΡΡŽΡ‰Π°Ρ Ρ‚Π°Π±Π»ΠΈΡ†Π° Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚Π°, Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‰Π΅Π³ΠΎ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ Ρ‚ΠΈΠΏΠ° «ΡΠ΄Π²ΠΈΠ³-ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ΠΈΠ΅», СстСствСнно, содСрТит… Π§ΠΈΡ‚Π°Ρ‚ΡŒ Π΅Ρ‰Ρ‘ >

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

ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚Π½Ρ‹ΠΉ.

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

Лисп — сСмСйство языков программирования, основанных Π½Π° ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»Π΅Π½ΠΈΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ систСмой Π»ΠΈΠ½Π΅ΠΉΠ½Ρ‹Ρ… списков символов, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΡ€ΠΈΡ‚ΠΎΠΌ ΡΠ²Π»ΡΡŽΡ‚ΡΡ основной структурой Π΄Π°Π½Π½Ρ‹Ρ… языка. Лисп считаСтся Π²Ρ‚ΠΎΡ€Ρ‹ΠΌ послС Fortran ΡΡ‚Π°Ρ€Π΅ΠΉΡˆΠΈΠΌ высокоуровнСвым языком программирования.

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

Π‘Ρ„Π΅Ρ€Ρ‹ примСнСния языка Лисп ΠΌΠ½ΠΎΠ³ΠΎΠΎΠ±Ρ€Π°Π·Π½Ρ‹: Π½Π°ΡƒΠΊΠ° ΠΈ ΠΏΡ€ΠΎΠΌΡ‹ΡˆΠ»Π΅Π½Π½ΠΎΡΡ‚ΡŒ, ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈ ΠΌΠ΅Π΄ΠΈΡ†ΠΈΠ½Π°, ΠΎΡ‚ Π΄Π΅ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡ Π³Π΅Π½ΠΎΠΌΠ° Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊΠ° Π΄ΠΎ ΡΠΈΡΡ‚Π΅ΠΌΡ‹ проСктирования Π°Π²ΠΈΠ°Π»Π°ΠΉΠ½Π΅Ρ€ΠΎΠ². [2].

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

Π Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ синтаксичСского ΠΈ ΡΠ΅ΠΌΠ°Π½Ρ‚ичСского Π°Π½Π°Π»ΠΈΠ·Π° для подмноТСства Lisp. БинтаксичСский Ρ€Π°Π·Π±ΠΎΡ€ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ с ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ Π΄Π΅Ρ‚Π΅Ρ€ΠΌΠΈΠ½ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚Π° с ΠΌΠ°Π³Π°Π·ΠΈΠ½Π½ΠΎΠΉ ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ. БСмантичСскиС аспСкты ΠΎΠΏΠΈΡΠ°Ρ‚ΡŒ Π³Ρ€Π°ΠΌΠΌΠ°Ρ‚ΠΈΠΊΠΎΠΉ свойств.

Π’Ρ‹Π±Ρ€Π°Π½Π½ΠΎΠ΅ ΠΌΠ½ΠΎΠΉ подмноТСство языка ΠΈΠ·Π²Π»Π΅ΠΊΠ°Π΅Ρ‚ Π³ΠΎΠ»ΠΎΠ²Ρƒ ΠΎΡ‚ Π³ΠΎΠ»ΠΎΠ²Ρ‹ исходного списка: (car (car '((12 12) (7 8) 3))).

2. ОписаниС исходного языка.

ОписаниС рСгулярной Π³Ρ€Π°ΠΌΠΌΠ°Ρ‚ΠΈΠΊΠΈ, ΠΎΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‰Π΅ΠΉ лСксСмы языка:

" setq" {return stq;}.

" list" {return lst;}.

" cons" {return cns;}.

[0−9]+ {return Number;}.

[A-Za-z][A-Za-z0−9]* {return id;}.

' {return APOST;}.

{return SPACE;}.

({return LSC;}.

) {return RSC;}.

ОписаниС КБ-Π³Ρ€Π°ΠΌΠΌΠ°Ρ‚ΠΈΠΊΠΈ, ΠΎΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‰Π΅ΠΉ синтаксис языка:

Если (V, T, P, S) — ΠšΠ‘Π³Ρ€Π°ΠΌΠΌΠ°Ρ‚ΠΈΠΊΠ° (V — мноТСство Π½Π΅Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»ΡŒΠ½Ρ‹Ρ… символов, T — мноТСство Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»ΡŒΠ½Ρ‹Ρ… символов, P — мноТСство ΠΏΠΎΡ€ΠΎΠΆΠ΄Π°ΡŽΡ‰ΠΈΡ… ΠΏΡ€Π°Π²ΠΈΠ», Form — аксиома), Ρ‚ΠΎ.

V:={};

T:={ LSC RSC id Number SPACE APOST};

Form:= program|program SPACE form.

;

program: stroka1.

stroka2.

;

stroka1: LSC fun SPACE id SPACE arg RSC.

;

stroka2: LSC fun SPACE arg SPACE arg RSC.

;

fun: cns|stq|lst|.

;

arg: Number|id|fun1.

;

fun1: cns1|stq1|lst1|.

;

cns1: LSC cns SPACE arg SPACE arg RSC.

;

stq1: LSC stq SPACE arg SPACE Number RSC.

;

lst1: LSC lst SPACE arg SPACE arg RSC.

;

3. ДСтСрминированная автоматная модСль синтаксичСского Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€Π°.

Π’ Ρ…ΠΎΠ΄Π΅ Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π½Π°Π΄ курсовым ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠΌ Π±Ρ‹Π»Π° использованная модСль Π΄Π΅Ρ‚Π΅Ρ€ΠΌΠΈΠ½ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚Π° с ΠΌΠ°Π³Π°Π·ΠΈΠ½Π½ΠΎΠΉ ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ.

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

Π£ΠΏΡ€Π°Π²Π»ΡΡŽΡ‰Π°Ρ Ρ‚Π°Π±Π»ΠΈΡ†Π° содСрТит Π² ΡΠ²ΠΎΠΈΡ… ΠΊΠ»Π΅Ρ‚ΠΊΠ°Ρ… ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚. ΠšΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ ΠΊΠ»Π΅Ρ‚ΠΊΠΈ, ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ слСдуСт Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ ΠΎΡ‡Π΅Ρ€Π΅Π΄Π½ΡƒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ, ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‚ΡΡ содСрТаниСм Π²Π΅Ρ€ΡˆΠΈΠ½Ρ‹ стСка (ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Π° строки) ΠΈ ΠΎΠ±ΠΎΠ·Ρ€Π΅Π²Π°Π΅ΠΌΡ‹ΠΌ Π½Π° Π²Ρ…ΠΎΠ΄Π½ΠΎΠΉ Π»Π΅Π½Ρ‚Π΅ символом Π°Π½Π°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅ΠΌΠΎΠΉ строки (ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Π° столбца). Π£ΠΏΡ€Π°Π²Π»ΡΡŽΡ‰Π°Ρ Ρ‚Π°Π±Π»ΠΈΡ†Π° Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚Π°, Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‰Π΅Π³ΠΎ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ Ρ‚ΠΈΠΏΠ° «ΡΠ΄Π²ΠΈΠ³-ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ΠΈΠ΅», СстСствСнно, содСрТит ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ Ρ‚ΠΈΠΏΠ° «ΡΠ΄Π²ΠΈΠ³» ΠΈ Ρ‚ΠΈΠΏΠ° «ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ΠΈΠ΅», Π° Ρ‚Π°ΠΊΠΆΠ΅ Π΄Π²Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ°: ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎΠ΅ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΠ΅ синтаксичСского Ρ€Π°Π·Π±ΠΎΡ€Π° Π²Ρ…ΠΎΠ΄Π½ΠΎΠΉ строки ΠΈ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠ΅Π½ΠΈΠ΅ синтаксичСской ошибки Π²ΠΎ Π²Ρ…ΠΎΠ΄Π½ΠΎΠΉ строкС. LR (1)-Π³Ρ€Π°ΠΌΠΌΠ°Ρ‚ΠΈΠΊΠ° ΠΈ Π³Ρ€Π°ΠΌΠΌΠ°Ρ‚ΠΈΠΊΠ° ΠΏΡ€Π΅Π΄ΡˆΠ΅ΡΡ‚Π²ΠΎΠ²Π°Π½ΠΈΡ ΡΠ²Π»ΡΡŽΡ‚ΡΡ частными Π²ΠΈΠ΄Π°ΠΌΠΈ КБ-Π³Ρ€Π°ΠΌΠΌΠ°Ρ‚ΠΈΠΊ, для ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ построСн Π΄Π΅Ρ‚Π΅Ρ€ΠΌΠΈΠ½ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚, Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‰ΠΈΠΉ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ Ρ‚ΠΈΠΏΠ° «ΡΠ΄Π²ΠΈΠ³-ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ΠΈΠ΅».

Π’ Ρ…ΠΎΠ΄Π΅ Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π½Π°Π΄ курсовым ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠΌ Π±Ρ‹Π»Π° использована LR (1)-рСализация Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° «ΡΠ΄Π²ΠΈΠ³-ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ΠΈΠ΅».

Π’ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΈ строк ΡƒΠΏΡ€Π°Π²Π»ΡΡŽΡ‰Π΅ΠΉ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ LR (1)-Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚Π° выносятся индСксы Π΅Π³ΠΎ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΡ… состояний, Π° Π² Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΈ строк — всС Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»ΡŒΠ½Ρ‹Π΅ ΠΈ Π½Π΅Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»ΡŒΠ½Ρ‹Π΅ символы Π³Ρ€Π°ΠΌΠΌΠ°Ρ‚ΠΈΠΊΠΈ, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠ°Ρ€ΠΊΠ΅Ρ€ ΠΊΠΎΠ½Ρ†Π° Π²Ρ…ΠΎΠ΄Π½ΠΎΠΉ строки. Записи стСка содСрТат Π΄Π²Π° поля: ΠΏΠΎΠ»Π΅ символа ΠΈ ΠΏΠΎΠ»Π΅ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅Π³ΠΎ состояния. Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠ°Π½ΠΈΠ΅ поля состояния Π²Π΅Ρ€Ρ…Π½Π΅ΠΉ записи стСка опрСдСляСт Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π΅ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅Π΅ состояниС Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚Π° ΠΈ, ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρƒ строки ΡƒΠΏΡ€Π°Π²Π»ΡΡŽΡ‰Π΅ΠΉ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹, ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ Π²Ρ‹Π±Ρ€Π°Π½Π° очСрСдная ΠΊΠΎΠΌΠ°Π½Π΄Π°. ΠŸΠ΅Ρ€Π΅Π΄ Π½Π°Ρ‡Π°Π»ΠΎΠΌ Ρ€Π°Π±ΠΎΡ‚Ρ‹ распознаватСля Π² ΡΡ‚Π΅ΠΊ слСдуСт ΠΏΠΎΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ запись, ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‰ΡƒΡŽ индСкс Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ состояния Π² ΠΏΠΎΠ»Π΅ состояния. Команда Ρ‚ΠΈΠΏΠ° «ΡΠ΄Π²ΠΈΠ³» Π΄ΠΎΠ»ΠΆΠ½Π° ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ, Π² ΠΊΠ°ΠΊΠΎΠ΅ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅Π΅ состояниС ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΈΡ‚ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ с Ρ‡Ρ‚Π΅Π½ΠΈΠ΅ΠΌ символа ΠΈΠ· Π²Ρ…ΠΎΠ΄Π½ΠΎΠΉ Π»Π΅Π½Ρ‚Ρ‹. Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ выполнСния этой ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ курсор Π²Ρ…ΠΎΠ΄Π½ΠΎΠΉ Π»Π΅Π½Ρ‚Ρ‹ пСрСмСщаСтся Π½Π° ΠΎΠ΄ΠΈΠ½ символ Π²Π»Π΅Π²ΠΎ, Π° ΡΡ‚Π΅ΠΊ пополняСтся записью с ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Π½Π½Ρ‹ΠΌ ΠΈΠ· Π»Π΅Π½Ρ‚Ρ‹ символом Π² ΠΏΠΎΠ»Π΅ символа ΠΈ ΠΈΠ½Π΄Π΅ΠΊΡΠΎΠΌ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅Π³ΠΎ состояния, ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠ³ΠΎ Π² ΠΊΠΎΠΌΠ°Π½Π΄Π΅, Π² ΠΏΠΎΠ»Π΅ состояния. Команда Ρ‚ΠΈΠΏΠ° «ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ΠΈΠ΅» Π΄ΠΎΠ»ΠΆΠ½Π° ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ Π³Ρ€Π°ΠΌΠΌΠ°Ρ‚ΠΈΠΊΠΈ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π² Π²ΠΈΠ΄Π΅ Π΅Π³ΠΎ Π½ΠΎΠΌΠ΅Ρ€Π°, ΠΏΠΎ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ слСдуСт Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ΠΈΠ΅. Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ выполнСния этой ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ ΠΈΠ· ΡΡ‚Π΅ΠΊΠ° ΡƒΠ΄Π°Π»ΡΡŽΡ‚ΡΡ записи, ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ ΠΏΡ€Π°Π²ΠΎΠΉ части ΠΏΡ€Π°Π²ΠΈΠ»Π°, ΠΏΠΎ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ дСлаСтся ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ΠΈΠ΅, ΠΈ ΠΏΠΎΠ΄Π³ΠΎΡ‚авливаСтся имитация установки курсора Π²Ρ…ΠΎΠ΄Π½ΠΎΠΉ Π»Π΅Π½Ρ‚Ρ‹ Π½Π° Π½Π΅Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»ΡŒΠ½Ρ‹ΠΉ символ Π»Π΅Π²ΠΎΠΉ части этого ΠΏΡ€Π°Π²ΠΈΠ»Π°. По ΠΊΠΎΠΌΠ°Π½Π΄Π΅ «Π΄ΠΎΠΏΡƒΡΠΊ» Ρ€Π°Π·Π±ΠΎΡ€ считаСтся ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½Π½Ρ‹ΠΌ. По ΠΊΠΎΠΌΠ°Π½Π΄Π΅ «ΠΎΡˆΠΈΠ±ΠΊΠ°» Ρ€Π°Π·Π±ΠΎΡ€ Ρ‚Π°ΠΊΠΆΠ΅ прСкращаСтся, Π½ΠΎ Π²Ρ…одная строка ΠΎΠ±ΡŠΡΠ²Π»ΡΠ΅Ρ‚ΡΡ синтаксичСски Π½Π΅Π²Π΅Ρ€Π½ΠΎΠΉ.

Для Π²Ρ‹ΡˆΠ΅ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠ³ΠΎ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Π° Π³Ρ€Π°ΠΌΠΌΠ°Ρ‚ΠΈΠΊΠΈ с ΠΏΡ€Π°Π²ΠΈΠ»Π°ΠΌΠΈ i) — iii) ΡƒΠΏΡ€Π°Π²Π»ΡΡŽΡ‰Π°Ρ Ρ‚Π°Π±Π»ΠΈΡ†Π° LR (1)-Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚Π° ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Ρ‚Π°ΠΊΠΎΠΉ.

<�описания>

<�список имСн>

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

.

ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€.

ΠΌΠ°Ρ€ΠΊΠ΅Ρ€ ΠΊΠΎΠ½Ρ†Π°.

допуск.

сдвиг2.

сдвиг3.

сдвиг6.

сдвиг4.

ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ i.

сдвиг5.

ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ii.

ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ii.

ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ iii.

ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ iii.

Π’Π°Π±Π»ΠΈΡ†Π° построСна Π² ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ, Ρ‡Ρ‚ΠΎ Π½Π΅Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π» <�описания> являСтся Π½Π°Ρ‡Π°Π»ΡŒΠ½Ρ‹ΠΌ символом Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Π° Π³Ρ€Π°ΠΌΠΌΠ°Ρ‚ΠΈΠΊΠΈ (Π΅Π³ΠΎ аксиомой). Числами 1 — 6 Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅ ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π΅Π½Ρ‹ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠ΅ состояния Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚Π°, ΠΏΡ€ΠΈ этом состояниС 1 являСтся Π½Π°Ρ‡Π°Π»ΡŒΠ½Ρ‹ΠΌ. БоотвСтствСнно, Π² ΠΊΠΎΠΌΠ°Π½Π΄Π°Ρ… Ρ‚ΠΈΠΏΠ° «ΡΠ΄Π²ΠΈΠ³» этими числами ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠ΅ состояния, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚, выполняя Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹. ΠšΠΎΠΌΠ°Π½Π΄Ρ‹ Ρ‚ΠΈΠΏΠ° «ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ΠΈΠ΅» снабТСны Π½ΠΎΠΌΠ΅Ρ€Π°ΠΌΠΈ ΠΏΡ€Π°Π²ΠΈΠ», ΠΏΠΎ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ слСдуСт Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ΠΈΠ΅. ΠŸΡƒΡΡ‚Ρ‹Π΅ ΠΊΠ»Π΅Ρ‚ΠΊΠΈ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ ΡΡ‡ΠΈΡ‚Π°ΡŽΡ‚ΡΡ содСрТащими ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ «ΠΎΡˆΠΈΠ±ΠΊΠ°».

Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠ°Π½ΠΈΠ΅ ΠΏΠΎΠ»Π΅ΠΉ символа ΠΈ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅Π³ΠΎ состояния ΡƒΠΊΠ°Π·Π°Π½Ρ‹ Ρ‡Π΅Ρ€Π΅Π· Π·Π°ΠΏΡΡ‚ΡƒΡŽ. Π‘ΠΈΠΌΠ²ΠΎΠ»ΠΎΠΌ ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π΅Π½Π° пустая строка. Π’Π°ΠΊ запись, 1 ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΏΠΎΠ»Π΅ символа пусто, Π° Π² ΠΏΠΎΠ»Π΅ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅Π³ΠΎ состояния находится индСкс 1.

Для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ ΡƒΠΏΡ€Π°Π²Π»ΡΡŽΡ‰ΡƒΡŽ Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ для LR (1)-Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚Π°, Π½ΡƒΠΆΠ½ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ мноТСство Π΅Π³ΠΎ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΡ… состояний. Π’Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠ΅ состояния Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚Π° ставятся Π² ΡΠΎΠΎΡ‚вСтствиС позициям ΠΏΡ€Π°Π²Ρ‹Ρ… частСй ΠΏΡ€Π°Π²ΠΈΠ» LR (1)-Π³Ρ€Π°ΠΌΠΌΠ°Ρ‚ΠΈΠΊΠΈ Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ Ρ‚Π°ΠΊ Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΠΎΠΉ Ρ€Π°Π·ΠΌΠ΅Ρ‚ΠΊΠΈ этих ΠΏΡ€Π°Π²ΠΈΠ».

Π’ ΠΏΡ€ΠΎΡΡ‚Π΅ΠΉΡˆΠ΅ΠΌ случаС Ρ€Π°Π·ΠΌΠ΅Ρ‚ΠΊΠ° выполняСтся ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ.

1. Π˜Π½Π΄Π΅ΠΊΡΡ‹ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΡ… состояний слСдуСт ΠΏΠΎΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ ΠΌΠ΅ΠΆΠ΄Ρƒ сосСдними символами, ΠΏΠ΅Ρ€Π΅Π΄ ΠΏΠ΅Ρ€Π²Ρ‹ΠΌ символом (Π² Π½Π°Ρ‡Π°Π»ΡŒΠ½ΡƒΡŽ ΠΏΠΎΠ·ΠΈΡ†ΠΈΡŽ) ΠΈ ΠΏΠΎΡΠ»Π΅ послСднСго символа (Π² ΠΊΠΎΠ½Π΅Ρ‡Π½ΡƒΡŽ ΠΏΠΎΠ·ΠΈΡ†ΠΈΡŽ) ΠΏΡ€Π°Π²ΠΎΠΉ части ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΏΡ€Π°Π²ΠΈΠ»Π°.

2. Π’ Π½Π°Ρ‡Π°Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ всСх ΠΏΡ€Π°Π²Ρ‹Ρ… частСй ΠΏΡ€Π°Π²ΠΈΠ» для аксиомы слСдуСт ΠΏΠΎΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ индСкс Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ состояния Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚Π°.

3. Если Π² ΠΏΡ€ΠΎΡ†Π΅ΡΡΠ΅ Ρ€Π°Π·ΠΌΠ΅Ρ‚ΠΊΠΈ индСкс ΠΊΠ°ΠΊΠΎΠ³ΠΎ-Π»ΠΈΠ±ΠΎ состояния оказался ΠΏΠ΅Ρ€Π΅Π΄ Π½Π΅Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»ΡŒΠ½Ρ‹ΠΌ символом, Π΅Π³ΠΎ слСдуСт Ρ€Π°ΡΠΏΡ€ΠΎΡΡ‚Ρ€Π°Π½ΠΈΡ‚ΡŒ Π½Π° Π½Π°Ρ‡Π°Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ всСх ΠΏΡ€Π°Π²Ρ‹Ρ… частСй ΠΏΡ€Π°Π²ΠΈΠ» для этого Π½Π΅Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ символа.

4. Если Π² ΠΏΡ€ΠΎΡ†Π΅ΡΡΠ΅ Ρ€Π°Π·ΠΌΠ΅Ρ‚ΠΊΠΈ Π² Π΄Π²ΡƒΡ… ΠΈΠ»ΠΈ Π±ΠΎΠ»Π΅Π΅ ΠΏΡ€Π°Π²ΠΈΠ»Π°Ρ… слСва ΠΎΡ‚ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈ Ρ‚ΠΎΠ³ΠΎ ΠΆΠ΅ символа оказался ΠΎΠ΄ΠΈΠ½ ΠΈ Ρ‚ΠΎΡ‚ ΠΆΠ΅ индСкс Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅Π³ΠΎ состояния, Ρ‚ΠΎ Π² ΡΡ‚ΠΈΡ… ΠΏΡ€Π°Π²ΠΈΠ»Π°Ρ… ΠΈ ΡΠΏΡ€Π°Π²Π° ΠΎΡ‚ ΡΡ‚ΠΎΠ³ΠΎ символа слСдуСт ΠΏΠΎΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹Π΅ индСксы.

РассмотрСнная Π² ΡΡ‚ΠΎΠΌ Ρ€Π°Π·Π΄Π΅Π»Π΅ LR (1)-Ρ‚Π°Π±Π»ΠΈΡ†Π° Π±Ρ‹Π»Π° построСна Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ Ρ‚Π°ΠΊΠΎΠΉ Ρ€Π°Π·ΠΌΠ΅Ρ‚ΠΊΠΈ ΠΏΡ€Π°Π²ΠΈΠ» Π³Ρ€Π°ΠΌΠΌΠ°Ρ‚ΠΈΠΊΠΈ:

i) <�описания>:= 1 вСщСствСнноС 2 <�список ΠΈΠΌΠ΅Π½> 3.

ii) <�список ΠΈΠΌΠ΅Π½>:= 2 <�список ΠΈΠΌΠ΅Π½> 3, 4 ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ 5.

iii) <�список ΠΈΠΌΠ΅Π½>:= 2 ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ 6.

Для Ρ€Π°Π·ΠΌΠ΅Ρ‚ΠΊΠΈ понадобилось ΡˆΠ΅ΡΡ‚ΡŒ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… индСксов. Π‘Π»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, Ρƒ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚Π° Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ ΡˆΠ΅ΡΡ‚ΡŒ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΡ… состояний.

Π—Π°ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ с ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ Ρ€Π°Π·ΠΌΠ΅Ρ‚ΠΊΠΈ выполняСтся ΠΏΠΎ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΏΡ€Π°Π²ΠΈΠ»Π°ΠΌ.

1. Команда «ΡΠ΄Π²ΠΈΠ³ k» помСщаСтся Π² ΠΊΠ»Π΅Ρ‚ΠΊΡƒ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ с ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Π°ΠΌΠΈ (j, символ), Ссли позиция слСва ΠΎΡ‚ ΡΠΈΠΌΠ²ΠΎΠ»Π° ΠΎΡ‚ΠΌΠ΅Ρ‡Π΅Π½Π° индСксом k, Π° ΠΏΠΎΠ·ΠΈΡ†ΠΈΡ справа ΠΎΡ‚ ΡΠΈΠΌΠ²ΠΎΠ»Π° — индСксом j.

2. Команда «ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ m» помСщаСтся Π² ΠΊΠ»Π΅Ρ‚ΠΊΡƒ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ с ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Π°ΠΌΠΈ (n, символ), Ссли конСчная позиция ΠΏΡ€Π°Π²ΠΎΠΉ части m-Π³ΠΎ ΠΏΡ€Π°Π²ΠΈΠ»Π° Π³Ρ€Π°ΠΌΠΌΠ°Ρ‚ΠΈΠΊΠΈ ΠΎΡ‚ΠΌΠ΅Ρ‡Π΅Π½Π° индСксом n, Π° ΡΠΈΠΌΠ²ΠΎΠ» являСтся символом-слСдоватСлСм для Π½Π΅Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»Π° Π»Π΅Π²ΠΎΠΉ части m-Π³ΠΎ ΠΏΡ€Π°Π²ΠΈΠ»Π° Π³Ρ€Π°ΠΌΠΌΠ°Ρ‚ΠΈΠΊΠΈ, Ρ‚. Π΅. ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚ΡŒ Π·Π° ΡΡ‚ΠΈΠΌ Π½Π΅Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»ΠΎΠΌ Π² ΠΊΠ°ΠΊΠΎΠΉ-Π»ΠΈΠ±ΠΎ ΡΠ΅Π½Ρ‚Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠΉ Ρ„ΠΎΡ€ΠΌΠ΅. (Π‘Π΅Π½Ρ‚Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠΉ Ρ„ΠΎΡ€ΠΌΠΎΠΉ Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ аксиома ΠΈ Π²ΡΠ΅ строки Π½Π΅Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»ΡŒΠ½Ρ‹Ρ… ΠΈ Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»ΡŒΠ½Ρ‹Ρ… символов, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΠ· Π½Π΅Π΅ выводятся).

3. Команда «Π΄ΠΎΠΏΡƒΡΠΊ» помСщаСтся Π² ΠΊΠ»Π΅Ρ‚ΠΊΡƒ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ с ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Π°ΠΌΠΈ (l, аксиома), Π³Π΄Π΅ l — индСкс Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅Π³ΠΎ состояния Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚Π°.

4. ПослС заполнСния Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ ΠΏΠΎ ΠΏΡ€Π°Π²ΠΈΠ»Π°ΠΌ 1 — 3 Π² ΠΊΠ»Π΅Ρ‚ΠΊΠΈ, ΠΎΡΡ‚Π°Π²ΡˆΠΈΠ΅ΡΡ пустыми, помСщаСтся ΠΊΠΎΠΌΠ°Π½Π΄Π° «ΠΎΡˆΠΈΠ±ΠΊΠ°».

Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ примСнСния этих ΠΏΡ€Π°Π²ΠΈΠ» ΠΊ Ρ€Π°Π·ΠΌΠ΅Ρ‡Π΅Π½Π½ΠΎΠΌΡƒ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Ρƒ Π³Ρ€Π°ΠΌΠΌΠ°Ρ‚ΠΈΠΊΠΈ ΠΈ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ся Π²Ρ‹ΡˆΠ΅ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Π°Ρ ΡƒΠΏΡ€Π°Π²Π»ΡΡŽΡ‰Π°Ρ Ρ‚Π°Π±Π»ΠΈΡ†Π° LR (1)-Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚Π°. 1].

4. Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π½Π½ΠΎΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° состоит ΠΈΠ·:

Β· Π‘Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π° ΡƒΡ‚ΠΈΠ»ΠΈΡ‚ΠΎΠΉ FLEX (flex.cpp);

Β· Π€Π°ΠΉΠ»ΠΎΠ², сгСнСрированных ΡƒΡ‚ΠΈΠ»ΠΈΡ‚ΠΎΠΉ BISON (bisonout.cpp, bisonout. hpp);

Β· Π€Π°ΠΉΠ»Π° исходного тСкста (parcerin.txt).

5. Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ тСстирования.

Π’ ΠΊΠ°Ρ‡Π΅ΡΡ‚Π²Π΅ Π²Ρ…ΠΎΠ΄Π½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ Π±Ρ‹Π»ΠΈ ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½Ρ‹ Π΄Π°Π½Π½Ρ‹Π΅:

(car '((1 2) 3)) ΠΈ (car ((1 2) 3)).

ΠžΡ‚Π²Π΅Ρ‚Π½Π°Ρ рСакция ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π½Π° ΡΡ‚Ρ€ΠΎΠΊΡƒ (car '((1 2) 3)).

ΠžΡ‚Π²Π΅Ρ‚Π½Π°Ρ рСакция ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π½Π° ΡΡ‚Ρ€ΠΎΠΊΡƒ (car ((1 2) 3)).

6. Руководство ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ.

Написанная мною ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° распознаёт ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ car ΠΈ cdr (Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹ Π²Π°Ρ€ΠΈΠ°Ρ†ΠΈΠΈ Car, CAR, Cdr, CDR) ΠΈ ΡΠΏΠΈΡΠΎΠΊ ΠΈΡ… Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² (Ρ†ΠΈΡ„Ρ€Ρ‹, числа, Π±ΡƒΠΊΠ²Ρ‹ латинского Π°Π»Ρ„Π°Π²ΠΈΡ‚Π°). Бписок ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ Ρ‚Π°ΠΊΠΆΠ΅ Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Π΅ списки ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ (Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹Π΅ Π²Ρ‹ΡˆΠ΅).

Запуск ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ осущСствляСтся Ρ‡Π΅Ρ€Π΅Π· ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ (Project.sln) с Π½Π΅ΡΠ΅Π½ΠΈΠ΅ΠΌ Π²Ρ…ΠΎΠ΄Π½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ… Π² Ρ„Π°ΠΉΠ» parserin. txt (Π²ΠΊΠ»ΡŽΡ‡Ρ‘Π½ Π² ΠΏΡ€ΠΎΠ΅ΠΊΡ‚).

РСакция ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π½Π° Π²Ρ…ΠΎΠ΄Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅:

Β· сообщСниС «Π‘интаксичСская ошибка!», ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ синтаксичСских ошибок Π² ΠΈΡΡ…ΠΎΠ΄Π½ΠΎΠΌ тСкстС;

Β· сообщСниС «Π’Скст синтаксичСски Π²Π΅Ρ€Π΅Π½!», ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ отсутствиС синтаксичСских ошибок Π² ΠΈΡΡ…ΠΎΠ΄Π½ΠΎΠΌ тСкстС.

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

Π’ Ρ…ΠΎΠ΄Π΅ Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π½Π°Π΄ курсовым ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠΌ Π±Ρ‹Π»Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π½Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰Π°Ρ Π°Π½Π°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ синтаксис ΠΈ Π»Π΅ΠΊΡΠΈΠΊΡƒ исходного ΠΊΠΎΠ΄Π° Π½Π° ΡΠ·Ρ‹ΠΊΠ΅ Lisp.

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

БиблиографичСский список.

1. Π’. М. Максимова. ВСория языков программирования ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ трансляции. ΠœΠ΅Ρ‚ΠΎΠ΄ΠΈΡ‡Π΅ΡΠΊΠΈΠ΅ указания ΠΊ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΡŽ курсовых Ρ€Π°Π±ΠΎΡ‚. — Π‘Пб.: Π‘ΠŸΠ±Π“Π£ΠΠŸ, 2011.

2. http://progopedia.ru.

3. http://ru.wikipedia.org.

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

Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠ°Π½ΠΈΠ΅ Ρ„Π°ΠΉΠ»Π° описания для flex:

%option noyywrap.

%option yylineno.

%option never-interactive.

%{.

#include.

#include.

#include «bisonout.hpp» .

using namespace std;

extern FILE *yyin, *yyout; // referenced from flex-generated scanner.

extern int yylineno;

int yylex ();

YYSTYPE yyval;

string tmpstr = «» ;

%}.

DIGIT [0−9].

NUMBER [1−9]({DIGIT})*.

NAME [a-zA-Z].

%%.

{DIGIT} {return DIGIT;}.

{NAME} {return NAME;}.

{NUMBER} {return NUMBER;}.

" car" {return CAR;}.

" Car" {return CAR;}.

" CAR" {return CAR;}.

" cdr" {return CDR;}.

" Cdr" {return CDR;}.

" CDR" {return CDR;}.

' {return APOST;}.

{return SPACE;}.

({return LSC;}.

) {return RSC;}.

Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠ°Π½ΠΈΠ΅ Ρ„Π°ΠΉΠ»Π° описания для bison:

%{.

#include.

#include.

#include.

#include.

#include.

using namespace std;

int yyerror (char const* msg);

int yylex ();

int lineno ();

int yyparse ();

%}.

%token DIGIT NAME NUMBER CAR CDR APOST SPACE LSC RSC.

%%.

prog: LSC func RSC;

func: CAR SPACE prog | CDR SPACE prog | CAR SPACE arg | CDR SPACE arg;

arg: APOST val;

val: LSC lists RSC;

lists: atomes | LSC lists RSC | lists SPACE atomes | lists SPACE LSC lists RSC;

atomes: atom | atomes SPACE atom;

atom: NUMBER | DIGIT | NAME;

%%.

extern FILE *yyin;

int yyerror (char const* msg).

{.

return 0;

}.

int main ().

{.

setlocale (LC_ALL," RUS");

yyin=fopen («c:\kurs3\parserin.txt» ," r");

if (yyparse ()≠0) printf («Π‘интаксичСская ошибка! n»);

else printf («Π’Скст синтакcичСски Π²Π΅Ρ€Π΅Π½! n»);

system («pause»);

return 0;

}.

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