Pegjs: [Подвиг. Π’Ρ€Π΅Π±.] ΠžΡ‚ΠΌΠ΅Π½Π° процСсса синтаксичСского Π°Π½Π°Π»ΠΈΠ·Π°

Π‘ΠΎΠ·Π΄Π°Π½Π½Ρ‹ΠΉ Π½Π° 17 мая 2018  Β·  13ΠšΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ  Β·  Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ: pegjs/pegjs

Π’ΠΈΠΏ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹

  • ΠžΡ‚Ρ‡Π΅Ρ‚ ΠΎΠ± ошибкС: НСт
  • Запрос Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ: Π”Π°
  • Вопрос: Π΄Π°
  • НС ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°: Π½Π΅Ρ‚

ΠŸΡ€Π΅Π΄ΠΏΠΎΡΡ‹Π»ΠΊΠΈ

  • ΠœΠΎΠΆΠ΅Ρ‚Π΅ Π»ΠΈ Π²Ρ‹ воспроизвСсти ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ ?: Π”Π°
  • Π’Ρ‹ искали ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ Π² Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΈ ?: Π”Π°
  • Π€ΠΎΡ€ΡƒΠΌΡ‹ провСряли? КакиС Ρ„ΠΎΡ€ΡƒΠΌΡ‹?
  • Π’Ρ‹ выполняли поиск Π² Π˜Π½Ρ‚Π΅Ρ€Π½Π΅Ρ‚Π΅ (google, yahoo ΠΈ Ρ‚. Π”.) ?: Ага!

ОписаниС

Π‘Ρ‹Π»ΠΎ Π±Ρ‹ Π·Π΄ΠΎΡ€ΠΎΠ²ΠΎ ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ Π²ΡΠΏΡΡ‚ΡŒ процСсс синтаксичСского Π°Π½Π°Π»ΠΈΠ·Π°.

ОТидаСмоС повСдСниС:

Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎ Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±Ρ‹Π» ΠΏΡ€ΠΎΠ°Π½Π°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½.

ЀактичСскоС ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅:

Π― ΠΌΠΎΠ³Ρƒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΡ€ΠΎΠ°Π½Π°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚, Π½ΠΎ Π½Π΅ Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎ Π² ΠΏΡ€ΠΎΠ°Π½Π°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚.

discussion feature task

Π‘Π°ΠΌΡ‹ΠΉ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ΠΉ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ

ΠŸΡ€ΠΈΠ²Π΅Ρ‚. Π― Π½Π΅ понимаю Ρ†Π΅Π»ΡŒ ΠΈ контСкст (ΠΏΠΎΡ‡Π΅ΠΌΡƒ) вашСго запроса. Π‘Π΅Ρ‚ΠΎΠ½Π½Ρ‹ΠΉ ΠΎΠ±Ρ€Π°Π·Π΅Ρ† ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠΌΠΎΡ‡ΡŒ.

БинтаксичСский Π°Π½Π°Π»ΠΈΠ· распознаСт строку ΠΊΠ°ΠΊ Ρ‡Π°ΡΡ‚ΡŒ языка ΠΈ, ΠΏΡ€ΠΈ нСобходимости, создаСт AST ΠΈΠ»ΠΈ ΠΎΡ†Π΅Π½ΠΈΠ²Π°Π΅Ρ‚ (ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚) Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π² Ρ„ΠΎΡ€ΠΌΠ΅: parse(text) --> result
Π­Ρ‚Π° функция _parse () _, ΠΊΠ°ΠΊ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π±ΠΈΠ΅ΠΊΡ‚ΠΈΠ²Π½ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ. Π‘Π»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, Π½Π΅Ρ‚ Π½ΠΈΠΊΠ°ΠΊΠΎΠΉ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΠΈ, Ρ‡Ρ‚ΠΎ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΎΡ‚ΠΌΠ΅Π½ΠΈΡ‚ΡŒ синтаксичСский Π°Π½Π°Π»ΠΈΠ·, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΎΡ‚Π±Ρ€ΠΎΡΠΈΡ‚ΡŒ Π΄Π΅Ρ‚Π°Π»ΠΈ Π²ΠΎ врСмя синтаксичСского Π°Π½Π°Π»ΠΈΠ·Π°, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€.

ИмСя AST, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Ρ‹Π²Π°Ρ‚ΡŒ выраТСния Π² тСкст, ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ языку. Π­Ρ‚ΠΎ дСлаСтся ΠΊΠ°ΠΊ Ρ‡Π°ΡΡ‚ΡŒ Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ ΠΊΠΎΠ΄Π°, ΠΈ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΡ‹ шаблонов для прСобразования AST Π² исходный ΠΊΠΎΠ΄. Но эта Π·Π°Π΄Π°Ρ‡Π° Π²Ρ‹Ρ…ΠΎΠ΄ΠΈΡ‚ Π·Π° Ρ€Π°ΠΌΠΊΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ синтаксичСского Π°Π½Π°Π»ΠΈΠ·Π°.

