Skip to content

πŸŽ“ Investigation of various error recovery strategies during parsing. Their implementation in their own various parsers, demonstration of work on a variety of tests.

License

Notifications You must be signed in to change notification settings

a1k0u/error-recovery

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

48 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

Π‘Ρ‚Ρ€Π°Ρ‚Π΅Π³ΠΈΠΈ восстановлСниС послС ошибок 🧐

Π’ΠΈΠ΄Ρ‹ ошибок

ВсСго ошибки дСлят Π½Π° 4 Ρ‚ΠΈΠΏΠ°:

  1. ЛСксичСскиС

  2. БинтаксичСскиС

  3. БСмантичСскиС

  4. ЛогичСскиС

К лСксичСским ошибкам ΠΌΠΎΠΆΠ½ΠΎ отнСсти ΠΎΠΏΠ΅Ρ‡Π°Ρ‚ΠΊΠΈ Π² ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Ρ… словах ΠΈΠ»ΠΈ нСдопустимыС ΠΈΠΌΠ΅Π½Π° ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…. ЛСксичСскиС ошибки ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΠ²Π°ΡŽΡ‚ΡΡ лСксСром.

БинтаксичСскиС ошибки Π²ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‚ Π² сСбя нСсбалансированныС скобки ΠΈΠ»ΠΈ отсутствиС Ρ‚ΠΎΡ‡ΠΊΠΈ с запятой. ΠžΠ±Π½Π°Ρ€ΡƒΠΆΠΈΠ²Π°ΡŽΡ‚ΡΡ Π½Π° этапС парсинга.

К сСмантичСским ошибкам, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, относят нСсоотвСтствиС Ρ‚ΠΈΠΏΠΎΠ² ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° ΠΈ ΠΎΠΏΠ΅Ρ€Π°Π½Π΄Π°. ΠœΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠ΅Π½Ρ‹ статичСским Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ΠΎΠΌ.

ЛогичСскиС ошибки - самыС слоТныС. НапримСр, бСсконСчный Ρ†ΠΈΠΊΠ» ΠΈΠ»ΠΈ нСдостиТимый ΠΊΠΎΠ΄. ΠœΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠ΅Π½Ρ‹ Π»ΠΈΠ±ΠΎ самим программистом, Π»ΠΈΠ±ΠΎ ΠΏΡ€ΠΎΠ΄Π²ΠΈΠ½ΡƒΡ‚Ρ‹ΠΌ статичСским Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ΠΎΠΌ

ΠŸΠΎΡ‡Π΅ΠΌΡƒ восстановлСниС послС ошибок - ваТная Π·Π°Π΄Π°Ρ‡Π° парсСра

ΠŸΠ°Ρ€ΡΠ΅Ρ€ ΠΏΡ€ΠΈ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠ΅Π½ΠΈΠΈ синтаксичСской ошибки ΠΏΠΎΠ½ΠΈΠΌΠ°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ входная Ρ†Π΅ΠΏΠΎΡ‡ΠΊΠ° Π½Π΅ ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠΈΡ‚ языку ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΠΎΠ±Ρ‰ΠΈΡ‚ΡŒ ΠΎΠ± ошибкС ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŽ.

Но это Π½Π΅ совсСм Ρ‚ΠΎ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ оТидаСтся ΠΎΡ‚ парсСра. ΠœΡ‹, Π² ΠΏΠ΅Ρ€Π²ΡƒΡŽ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ, ΠΎΠΆΠΈΠ΄Π°Π΅ΠΌ, Ρ‡Ρ‚ΠΎ парсСр сообщит ΠΎ всСх синтаксичСских ΠΎΡˆΠΈΠ±ΠΊΠ°Ρ…, Π΄ΠΎΠΏΡƒΡ‰Π΅Π½Π½Ρ‹Ρ… Π²ΠΎ Π²Ρ…ΠΎΠ΄Π½ΠΎΠΉ Ρ†Π΅ΠΏΠΎΡ‡ΠΊΠ΅. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ парсСр Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡƒΠΌΠ΅Ρ‚ΡŒ ΠΏΡ€ΠΈ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠ΅Π½ΠΈΠΈ ошибки ΡΠΎΠΎΠ±Ρ‰ΠΈΡ‚ΡŒ ΠΎ Π½Π΅ΠΉ ΠΈ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠΈΡ‚ΡŒ парсинг дальшС.

