Pegjs: [рдХрд░рддрдмред рдЕрдиреБрд░реЛрдзред] рдкрд╛рд░реНрд╕рд┐рдВрдЧ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдЙрд▓рдЯрдирд╛

рдХреЛ рдирд┐рд░реНрдорд┐рдд 17 рдордИ 2018  ┬╖  13рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: pegjs/pegjs

рд╕рдорд╕реНрдпрд╛ рдХрд╛ рдкреНрд░рдХрд╛рд░

  • рдмрдЧ рд░рд┐рдкреЛрд░реНрдЯ: рдирд╣реАрдВ
  • рдлрд╝реАрдЪрд░ рдЕрдиреБрд░реЛрдз: рд╣рд╛рдБ
  • рдкреНрд░рд╢реНрди: рд╣рд╛рдБ
  • рдХреЛрдИ рдореБрджреНрджрд╛ рдирд╣реАрдВ

рдЖрд╡рд╢реНрдпрдХ рд╢рд░реНрддреЗрдВ

  • рдХреНрдпрд╛ рдЖрдк рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рдкреБрди: рдкреЗрд╢ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ ?: рд╣рд╛рдБ
  • рдХреНрдпрд╛ рдЖрдкрдиреЗ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХреЗ рдореБрджреНрджреЛрдВ рдХреА рдЦреЛрдЬ рдХреА ?: рд╣рд╛рдБ
  • рдХреНрдпрд╛ рдЖрдкрдиреЗ рдлрд╝реЛрд░рдо рдХреА рдЬрд╛рдБрдЪ рдХреА ?: рдХреМрди рд╕реЗ рдлрд╝реЛрд░рдо?
  • рдХреНрдпрд╛ рдЖрдкрдиреЗ рд╡реЗрдм рдЦреЛрдЬ рдХреА рдереА (рдЧреВрдЧрд▓, рдпрд╛рд╣реВ, рдЖрджрд┐) ?: рд╣рд╛рдБ!

рд╡рд┐рд╡рд░рдг

рдкрд╛рд░реНрд╕рд┐рдВрдЧ рдХреА рдкреНрд░рдЧрддрд┐ рдХреЛ рдЙрд▓рдЯрдирд╛ рдХрдорд╛рд▓ рдХрд╛ рд╣реЛрдЧрд╛ред

рдЕрдкреЗрдХреНрд╖рд┐рддреН рд╡реНрдпрд╡рд╣рд╛рд░:

рдХрд┐рд╕реА рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рд╡рд╛рдкрд╕ рдкрд╛рд░реНрд╕ рдХрд┐рдП рдЧрдП рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдмрджрд▓рдирд╛ред

рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╡реНрдпрд╡рд╣рд╛рд░:

рдореИрдВ рдХреЗрд╡рд▓ рдкреНрд░рд╛рд░реВрдк рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ, рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рд╡рд╛рдкрд╕ рдкрд╛рд░реНрд╕ рдХрд┐рдП рдЧрдП рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдирд╣реАрдВ рдмрджрд▓ рд╕рдХрддрд╛ред

discussion feature task

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

рдирдорд╕реНрддреЗред рдореБрдЭреЗ рдЖрдкрдХреЗ рдЕрдиреБрд░реЛрдз рдХрд╛ рд▓рдХреНрд╖реНрдп рдФрд░ рд╕рдВрджрд░реНрдн (рдХреНрдпреЛрдВ) рд╕рдордЭ рдирд╣реАрдВ рдЖ рд░рд╣рд╛ рд╣реИред рдПрдХ рдареЛрд╕ рдирдореВрдирд╛ рдорджрдж рдХрд░ рд╕рдХрддрд╛ рд╣реИред