ВсС 13 ΠšΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ

ΠŸΡ€ΠΈΠ²Π΅Ρ‚. Π― Π½Π΅ понимаю Ρ†Π΅Π»ΡŒ ΠΈ контСкст (ΠΏΠΎΡ‡Π΅ΠΌΡƒ) вашСго запроса. Π‘Π΅Ρ‚ΠΎΠ½Π½Ρ‹ΠΉ ΠΎΠ±Ρ€Π°Π·Π΅Ρ† ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠΌΠΎΡ‡ΡŒ.

БинтаксичСский Π°Π½Π°Π»ΠΈΠ· распознаСт строку ΠΊΠ°ΠΊ Ρ‡Π°ΡΡ‚ΡŒ языка ΠΈ, ΠΏΡ€ΠΈ нСобходимости, создаСт AST ΠΈΠ»ΠΈ ΠΎΡ†Π΅Π½ΠΈΠ²Π°Π΅Ρ‚ (ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚) Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π² Ρ„ΠΎΡ€ΠΌΠ΅: parse(text) --> result
Π­Ρ‚Π° функция _parse () _, ΠΊΠ°ΠΊ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π±ΠΈΠ΅ΠΊΡ‚ΠΈΠ²Π½ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ. Π‘Π»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, Π½Π΅Ρ‚ Π½ΠΈΠΊΠ°ΠΊΠΎΠΉ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΠΈ, Ρ‡Ρ‚ΠΎ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΎΡ‚ΠΌΠ΅Π½ΠΈΡ‚ΡŒ синтаксичСский Π°Π½Π°Π»ΠΈΠ·, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΎΡ‚Π±Ρ€ΠΎΡΠΈΡ‚ΡŒ Π΄Π΅Ρ‚Π°Π»ΠΈ Π²ΠΎ врСмя синтаксичСского Π°Π½Π°Π»ΠΈΠ·Π°, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€.

ИмСя AST, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Ρ‹Π²Π°Ρ‚ΡŒ выраТСния Π² тСкст, ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ языку. Π­Ρ‚ΠΎ дСлаСтся ΠΊΠ°ΠΊ Ρ‡Π°ΡΡ‚ΡŒ Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ ΠΊΠΎΠ΄Π°, ΠΈ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΡ‹ шаблонов для прСобразования AST Π² исходный ΠΊΠΎΠ΄. Но эта Π·Π°Π΄Π°Ρ‡Π° Π²Ρ‹Ρ…ΠΎΠ΄ΠΈΡ‚ Π·Π° Ρ€Π°ΠΌΠΊΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ синтаксичСского Π°Π½Π°Π»ΠΈΠ·Π°.

Π₯отя Π»ΠΈΡ‡Π½ΠΎ я понимаю ΠΆΠ΅Π»Π°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ΅ обСспСчСниС ΠΌΠΎΠ³Π»ΠΎ Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π°Π½Π°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ, ΠΊΠ°ΠΊ Ρ€Π΅Π·ΡŽΠΌΠΈΡ€ΠΎΠ²Π°Π» @pjmolina , это Π²Ρ‹Ρ…ΠΎΠ΄ΠΈΡ‚ Π·Π° Ρ€Π°ΠΌΠΊΠΈ этой Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ (Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Π° синтаксичСского Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€Π°), поэтому я Π·Π°ΠΊΡ€ΠΎΡŽ это.

Π― ΠΏΡ€Π΅Π΄Π»Π°Π³Π°ΡŽ Π²Π°ΠΌ просто ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ свой собствСнный Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€ ΠΊΠΎΠ΄Π°, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ для языка, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²Ρ‹ Π°Π½Π°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅Ρ‚Π΅ (Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΡƒΠ±Π΅Π΄ΠΈΡ‚ΡŒΡΡ, Ρ‡Ρ‚ΠΎ AST ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹ΠΉ).

Π­Ρ‚ΠΎΡ‚ Π±ΠΈΠ»Π΅Ρ‚ ΠΈΠΌΠ΅Π΅Ρ‚ большой смысл. ΠšΠ°ΠΊΡƒΡŽ Π΅Ρ‰Π΅ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ Π²Ρ‹ ΠΎΠΆΠΈΠ΄Π°Π΅Ρ‚Π΅ для прСобразования AST Π² исходный ΠΊΠΎΠ΄ с ΡƒΡ‡Π΅Ρ‚ΠΎΠΌ Π³Ρ€Π°ΠΌΠΌΠ°Ρ‚ΠΈΠΊΠΈ синтаксиса PEG.js? Π”Π°, Π² настоящСС врСмя это Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ. Π‘ΠΎΠ»ΡŒΡˆΠ°Ρ Ρ‡Π°ΡΡ‚ΡŒ AST создаСтся Π² дСйствиях, ΠΈ ΠΎΡ‚ΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΈΡ… Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ. Но ΠΊΠΎΠ³Π΄Π° Π΅ΡΡ‚ΡŒ синтаксис для Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ AST, ΠΎ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΌΡ‹ Π³ΠΎΠ²ΠΎΡ€ΠΈΠ»ΠΈ Π² Π΄Ρ€ΡƒΠ³ΠΎΠΌ выпускС, ΠΎΠ½ Π²Π½Π΅Π·Π°ΠΏΠ½ΠΎ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ±Ρ€Π΅Ρ‚Π°Π΅Ρ‚ смысл, Π½ΠΎ ΠΈ становится Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹ΠΌ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ.

StringTemplate , Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, являСтся ΠΎΠ΄Π½ΠΈΠΌ ΠΈΠ· ΠΌΠ½ΠΎΠ³ΠΈΡ… инструмСнтов, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для Ρ‚Π°ΠΊΠΎΠΉ Π·Π°Π΄Π°Ρ‡ΠΈ: гСнСрация ΠΊΠΎΠ΄Π° ΠΈΠ· AST.

Π― Π½Π΅ Π΄ΡƒΠΌΠ°ΡŽ, Ρ‡Ρ‚ΠΎ StringTemplate Ρ‡ΠΈΡ‚Π°Π΅Ρ‚ Π³Ρ€Π°ΠΌΠΌΠ°Ρ‚ΠΈΠΊΡƒ Π² синтаксисС PEG.js.

ΠšΠΎΠ½Ρ‚Π΅ΠΊΡΡ‚:

Для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒΡΡ ΠΊ исходному тСксту Π² AST (А Π’Π’ΠžΠ Π•Π€Π•Π ΠΠ’ S yntax Π’ Π Π—Π­) Π±ΡƒΠ΄Π΅Ρ‚ нСдостаточно. НапримСр, учитывая Π³Ρ€Π°ΠΌΠΌΠ°Ρ‚ΠΈΠΊΡƒ JavaScript, эти Π΄Π²Π° утвСрТдСния
ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΈΠΌΠ΅ΡŽΡ‚ ΠΎΠ΄ΠΈΠ½ ΠΈ Ρ‚ΠΎΡ‚ ΠΆΠ΅ AST, хотя ΠΈΡ… синтаксис Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ отличаСтся,

// statement 1
var x = 5

// statement 2 - with semicolon
var x = 5;

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΈΠΌΠ΅Ρ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒΡΡ ΠΊ исходному тСксту, дСйствия парсСра Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ ΠΈΠ½ΡŠΠ΅ΠΊΡ‚ΠΈΠ²Π½ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ .

ΠŸΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΡ:

Π― Π»ΠΈΡ‡Π½ΠΎ Π½Π΅ понимаю, ΠΊΠ°ΠΊ такая функция ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Ρ‡Π°ΡΡ‚ΡŒΡŽ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ синтаксичСского Π°Π½Π°Π»ΠΈΠ·Π°.
ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ основан Π½Π° дСйствиях встроСнных ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ для создания Π²Ρ‹Ρ…ΠΎΠ΄Π½ΠΎΠΉ структуры.

ΠœΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ, Π² Π±ΡƒΠ΄ΡƒΡ‰Π΅ΠΌ, Ссли Ρƒ pegjs Π±ΡƒΠ΄Π΅Ρ‚ ΠΊΠ°ΠΊΠΎΠ΅-Ρ‚ΠΎ автоматичСскоС созданиС Π΄Π΅Ρ€Π΅Π²Π° синтаксичСского Π°Π½Π°Π»ΠΈΠ·Π°
это Π±Ρ‹Π»ΠΎ Π±Ρ‹ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ.

ΠŸΠΎΡΡ‚Ρ€ΠΎΠΉ свой собствСнный

ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Ρ, Ρ‡Ρ‚ΠΎ Π²Π½ΡƒΡ‚Ρ€ΠΈ встроСнных дСйствий pegjs доступна полная информация ΠΎ ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ
Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π²ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ свои собствСнныС встроСнныС дСйствия для создания CST / ParseTree
ΠΈ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π³ΠΎ Π² AST Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π° этапС пост-синтаксичСского Π°Π½Π°Π»ΠΈΠ·Π°.
Если Ρƒ вас Π΅ΡΡ‚ΡŒ CST, воссозданиС исходного Π²Π²ΠΎΠ΄Π° довольно Ρ‚Ρ€ΠΈΠ²ΠΈΠ°Π»ΡŒΠ½ΠΎ ...