Π’ΠΎ ΠΌΠ½ΠΎΠ³ΠΎΠΌ для Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ Ρ‚Π°ΠΊΠΎΠΉ Π·Π°Π΄Π°Ρ‡ΠΈ ΠΈ сущСствуСт ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΡ‹ восстановлСния послС ошибок.

Π Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ способы Π²ΠΎΡΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒΡΡ послС ошибок

Panic mode

ОписаниС

Одна ΠΈΠ· самых простых стратСгий. Π’ Π΄Π°Π½Π½ΠΎΠΉ стратСгии парсСр пропускаСт ΠΏΠΎΠ΄Π°Π½Π½Ρ‹Π΅ Π½Π° Π²Ρ…ΠΎΠ΄ символы ΠΏΠΎ ΠΎΠ΄Π½ΠΎΠΌΡƒ, ΠΏΠΎΠΊΠ° Π½Π΅ Π΄ΠΎΠΉΠ΄Ρ‘Ρ‚ Ρ‚ΠΎ ΡΠΈΠ½Ρ…Ρ€ΠΎΠ½ΠΈΠ·ΠΈΡ€ΡƒΡŽΡ‰Π΅Π³ΠΎ Ρ‚ΠΎΠΊΠ΅Π½Π°.

ИспользованиС

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для поиска ошибок, связанных с ΠΏΠ°Ρ€Π½Ρ‹ΠΌΠΈ Ρ‚ΠΎΠΊΠ΅Π½Π°ΠΌΠΈ: ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°ΡŽΡ‰ΠΈΠ΅ ΠΈ Π·Π°ΠΊΡ€Ρ‹Π²Π°ΡŽΡ‰ΠΈΠ΅ скобки, if ΠΈ then ΠΈ Ρ‚.Π΄.

ΠŸΡ€Π΅ΠΈΠΌΡƒΡ‰Π΅ΡΡ‚Π²Π°
  • Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π² Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π΅ компиляторов.
  • ΠžΡ‡Π΅Π½ΡŒ прост.
НСдостатки
  • Π’ поисках ΡΠΈΠ½Ρ…Ρ€ΠΎΠ½ΠΈΠ·ΠΈΡ€ΡƒΡŽΡ‰Π΅Π³ΠΎ Ρ‚ΠΎΠΊΠ΅Π½Π° ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΎΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ ΠΌΠ½ΠΎΠ³ΠΎ Ρ‚ΠΎΠΊΠ΅Π½ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ ошибки, Ρ‚.Π΅. ΠΏΡ€ΠΎΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ ошибки.
  • НС исправляСт ошибки, Π½ΠΎ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π° мСсто, Π³Π΄Π΅ ΠΎΠ½ΠΈ Π±Ρ‹Π»ΠΈ Π΄ΠΎΠΏΡƒΡ‰Π΅Π½Ρ‹.
ΠŸΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ

Π›ΠΈΠ½Π΅ΠΉΠ½ΠΎΠ΅ врСмя.

РСализация

Π’ ΠΏΠ°ΠΏΠΊΠ΅ panic-mode (Ρ‚Ρ‹ΠΊ) Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π° стратСгия Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ парсСра ПБП. БтратСгия занимаСтся поиском ΡΠΈΠ½Ρ…Ρ€ΠΎΠ½ΠΈΠ·ΠΈΡ€ΡƒΡŽΡ‰ΠΈΡ… Ρ‚ΠΎΠΊΠ΅Π½ΠΎΠ², Π° Ссли Π½Π΅ Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚, Ρ‚ΠΎ ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ Ρ‚ΠΈΠΏ ошибки ΠΈ мСсто, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ошибка ΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½Π°. Π’ сравнСнии с phrase mode ΠΈ global correction Π½Π΅ исправляСт ошибки, ΠΎΠ΄Π½Π°ΠΊΠΎ Π±ΠΎΠ»Π΅Π΅ проста Π² написании, Ρ‡Π΅ΠΌ error production, ΠΈ со своСй Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ - поиском ошибок, связанных с синхронизированными Ρ‚ΠΎΠΊΠ΅Π½Π°ΠΌΠΈ - справляСтся Π½Π°Π΄Ρ‘ΠΆΠ½ΠΎ ΠΈ быстро.

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