рдкрд╛рд░реНрд╕рд┐рдВрдЧ рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЛ рдПрдХ рднрд╛рд╖рд╛ рдХреЗ рд╣рд┐рд╕реНрд╕реЗ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╣рдЪрд╛рдирддрд╛ рд╣реИ, рдФрд░ рд╡реИрдХрд▓реНрдкрд┐рдХ рд░реВрдк рд╕реЗ, рдПрдХ рдПрдПрд╕рдЯреА рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░рддрд╛ рд╣реИ рдпрд╛ рдлреЙрд░реНрдо рдореЗрдВ рдПрдХ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХрд╛ рдореВрд▓реНрдпрд╛рдВрдХрди (рд╡реНрдпрд╛рдЦреНрдпрд╛) рдХрд░рддрд╛ рд╣реИ: parse(text) --> result
рдпрд╣ _parse()_ рдлрд╝рдВрдХреНрд╢рди, рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ, рдПрдХ рд╡рд┐рд╢реЗрд╖рдг рдлрд╝рдВрдХреНрд╢рди рд╣реЛрдиреЗ рдХреА рдЧрд╛рд░рдВрдЯреА рдирд╣реАрдВ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдХреЛрдИ рд╡рд╛рд░рдВрдЯреА рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЖрдк рдкрд╛рд░реНрд╕рд┐рдВрдЧ рдХреЛ рдЙрд▓рдЯ рд╕рдХрддреЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рдЖрдк рдкрд╛рд░реНрд╕рд┐рдВрдЧ рдХреЗ рджреМрд░рд╛рди рд╡рд┐рд╡рд░рдг рдЫреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдПред

рдПрдПрд╕рдЯреА рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП рдЖрдк рдХрд┐рд╕реА рднрд╛рд╖рд╛ рдХреЗ рдЕрдиреБрд░реВрдк рдкрд╛рда рдореЗрдВ рднрд╛рд╡ рдЙрддреНрдкрдиреНрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рдХреЛрдб рдЬрдирд░реЗрд╢рди рдХреЗ рд╣рд┐рд╕реНрд╕реЗ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдЖрдк рдПрдПрд╕рдЯреА рдХреЛ рд╕реНрд░реЛрдд рдХреЛрдб рдореЗрдВ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдЯреЗрдореНрдкрд▓реЗрдЯ рдЗрдВрдЬрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рдпрд╣ рдХрд╛рд░реНрдп рдПрдХ рдкрд╛рд░реНрд╕рд┐рдВрдЧ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ рджрд╛рдпрд░реЗ рд╕реЗ рдмрд╛рд╣рд░ рд╣реИред

рд╕рднреА 13 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рдирдорд╕реНрддреЗред рдореБрдЭреЗ рдЖрдкрдХреЗ рдЕрдиреБрд░реЛрдз рдХрд╛ рд▓рдХреНрд╖реНрдп рдФрд░ рд╕рдВрджрд░реНрдн (рдХреНрдпреЛрдВ) рд╕рдордЭ рдирд╣реАрдВ рдЖ рд░рд╣рд╛ рд╣реИред рдПрдХ рдареЛрд╕ рдирдореВрдирд╛ рдорджрдж рдХрд░ рд╕рдХрддрд╛ рд╣реИред

рдкрд╛рд░реНрд╕рд┐рдВрдЧ рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЛ рдПрдХ рднрд╛рд╖рд╛ рдХреЗ рд╣рд┐рд╕реНрд╕реЗ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╣рдЪрд╛рдирддрд╛ рд╣реИ, рдФрд░ рд╡реИрдХрд▓реНрдкрд┐рдХ рд░реВрдк рд╕реЗ, рдПрдХ рдПрдПрд╕рдЯреА рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░рддрд╛ рд╣реИ рдпрд╛ рдлреЙрд░реНрдо рдореЗрдВ рдПрдХ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХрд╛ рдореВрд▓реНрдпрд╛рдВрдХрди (рд╡реНрдпрд╛рдЦреНрдпрд╛) рдХрд░рддрд╛ рд╣реИ: parse(text) --> result
рдпрд╣ _parse()_ рдлрд╝рдВрдХреНрд╢рди, рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ, рдПрдХ рд╡рд┐рд╢реЗрд╖рдг рдлрд╝рдВрдХреНрд╢рди рд╣реЛрдиреЗ рдХреА рдЧрд╛рд░рдВрдЯреА рдирд╣реАрдВ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдХреЛрдИ рд╡рд╛рд░рдВрдЯреА рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЖрдк рдкрд╛рд░реНрд╕рд┐рдВрдЧ рдХреЛ рдЙрд▓рдЯ рд╕рдХрддреЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рдЖрдк рдкрд╛рд░реНрд╕рд┐рдВрдЧ рдХреЗ рджреМрд░рд╛рди рд╡рд┐рд╡рд░рдг рдЫреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдПред

рдПрдПрд╕рдЯреА рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП рдЖрдк рдХрд┐рд╕реА рднрд╛рд╖рд╛ рдХреЗ рдЕрдиреБрд░реВрдк рдкрд╛рда рдореЗрдВ рднрд╛рд╡ рдЙрддреНрдкрдиреНрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рдХреЛрдб рдЬрдирд░реЗрд╢рди рдХреЗ рд╣рд┐рд╕реНрд╕реЗ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдЖрдк рдПрдПрд╕рдЯреА рдХреЛ рд╕реНрд░реЛрдд рдХреЛрдб рдореЗрдВ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдЯреЗрдореНрдкрд▓реЗрдЯ рдЗрдВрдЬрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рдпрд╣ рдХрд╛рд░реНрдп рдПрдХ рдкрд╛рд░реНрд╕рд┐рдВрдЧ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ рджрд╛рдпрд░реЗ рд╕реЗ рдмрд╛рд╣рд░ рд╣реИред

рд╣рд╛рд▓рд╛рдВрдХрд┐ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ, рдореИрдВ рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рдХреЛ рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдиреЗ рдХреА рднрд╛рд╡рдирд╛ рдХреЛ рд╕рдордЭрддрд╛ рд╣реВрдВ рдЬреЛ рдЗрд╕реЗ рдкрд╛рд░реНрд╕ рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдЬреИрд╕рд╛ рдХрд┐ @pjmolina рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ рд╣реИ, рдпрд╣ рдЗрд╕ рдкреБрд╕реНрддрдХрд╛рд▓рдп (рдкрд╛рд░реНрд╕рд░ рдЬрдирд░реЗрдЯрд░) рдХреЗ рджрд╛рдпрд░реЗ рд╕реЗ рдмрд╛рд╣рд░ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореИрдВ рдЗрд╕реЗ рдмрдВрдж рдХрд░ рджреВрдВрдЧрд╛ред

рдореЗрд░рд╛ рд╕реБрдЭрд╛рд╡ рд╣реИ рдХрд┐ рдЖрдк рдЬрд┐рд╕ рднрд╛рд╖рд╛ рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдЙрд╕рдХреЗ рд▓рд┐рдП рдореМрдЬреВрджрд╛ рдПрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдкрд░ рдЖрдк рдЕрдкрдирд╛ рдХреЛрдб рдЬреЗрдирд░реЗрдЯрд░ рдмрдирд╛рдПрдВ (рдЖрдкрдХреЛ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдХрд┐ рдПрдПрд╕рдЯреА рд╕рд╣реА рд╣реИ)ред