ΠžΡ†Π΅Π½ΠΈΡ‚Π΅ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ синтаксичСского Π°Π½Π°Π»ΠΈΠ·Π° с автоматичСским созданиСм CST / Π΄Π΅Ρ€Π΅Π²Π° синтаксичСского Π°Π½Π°Π»ΠΈΠ·Π°

Π—Π΄Π΅ΡΡŒ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π½Π°ΠΉΡ‚ΠΈ нСсколько ΠΊΠ°Π½Π΄ΠΈΠ΄Π°Ρ‚ΠΎΠ²:
https://tomassetti.me/parsing-in-javascript/

Π― Ρ€Π΅ΡˆΠΈΠ» Π΅Ρ‰Π΅ Ρ€Π°Π· Π²Π·Π³Π»ΡΠ½ΡƒΡ‚ΡŒ Π½Π° это, Π½ΠΎ ΠΎΠ½ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ пост-v1, ΠΏΡ€Π΅ΠΆΠ΄Π΅ Ρ‡Π΅ΠΌ Π΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ это Π±ΡƒΠ΄Π΅Ρ‚ ΠΌΠΎΠΌΠ΅Π½Ρ‚, ΠΊΠΎΠ³Π΄Π° API Π±ΡƒΠ΄Π΅Ρ‚ ΡΡ‚Π°Π±ΠΈΠ»ΡŒΠ½Ρ‹ΠΌ, ΠΈ я ΠΌΠΎΠ³Ρƒ Π²Ρ‹ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ΠΏΠ°ΠΊΠ΅Ρ‚, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΡ€Π΅Π΄Π»Π°Π³Π°Π΅Ρ‚ Π±Π°Π·ΠΎΠ²ΡƒΡŽ ΠΎΠ±Ρ‰ΡƒΡŽ структуру AST ( Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, @pegjs/ast ?). Π­Ρ‚ΠΎΡ‚ ΠΏΠ°ΠΊΠ΅Ρ‚ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°ΠΌΠΈ парсСров для получСния собствСнного AST, Π° ΠΏΡ€ΠΈ нСобходимости ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ для Π΅Π³ΠΎ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Π° ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎ Π² исходный ΠΊΠΎΠ΄ Π΄Ρ€ΡƒΠ³ΠΈΠΌ инструмСнтом (я Π΄ΡƒΠΌΠ°ΡŽ, @pegjs/reverse )

@futagoza, ΠΊΠ°ΠΊ Π΄Π΅Π»Π°?

@ Coffee2CodeNL pegjs v1 Π΅Ρ‰Π΅ Π½Π΅ Π²Ρ‹ΡˆΠ΅Π».

Π’ΠΎΠ·ΡŒΠΌΠ΅ΠΌ, ΠΊ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρƒ, этот парсСр прСобразования SVG Π² PEGJS: https://github.com/nidu/svg-transform-parser
Π‘Ρ‹Π»ΠΎ Π±Ρ‹ Π·Π°ΠΌΠ΅Ρ‡Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΠΈΠΌΠ΅Ρ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ процСсс ΠΈ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Ρ‚ΡŒ AST ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎ Π² строку,
поэтому прСобразования SVG ΠΌΠΎΠΆΠ½ΠΎ Π»Π΅Π³ΠΊΠΎ ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒ, Π° Π½Π΅ просто Π°Π½Π°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ.
Одним ΠΈΠ· ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹Ρ… инструмСнтов являСтся Augeas .

ΠœΠΎΠΆΠ΅Ρ‚ ΠΊΡ‚ΠΎ-Π½ΠΈΠ±ΡƒΠ΄ΡŒ ΠΏΠΎΡ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΠΎΠ²Π°Ρ‚ΡŒ инструмСнты для Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ ΠΊΠΎΠ΄Π° ΠΈΠ· AST?

@lzane Какой AST?

@ polkovnikov-ph Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ настроСнныС AST, созданныС PEG

Π•ΡΡ‚ΡŒ Π»ΠΈ ΠΊΠ°ΠΊΠΎΠΉ-Π»ΠΈΠ±ΠΎ инструмСнт, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Ρ‡ΠΈΡ‚Π°Π΅Ρ‚ Π³Ρ€Π°ΠΌΠΌΠ°Ρ‚ΠΈΠΊΡƒ PEG, ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρƒ ΠΏΠΎ Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ ΠΊΠΎΠ΄Π°?

Π‘Ρ‹Π»Π° Π»ΠΈ эта страница ΠΏΠΎΠ»Π΅Π·Π½ΠΎΠΉ?
0 / 5 - 0 Ρ€Π΅ΠΉΡ‚ΠΈΠ½Π³ΠΈ