Π‘Ρ‚Ρ€ΠΎΠΊΠ°, поданная Π½Π° Π²Ρ…ΠΎΠ΄:

(()()()())(())())))))(((())((((()())()(((()))))

ΠžΡ‚Ρ€Π°Π±ΠΎΡ‚Π°Π²ΡˆΠΈΠΉ panic mode Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ ошибки ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

Unexpected closing bracket
(()()()())(())())))))(((())((((()())()(((()))))
~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Unexpected closing bracket
(()()()())(())())))))(((())((((()())()(((()))))
~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Unexpected closing bracket
(()()()())(())())))))(((())((((()())()(((()))))
~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Unexpected closing bracket
(()()()())(())())))))(((())((((()())()(((()))))
~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~
Unexpected closing bracket
(()()()())(())())))))(((())((((()())()(((()))))
~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~
Opening bracket is not closed
(()()()())(())())))))(((())((((()())()(((()))))
~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~
Opening bracket is not closed
(()()()())(())())))))(((())((((()())()(((()))))
~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~
Opening bracket is not closed
(()()()())(())())))))(((())((((()())()(((()))))
~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~
Opening bracket is not closed
(()()()())(())())))))(((())((((()())()(((()))))
~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~

Phrase mode

ОписаниС

Π’ этой стратСгии ΠΏΡ€ΠΈ Π½Π°Ρ…ΠΎΠΆΠ΄Π΅Π½ΠΈΠΈ Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… ошибок парсСр ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ измСняСт Π²Ρ…ΠΎΠ΄Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠΈΡ‚ΡŒ свою Ρ€Π°Π±ΠΎΡ‚Ρƒ. БчитаСтся, Ρ‡Ρ‚ΠΎ послС скрупулёзной Ρ€Π°Π±ΠΎΡ‚Ρ‹ с исправлСниСм ΠΎΠ΄Π½ΠΎΠΉ ΠΈ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… ошибок, ΠΎΡΡ‚Π°Π²ΡˆΠ°ΡΡΡ Ρ‡Π°ΡΡ‚ΡŒ тСкста ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ парсСру ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠΈΡ‚ΡŒ свою Ρ€Π°Π±ΠΎΡ‚Ρƒ.

ИспользованиС

Π’ Ρ†Π΅Π»ΠΎΠΌ, Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ сам Ρ€Π΅ΡˆΠ°Π΅Ρ‚ ΠΊΠ°ΠΊΠΈΠ΅ ΠΏΠ΅Ρ€Π²ΠΎΠ½Π°Ρ‡Π°Π»ΡŒΠ½Ρ‹Π΅ измСнСния Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π² свой компилятор. Π’ основном эту ΡΡ‚Ρ€Π°Ρ‚Π΅Π³ΠΈΡŽ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ±Ρ€Π°Ρ‚ΡŒ/Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ/ΠΏΠ΅Ρ€Π΅ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Π·Π½Π°ΠΊ ΠΊΠΎΠ½Ρ†Π° строки.

ΠŸΡ€Π΅ΠΈΠΌΡƒΡ‰Π΅ΡΡ‚Π²Π°
  • ΠœΠ½ΠΎΠΆΠ΅ΡΡ‚Π²Π΅Π½Π½Π°Ρ комбинация исправлСния Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… ошибок, Π΅ΡΡ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π·Π° нСсколько ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΉ ΠΈΡΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ нСсколько Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… ошибок.
  • Π›Π΅Π³ΠΊΠΎ встраиваСтся Π² Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ Π³Ρ€Π°ΠΌΠΌΠ°Ρ‚ΠΈΠΊΠΈ.
НСдостатки
  • ΠŸΡ€ΠΈ Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠΌ Π°Π½Π°Π»ΠΈΠ·Π΅ локальной ошибки пСрСстановка ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ Π±Π΅ΡΠΊΠΎΠ½Π΅Ρ‡Π½ΡƒΡŽ (Π½Π΅ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΡƒΡŽ) Ρ€Π°Π±ΠΎΡ‚Ρƒ парсСра.
  • ΠŸΡ€ΠΈΡ…ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ Ρ‚Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ ΠΌΠ½ΠΎΠ³ΠΎ мыслСтоплива, Ρ‡Ρ‚ΠΎΠ±Ρ‹ парсСр Π½Π΅ сломался.
ΠŸΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ

МоТСм ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΡ‚ΡŒΡΡ свСрху inf, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Π² слоТных сцСнариях локальноС исправлСниС ΠΌΠΎΠΆΠ΅Ρ‚ Π·Π°Ρ†ΠΈΠΊΠ»ΠΈΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρƒ парсСра.

Π‘Π½ΠΈΠ·Ρƒ Π²Π·ΡΡ‚ΡŒ количСство строк Π²ΠΎ Π²Ρ…ΠΎΠ΄Π½ΠΎΠΌ Ρ„Π°ΠΉΠ»Π΅, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Π² Π½Π΅ΠΌ Π½Π΅Ρ‚ ошибок.

Π’ срСднСм получаСтся, Ρ‡Ρ‚ΠΎ срСднСС количСство ошибок Π½Π° строку * количСство строк.

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

Код Π½Π° ΠΏΡ€ΠΈΠ΄ΡƒΠΌΠ°Π½Π½ΠΎΠΌ plus-expression-variable-output-lang, Π²ΠΊΡ€Π°Ρ‚Ρ†Π΅ PEVOL.

;
1 + 1;
a;

OUT dssd = 1033 # Π½Π΅ Ρ…Π²Π°Ρ‚Π°Π΅Ρ‚ ;
OUT ds = 1033 + 1 2; # ΠΏΡ€ΠΎΠΏΡƒΡ‰Π΅Π½ +
OUT ds;
OUT 5 1 + aba = 1033 + 1 # Π½Π΅Ρ‚ ;, Π½Π΅ Ρ…Π²Π°Ρ‚Π°Π΅Ρ‚ +,
                         # оТидаСтся +, Π° ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»ΠΈ = 

a = b + 1 + c + 10 # Π½Π΅Ρ‚ ;
k = a b c d + 10 + 2 5 + 1 # Π½Π΅Ρ‚ + ΠΈ ;
b = 10; OUT b; b = 20; OUT b # ;

OUT k;
OUT ;
OUT # ;

ПослС ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΈΠ²Π½ΠΎΠΉ Ρ€Π°Π±ΠΎΡ‚Ρ‹ парсСра, Ρ€Π°Π±ΠΎΡ‚Π° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ описана Ρ‚ΡƒΡ‚, с постСпСнным ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ΠΌ Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… ошибок ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ Ρ„Π°ΠΉΠ» с исправлСнным ΠΊΠΎΠ΄ΠΎΠΌ. Π’Π°ΠΊΠΆΠ΅ Π²Ρ‹Π²ΠΎΠ΄ всСх ошибок.

;
1 + 1;
a;

OUT dssd = 1033;
OUT ds = 1033 + 1 + 2;
OUT ds;
OUT 5 + 1 + aba  +  1033 + 1;

a = b + 1 + c + 10;
k = a + b + c + d + 10 + 2 + 5 + 1;
b = 10; OUT b; b = 20; OUT b;

OUT k;
OUT ;
OUT;

Π’ΠΎΡ‚ собствСнно ошибки нашСго ΠΊΠΎΠ΄Π°.

warning: expected ';' at 5 line.
warning: expected plus in expression at 6 line.
warning: expected plus, got assign at 8 line.
warning: expected ';' at 8 line.
warning: expected plus in expression at 8 line.
warning: expected ';' at 10 line.
warning: expected ';' at 11 line.
warning: expected plus in expression at 11 line.
warning: expected plus in expression at 11 line.
warning: expected plus in expression at 11 line.
warning: expected plus in expression at 11 line.
warning: expected ';' at 12 line.
warning: expected ';' at 16 line.

Error production

ОписаниС

Error production - ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² восстановлСния послС ошибок Ρ‚ΠΈΠΏΠ° Ad Hoc. Основная идСя ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Error production Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ синтаксичСскиС ошибки становятся Ρ‡Π°ΡΡ‚ΡŒΡŽ Π³Ρ€Π°ΠΌΠΌΠ°Ρ‚ΠΈΠΊΠΈ. ΠŸΡ€ΠΈ этом синтаксис самого языка Π½Π΅ мСняСтся. ИзмСнСния Π² Π³Ρ€Π°ΠΌΠΌΠ°Ρ‚ΠΈΠΊΡƒ вносятся для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Ρ†Π΅ΠΏΠΎΡ‡ΠΊΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ Π»Π΅ΠΆΠ°Ρ‚ Π² языкС, ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΠΈ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠΈΡ‚ΡŒ парсинг.

ΠŸΡ€Π΅ΠΈΠΌΡƒΡ‰Π΅ΡΡ‚Π²Π°
  • Π Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ парсСра ΠΏΠΎΠ½ΠΈΠΌΠ°Π΅Ρ‚, ΠΊΠ°ΠΊΠΈΠ΅ синтаксичСскиС ошибки Π²ΡΡ‚Ρ€Π΅Ρ‡Π°ΡŽΡ‚ΡΡ Ρ‡Π°Ρ‰Π΅ всСго (ex. послС statement ΠΏΡ€ΠΎΠΏΡƒΡ‰Π΅Π½ semicolon) ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΠΈΠΌΠ΅Π½Π½ΠΎ ΠΈΡ….
  • ΠœΠ΅Ρ‚ΠΎΠ΄ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π² совокупности с Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌΠΈ восстановлСния. Π­Ρ‚ΠΎ ΡƒΠ΄ΠΎΠ±Π½ΠΎ, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Error production Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ всС ошибки, Π° Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚Π΅, ΠΎ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΏΠΎΠ΄ΡƒΠΌΠ°Π»ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ парсСра, Ρ‚Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅ часто ΠΎΠ½ Π±Ρ‹Π²Π°Π΅Ρ‚ ΡƒΠ΄ΠΎΠ±Π½Π΅Π΅ Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ².
  • Π₯ΠΎΡ€ΠΎΡˆΠΎ Ρ‡ΠΈΡ‚Π°Π΅ΠΌΡ‹Π΅ сообщСния ΠΎΠ± ΠΎΡˆΠΈΠ±ΠΊΠ°Ρ….
НСдостатки
  • ΠŸΡ€ΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ Π³Ρ€Π°ΠΌΠΌΠ°Ρ‚ΠΈΠΊΠΈ языка, мСняСтся ΠΈ Π³Ρ€Π°ΠΌΠΌΠ°Ρ‚ΠΈΠΊΠ°, которая позволяСт Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒ ошибки. ВяТСло ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒ Π² ΠΊΡ€ΡƒΠΏΠ½Ρ‹Ρ… ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°Ρ….
  • НСвозмоТно ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ всС ошибки, Π° Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚Π΅, ΠΎ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΏΠΎΠ΄ΡƒΠΌΠ°Π» Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ парсСра.
ΠŸΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ

Основная ΡΡƒΡ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Error production Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ добавляСм Π²Ρ‹Π²ΠΎΠ΄Ρ‹ Π² Π³Ρ€Π°ΠΌΠΌΠ°Ρ‚ΠΈΠΊΡƒ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ Π½Π°ΠΌ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ ошибки. Π”ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ Π²Ρ‹Π²ΠΎΠ΄ΠΎΠ² Π² Π³Ρ€Π°ΠΌΠΌΠ°Ρ‚ΠΈΠΊΡƒ Π½Π΅ Π²Π»ΠΈΡΡŽΡ‚ Π½Π° ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ парсСра.

РСализация стратСгии Π½Π° языкС Python

Error-production

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ использования ΠΌΠ΅Ρ‚ΠΎΠ΄Π°

Бинтаксис условного ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° Π² языкС C++ выглядит ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

if (expr) {
    statement;
}

Одна ΠΈΠ· частых синтаксичСских ошибок - отсутствиС скобок Π²ΠΎΠΊΡ€ΡƒΠ³ boolean-expression. Π”Π°Π²Π°ΠΉΡ‚Π΅ Π΄ΠΎΠ±Π°Π²ΠΈΠΌ Ρ‚Π°ΠΊΡƒΡŽ ΠΎΡˆΠΈΠ±ΠΊΡƒ Π² Π³Ρ€Π°ΠΌΠΌΠ°Ρ‚ΠΈΠΊΡƒ языка:

S -> IF ROPAR boolean-expr RCPAR FOPAR statement FCPAR
S -> IF boolean-expr FOPAR statement FCPAR
IF -> if
ROPAR -> (
RCPAR -> )
FOPAR -> {
FCPAR -> }

Π’ случаС Ссли Π²Ρ‹ Π²Ρ‹Π²Π΅Π»ΠΈ Ρ†Π΅ΠΏΠΎΡ‡ΠΊΡƒ языка ΠΏΠΎ ΠΏΡ€Π°Π²ΠΈΠ»Ρƒ S -> IF boolean-expr FOPAR statement FCPAR ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΡΠΎΠΎΠ±Ρ‰ΠΈΡ‚ΡŒ ΠΎΠ± ошибкС, ΠΏΡ€ΠΈ этом парсинг продолТится.

Global correction

ОписаниС

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

ΠŸΡ€Π΅ΠΈΠΌΡƒΡ‰Π΅ΡΡ‚Π²Π°
  • Π˜ΡΠΏΡ€Π°Π²Π»ΡΠ΅Ρ‚ ошибки, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ исправляСт Phrase mode.

  • ΠžΡ‚Π»ΠΈΡ‡Π½ΠΎ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ для статичСских Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ΠΎΠ² ΠΊΠΎΠ΄Π°.

НСдостатки
  • ΠžΡ‡Π΅Π½ΡŒ ΠΌΠ΅Π΄Π»Π΅Π½Π½Ρ‹ΠΉ

  • ΠœΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΊΠ°ΠΆΠ°Ρ‚ΡŒ смысл Π²Π²ΠΎΠ΄Π°: ΠΈΡΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΡƒΡŽ строку Π½Π° ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΡƒΡŽ, Π½ΠΎ Π½Π΅ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΡƒΡŽ ΠΏΠΎ смыслу Ρ‚ΠΎΠΉ, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ пытался ввСсти ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ.

ΠŸΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ

Как Π±Ρ‹Π»ΠΎ сказано Ρ€Π°Π½Π΅Π΅, ΠΌΠ΅Π΄Π»Π΅Π½Π½Π΅Π΅ всСх стратСгий, упомянутых Π² Π΄Π°Π½Π½ΠΎΠΌ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅.

РСализация

Π’ ΠΏΠ°ΠΏΠΊΠ΅ global correction Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π° Π½Π° ΠΈΠ³Ρ€ΡƒΡˆΠ΅Ρ‡Π½ΠΎΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ парсСра ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹Ρ… скобочных ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚Π΅ΠΉ. Π’ ПБП ошибки ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Π΄Π²ΡƒΡ… Ρ‚ΠΈΠΏΠΎΠ²:

  1. Π£ ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°ΡŽΡ‰Π΅ΠΉ скобки Π½Π΅Ρ‚ Π·Π°ΠΊΡ€Ρ‹Π²Π°ΡŽΡ‰Π΅ΠΉ

  2. Π£ Π·Π°ΠΊΡ€Ρ‹Π²Π°ΡŽΡ‰Π΅ΠΉ скобки Π½Π΅Ρ‚ ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°ΡŽΡ‰Π΅ΠΉ

Π’ случаС ΠΏΠ΅Ρ€Π²ΠΎΠΉ ошибки парсСр добавляСт Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΠ΅ количСство Π·Π°ΠΊΡ€Ρ‹Π²Π°ΡŽΡ‰ΠΈΡ… скобок Π² ΠΊΠΎΠ½Ρ†Π΅ строки.

Π’ΠΎ случаС Π²Ρ‚ΠΎΡ€ΠΎΠΉ ошибки парсСр Π½Π΅ добавляСт Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚ΠΈΡ€ΡƒΡŽΡ‰ΡƒΡŽ строку всС Π·Π°ΠΊΡ€Ρ‹Π²Π°ΡŽΡ‰ΠΈΠ΅ скобки, Ρƒ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π½Π΅Ρ‚ ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°ΡŽΡ‰ΠΈΡ….

По ΡΡ€Π°Π²Π½Π΅Π½ΠΈΡŽ с panic mode ΠΈ error production. Как Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ исправлСниС Ρ‚Π°ΠΊΠΈΡ… ошибок с phrase mode ΠΌΠΎΠΆΠ½ΠΎ, Π½ΠΎ, каТСтся, Π±ΠΎΠ»Π΅Π΅ Ρ‚Ρ€ΡƒΠ΄ΠΎΡ‘ΠΌΠΊΠΎ. Из минусов ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹Π΄Π΅Π»ΠΈΡ‚ΡŒ Ρ‚ΠΎΡ‚ Ρ„Π°ΠΊΡ‚, Ρ‡Ρ‚ΠΎ строка ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π΅ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚ΠΎΠΉ, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΏΠΎΠ΄Ρ€Π°Π·ΡƒΠΌΠ΅Π²Π°Π» ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ

Π‘Ρ€Π°Π²Π½Π΅Π½ΠΈΠ΅ стратСгий ΠΈ Π·Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅

ΠžΡ‡Π΅Π²ΠΈΠ΄Π½ΠΎ, Ρ‡Ρ‚ΠΎ каТдая ΠΈΠ· стратСгий ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»ΡŒΠ½Π° Π² ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹Ρ… случаях, ΠΈ ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ Π½Π΅Ρ‚. Π’Π°ΠΊ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π»Π΅Π³ΠΊΠΎ Π·Π°ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ panic-mode Π² поисках ΡΠΈΠ½Ρ…Ρ€ΠΎΠ½ΠΈΠ·ΠΈΡ€ΡƒΡŽΡ‰Π΅Π³ΠΎ Ρ‚ΠΎΠΊΠ΅Π½Π° ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΎΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ошибки Π² ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ с Π³Ρ€Π°ΠΌΠΌΠ°Ρ‚ΠΈΠΊΠΎΠΉ if-then, Π° global correction вовсС ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΊΠ°Π·ΠΈΡ‚ΡŒ смысл Π²Π²Π΅Π΄Ρ‘Π½Π½ΠΎΠΉ строки.

ΠžΡ‚Π»ΠΈΡ‡Π°ΡŽΡ‚ΡΡ ΠΎΠ½ΠΈ ΠΈ ΠΏΠΎ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ: global correction являСтся Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ Π²Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ слоТной ΠΈΠ· всСх пСрСчислСнных, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΏΡ€ΠΈ исправлСнии ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΉ ошибки Π±Π΅Ρ€Ρ‘Ρ‚ Π²ΠΎ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ вСсь Π²Π²ΠΎΠ΄.

НСмаловаТно, Ρ‡Ρ‚ΠΎ отличия ΠΈΠΌΠ΅ΡŽΡ‚ мСсто Π±Ρ‹Ρ‚ΡŒ ΠΈ слоТности Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ: panic mode Ρ‚Ρ€Π°Π΄ΠΈΡ†ΠΈΠΎΠ½Π½ΠΎ считаСтся самой простой, phrase mode ΠΈ error production Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ большСй Ρ€Π°Π±ΠΎΡ‚Ρ‹ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ° Π·Π° счёт ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠΉ ошибки.

Π’ Ρ…ΠΎΠ΄Π΅ выполнСния

Π ΠΎΠΌΠ°Π½ Гостило
  • Ознакомился с классификациСй ошибок

  • Ознакомился с 4 основными стратСгиями восстановлСния послС ошибок, 2 ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… (global correction ΠΈ panic mode) Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π» Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ парсСра ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹Ρ… скобочных ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚Π΅ΠΉ Π½Π° языкС Python

  • ΠŸΠΎΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠΎΠ²Π°Π»ΡΡ Π² Ρ€Π°Π±ΠΎΡ‚Π΅ с git, ΠΊΠΎΠ³Π΄Π° ΠΌΠ΅Ρ€Π΄ΠΆΠΈΠ» Π²Π΅Ρ‚ΠΊΡƒ, ΡΠΊΠ»ΠΎΠ½ΠΈΡ€ΠΎΠ²Π°Π½Π½ΡƒΡŽ с Π²Π΅Ρ‚ΠΊΠΈ, склонированной с main

  • Написал тСсты, свою Ρ‡Π°ΡΡ‚ΡŒ ΠΎΡ‚Ρ‡Ρ‘Ρ‚Π°

  • ΠŸΡ€ΠΎΡˆΡ‘Π» ΠΏΡƒΡ‚ΡŒ ΠΎΡ‚ "я Π½Π΅ понимаю Ρ‡Ρ‚ΠΎ ΠΎΡ‚ мСня хотят" Π΄ΠΎ выполнСния поставлСнной Π·Π°Π΄Π°Ρ‡ΠΈ

  • ΠŸΡ€ΠΎΡ‡ΠΈΡ‚Π°Π» 10-15 статСй ΠΈ ΠΊΠ½ΠΈΠΆΠ½Ρ‹Ρ… Π³Π»Π°Π² Π½Π° Ρ‚Π΅ΠΌΡƒ ΠΈ Π΄ΠΎ сих ΠΏΠΎΡ€ Π½Π΅ ΡƒΠ²Π΅Ρ€Π΅Π½, Ρ‡Ρ‚ΠΎ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ всё понял

  • ΠŸΠΎΠ»ΡƒΡ‡ΠΈΠ» ΡƒΠ΄ΠΎΠ²ΠΎΠ»ΡŒΡΡ‚Π²ΠΈΠ΅

АлСксандр Π’ΠΈΠ½ΠΎΠ³Ρ€Π°Π΄ΠΎΠ²
  • Π˜Π·ΡƒΡ‡ΠΈΠ» всС Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ восстановлСния послС ошибок
  • Π˜Π·ΡƒΡ‡ΠΈΠ» Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΡƒΠΆΠ΅ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ восстановлСния Π² ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Π°Ρ… парсСров
  • Π Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π» ΡΡ‚Ρ€Π°Ρ‚Π΅Π³ΠΈΡŽ error production Π½Π° языкС Python
  • Написал Π³Ρ€Π°ΠΌΠΌΠ°Ρ‚ΠΈΠΊΡƒ языка ΡƒΠΏΡ€ΠΎΡ‰Π΅Π½Π½Ρ‹Ρ… условных Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ
  • Написал тСсты для парсСра
АлСксСй КосСнко

ВстрСтился со всСми Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹ΠΌΠΈ ошибками Π² ply, ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Π» Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡŽ вдоль ΠΈ ΠΏΠΎΠΏΠ΅Ρ€Π΅ΠΊ. НСсколько Ρ€Π°Π· сломал парсСр (воспроизвСл бСсконСчный Ρ†ΠΈΠΊΠ»). ΠŸΡ€ΠΎΡ‡ΠΈΡ‚Π°Π» нСсколько дСсятков статСй ΠΏΡ€ΠΎ ΡΡ‚Ρ€Π°Ρ‚Π΅Π³ΠΈΡŽ восстановлСний.

Π’ ΠΈΡ‚ΠΎΠ³Π΅ АлСксСй КосСнко:

  • Написал ΠΌΠΈΠ½ΠΈ-яп с суммой Ρ†Π΅Π»Ρ‹Ρ… чисСл, использованиСм ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… ΠΈ Π²Ρ‹Π²ΠΎΠ΄ΠΎΠΌ ΠΈΠ· Π² stdin.
  • Π Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π» для Π½ΠΈΡ… ΡΡ‚Ρ€Π°Ρ‚Π΅Π³ΠΈΡŽ phrase-mode, Π³Π΄Π΅ локально исправлял ошибки Π² арифмСтичСских выраТСниях (ΠΏΡ€ΠΎΠΏΡƒΡ‰Π΅Π½Π½Ρ‹Π΅ +, ΠΏΠ΅Ρ€Π΅ΠΏΡƒΡ‚Π°Π½Π½Ρ‹Π΅ =), добавлял Π·Π°Π±Ρ‹Ρ‚Ρ‹Π΅ ;.
  • Написал сСмь тСстов, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΠΊΡ€Ρ‹Π²Π°ΡŽΡ‚ Ρ€Π°Π·Π½Ρ‹Π΅ куски ΠΊΠΎΠ΄Π°.
  • Написал свою Ρ‡Π°ΡΡ‚ΡŒ Ρ€Π΅ΠΏΠΎΡ€Ρ‚Π°, описал Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ Ρ€Π°Π±ΠΎΡ‚Ρ‹ своСго ΠΊΠΎΠ΄Π°.
  • ΠŸΠΎΡ€Π°Π±ΠΎΡ‚Π°Π» ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎ, обсуТдал Π΄Ρ€ΡƒΠ³ΠΈΠ΅ стратСгии ΠΈ сравнивал ΠΈΡ….

By Alexander Vinogradov, Alexey Kosenko and Roman Gostilo.

@ group project of formal languages, 2022

About

πŸŽ“ Investigation of various error recovery strategies during parsing. Their implementation in their own various parsers, demonstration of work on a variety of tests.

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published