рдпрд╣ рдЯрд┐рдХрдЯ рдмрд╣реБрдд рдорд╛рдпрдиреЗ рд░рдЦрддрд╛ рд╣реИред PEG.js рд╕рд┐рдВрдЯреИрдХреНрд╕ рдореЗрдВ рд╡реНрдпрд╛рдХрд░рдг рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП рдЖрдк рдФрд░ рдХреМрди рд╕реА рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдПрдПрд╕рдЯреА рдХреЛ рд╕реЛрд░реНрд╕ рдХреЛрдб рдореЗрдВ рдмрджрд▓рдиреЗ рдХреА рдЙрдореНрдореАрдж рдХрд░реЗрдВрдЧреЗ? рд╣рд╛рдВ, рдлрд┐рд▓рд╣рд╛рд▓ рдРрд╕рд╛ рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реИред рдЕрдзрд┐рдХрд╛рдВрд╢ рдПрдПрд╕рдЯреА рдХрд╛рд░реНрдпреЛрдВ рдореЗрдВ рдЙрддреНрдкрдиреНрди рд╣реЛрддрд╛ рд╣реИ, рдФрд░ рдЙрдиреНрд╣реЗрдВ рд╡рд╛рдкрд╕ рдХрд░рдирд╛ рдЕрд╕рдВрднрд╡ рд╣реИред рд▓реЗрдХрд┐рди рдЬрдм рдПрдПрд╕рдЯреА рдкреАрдврд╝реА рдХреЗ рд▓рд┐рдП рд╕рд┐рдВрдЯреИрдХреНрд╕ рд╣реЛрддрд╛ рд╣реИ рдЬрд┐рд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣рдордиреЗ рдПрдХ рдЕрд▓рдЧ рдореБрджреНрджреЗ рдкрд░ рдмрд╛рдд рдХреА, рддреЛ рдпрд╣ рдЕрдЪрд╛рдирдХ рди рдХреЗрд╡рд▓ рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ, рдмрд▓реНрдХрд┐ рдЗрд╕реЗ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИред

StringTemplate , рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдРрд╕реЗ рдХрдИ рдЯреВрд▓ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИ рдЬрд┐рдирдХрд╛ рдЙрдкрдпреЛрдЧ рдЖрдк рдРрд╕реЗ рдХрд╛рд░реНрдп рдХреЗ рд▓рд┐рдП рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ: ASTs рд╕реЗ рдХреЛрдб-рдЬреЗрдиред

рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ StringTemplate PEG.js рд╕рд┐рдВрдЯреИрдХреНрд╕ рдореЗрдВ рд╡реНрдпрд╛рдХрд░рдг рдкрдврд╝рддрд╛ рд╣реИред

рд╕рдВрджрд░реНрдн:

рдореВрд▓ рдкрд╛рда рдкрд░ рд╡рд╛рдкрд╕ рд▓реМрдЯрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ AST ( A bstract S yntax T ree) рдкрд░реНрдпрд╛рдкреНрдд рдирд╣реАрдВ рд╣реЛрдЧрд╛ред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдПрдХ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╡реНрдпрд╛рдХрд░рдг рджрд┐рдпрд╛ рдЧрдпрд╛ рдпреЗ рджреЛ рдХрдерди
рдЖрдо рддреМрд░ рдкрд░ рдПрдХ рд╣реА рдПрдПрд╕рдЯреА рд╣реЛрдЧрд╛, рднрд▓реЗ рд╣реА рдЙрдирдХрд╛ рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рдереЛрдбрд╝рд╛ рдЕрд▓рдЧ рд╣реЛ,

// statement 1
var x = 5

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

рдореВрд▓ рдкрд╛рда рдкрд░ рд╡рд╛рдкрд╕ рд▓реМрдЯрдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдкрд╛рд░реНрд╕рд░ рдХреЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдПрдХ рдЗрдВрдЬреЗрдХреНрд╢рди рдлрд╝рдВрдХреНрд╢рди рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред

рд╕реБрдЭрд╛рд╡:

рдореИрдВ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рдирд╣реАрдВ рджреЗрдЦрддрд╛ рдХрд┐ рдРрд╕реА рд╕реБрд╡рд┐рдзрд╛ рдкрд╛рд░реНрд╕рд┐рдВрдЧ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рдХреИрд╕реЗ рд╣реЛ рд╕рдХрддреА рд╣реИ
рдЬреЛ рдЖрдЙрдЯрдкреБрдЯ рд╕рдВрд░рдЪрдирд╛ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдореНрдмреЗрдбреЗрдб рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреНрд░рд┐рдпрд╛рдУрдВ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИред

рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдЕрдЧрд░ pegjs рдореЗрдВ рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХрд╛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдкрд╛рд░реНрд╕ рдЯреНрд░реА рдирд┐рд░реНрдорд╛рдг рд╣реЛрдЧрд╛
рдпрд╣ рд╕рдВрднрд╡ рд╣реЛрдЧрд╛ред

рдЕрдкрдирд╛ рдЦреБрдж рдХрд╛ рдмрдирд╛рдУ

рдпрд╣ рдорд╛рдирддреЗ рд╣реБрдП рдХрд┐ pegjs рдПрдореНрдмреЗрдбреЗрдб рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЗ рдЕрдВрджрд░ рдкреВрд░реНрдг рд╕реНрдерд┐рддрд┐ рдХреА рдЬрд╛рдирдХрд╛рд░реА рдЙрдкрд▓рдмреНрдз рд╣реИ
рдЖрдк CST / ParseTree рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдкрдиреА рдЦреБрдж рдХреА рдХрд╕реНрдЯрдо рдПрдореНрдмреЗрдбреЗрдб рдХреНрд░рд┐рдпрд╛рдПрдБ рд╕рдореНрдорд┐рд▓рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ
рдФрд░ рдХреЗрд╡рд▓ рдПрдХ рдкреЛрд╕реНрдЯ рдкрд╛рд░реНрд╕рд┐рдВрдЧ рдЪрд░рдг рдореЗрдВ рдЗрд╕реЗ рдПрдПрд╕рдЯреА рдореЗрдВ рдмрджрд▓ рджреЗрдВред
рдПрдХ рдмрд╛рд░ рдЬрдм рдЖрдкрдХреЗ рдкрд╛рд╕ рдореВрд▓ рдЗрдирдкреБрдЯ рдХреЛ рдлрд┐рд░ рд╕реЗ рдмрдирд╛рдиреЗ рд╡рд╛рд▓рд╛ CST рд╣реИ, рддреЛ рдпрд╣ рдХрд╛рдлреА рддреБрдЪреНрдЫ рд╣реИ ...

рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд╕реАрдПрд╕рдЯреА / рдкрд╛рд░реНрд╕ рдЯреНрд░реА рдирд┐рд░реНрдорд╛рдг рдХреЗ рд╕рд╛рде рдПрдХ рдкрд╛рд░реНрд╕рд┐рдВрдЧ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдореВрд▓реНрдпрд╛рдВрдХрди рдХрд░реЗрдВ

рдЖрдк рдпрд╣рд╛рдВ рдХрдИ рдЙрдореНрдореАрджрд╡рд╛рд░ рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВ:
https://tomassetti.me/parsing-in-javascript/

рдореИрдВрдиреЗ рдЗрд╕ рдкрд░ рдПрдХ рдФрд░ рдирдЬрд╝рд░ рдбрд╛рд▓рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕реЗ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдЗрд╕реЗ рдкреЛрд╕реНрдЯ-v1 рд╣реЛрдирд╛ рд╣реЛрдЧрд╛ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╡рд╣ рдмрд┐рдВрджреБ рд╣реЛрдЧрд╛ рдЬрд╣рд╛рдВ рдПрдкреАрдЖрдИ рд╕реНрдерд┐рд░ рд╣реИ рдФрд░ рдореИрдВ рдПрдХ рдкреИрдХреЗрдЬ рдЬрд╛рд░реА рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ рдЬреЛ рдПрдХ рдмреБрдирд┐рдпрд╛рджреА рд╕рд╛рдорд╛рдиреНрдп рдПрдПрд╕рдЯреА рд╕рдВрд░рдЪрдирд╛ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ ( рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП @pegjs/ast ?). рдЗрд╕ рдкреИрдХреЗрдЬ рдХрд╛ рдЙрдкрдпреЛрдЧ рдкрд╛рд░реНрд╕рд░ рдбреЗрд╡рд▓рдкрд░реНрд╕ рджреНрд╡рд╛рд░рд╛ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдПрдПрд╕рдЯреА рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рдпрджрд┐ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ, рддреЛ рдЗрд╕реЗ рдХрд┐рд╕реА рдЕрдиреНрдп рдЯреВрд▓ рджреНрд╡рд╛рд░рд╛ рд╕реНрд░реЛрдд рдкрд░ рд╡рд╛рдкрд╕ рдЕрдиреБрд╡рд╛рдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ (рдореИрдВ @pegjs/reverse рд╕реЛрдЪ рд░рд╣рд╛ рд╣реВрдВ)

@futagoza рдЗрд╕рдХреЗ рд╕рд╛рде рдХреИрд╕рд╛ рдЪрд▓ рд░рд╣рд╛ рд╣реИ?

@Coffee2CodeNL pegjs v1 рдЕрднреА рдмрд╛рд╣рд░ рдирд╣реАрдВ рд╣реБрдЖ рд╣реИред

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдкреАрдИрдЬреАрдЬреЗрдПрд╕ рдореЗрдВ рдЗрд╕ рдПрд╕рд╡реАрдЬреА рдЯреНрд░рд╛рдВрд╕рдлреЙрд░реНрдо рдкрд╛рд░реНрд╕рд░ рдХреЛ рд▓реЗрдВ: https://github.com/nidu/svg-transform-parser
рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдЙрд▓рдЯрдиреЗ рдФрд░ рдПрдПрд╕рдЯреА рдХреЛ рд╡рд╛рдкрд╕ рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдореЗрдВ рдмрджрд▓рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рд╢рд╛рдирджрд╛рд░ рд╣реЛрдЧрд╛,
рдЗрд╕рд▓рд┐рдП рдПрд╕рд╡реАрдЬреА рд░реВрдкрд╛рдВрддрд░рдгреЛрдВ рдХреЛ рдЖрд╕рд╛рдиреА рд╕реЗ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рди рдХрд┐ рдХреЗрд╡рд▓ рдкрд╛рд░реНрд╕ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдРрд╕рд╛ рд╣реА рдПрдХ рдЙрдкрдХрд░рдг рдЬреЛ рд╕рдорд╛рди рд╣реИ рд╡рд╣ рд╣реИ

рдХреНрдпрд╛ рдХреЛрдИ рдПрдПрд╕рдЯреА рд╕реЗ рдХреЛрдб рдЬреЗрдирд░реЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдЯреВрд▓реНрд╕ рдХреА рд╕рд┐рдлрд╛рд░рд┐рд╢ рдХрд░ рд╕рдХрддрд╛ рд╣реИ?

@lzane рдХреМрди рд╕рд╛ рдПрдПрд╕рдЯреА?

@ polkovnikov-ph рдкреАрдИрдЬреА рджреНрд╡рд╛рд░рд╛ рдЙрддреНрдкрдиреНрди рдХреБрдЫ рдЕрдиреБрдХреВрд▓рд┐рдд рдПрдПрд╕рдЯреА

рдХреНрдпрд╛ рдХреЛрдИ рдЙрдкрдХрд░рдг рд╣реИ рдЬреЛ рдкреАрдИрдЬреА рд╡реНрдпрд╛рдХрд░рдг рдкрдврд╝рддрд╛ рд╣реИ рдЬреЛ рдХреЛрдб рдЬрдирд░реЗрд╢рди рдХрд╛рд░реНрдп рдХрд░ рд╕рдХрддрд╛ рд╣реИ?

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

vldmr1986 picture vldmr1986  ┬╖  12рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

alanmimms picture alanmimms  ┬╖  10рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

gatsbyz picture gatsbyz  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

dmajda picture dmajda  ┬╖  7рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

richb-hanover picture richb-hanover  ┬╖  7рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