Pegjs: рд╢рдмреНрджрд╛рд░реНрде рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдЖрд╢реБрд▓рд┐рдкрд┐

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

рд╢рдмреНрджрд╛рд░реНрде рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдЖрд╢реБрд▓рд┐рдкрд┐ рдЬреЛрдбрд╝рдирд╛ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ред

рдХрд╣реЗрдВ, { return value } рд▓рд┐рдЦрдиреЗ рдХреЗ рдмрдЬрд╛рдп, рд╣рдо рд▓рд┐рдЦрддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП { extract } рдЬреЛ рдкреНрд░рд╛рд░рдВрднрдХрд░реНрддрд╛ рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:

{
  function extract(value) {
    return value;
  }
  function concat(head, tail) {
    return head ? [head].concat(tail) : [];
  }
  function toAddExpr(head, tail) {
    return { type: 'addExpr', expressions: concat(head, tail) };
  }
}

List
  = '(' _ head:Item? tail:( _ ',' _ value:Item { extract } )* _ ')' { concat }

// Another kind of list
Add
  = '(' _ head:Multiply? tail:( _ '+' _ value:Multiply { extract } )* _ ')' { toAddExpr }

рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдпрд╣ рд╣рдореЗрдВ рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдкреБрди: рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдмрдирд╛ рджреЗрдЧрд╛ ... рдПрдХ рдЕрдЪреНрдЫреЗ рддрд░реАрдХреЗ рд╕реЗ: рдореБрд╕реНрдХрд╛рди:
рджреВрд╕рд░рд╛, рдпрд╣ рд╣рдорд╛рд░реЗ рд╡реНрдпрд╛рдХрд░рдг рдХреЛ рдереЛрдбрд╝рд╛ рдЕрдзрд┐рдХ рдкрдардиреАрдп рдмрдирд╛ рджреЗрдЧрд╛ред

рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛтАЛтАЛрд╣реИ рдХрд┐ рдпрд╣ рддрдм рднреА рдЕрдзрд┐рдХ рдЙрдкрдпреЛрдЧреА рд╣реЛрдЧрд╛ рдЬрдм рдХреНрд░рд┐рдпрд╛ рдЖрд╢реБрд▓рд┐рдкрд┐ рдореЗрдВ рдирд┐рд╣рд┐рдд рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреЗрд╡рд▓ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ { foo } рдмрдЬрд╛рдп рдПрдХ рд╕рджрд╕реНрдп рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ { foo.bar.baz } { foo } ред рддрд╛рдХрд┐ рд╡реНрдпрд╛рдХрд░рдг рд▓реЗрдЦрдХ рдЕрдкрдиреЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдХрд┐рд╕реА рд╡рд╕реНрддреБ рдпрд╛ рдореЙрдбреНрдпреВрд▓ рдХреЗ рдЕрдВрджрд░ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░ рд╕рдХреЗрдВред

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

рджрд░рдЕрд╕рд▓, рдореИрдВ рд╕реЛрдЪ рд░рд╣рд╛ рдерд╛, рдпреЗ рдмрджрд▓рд╛рд╡ рд╢рд╛рдпрдж рдХрд╛рдо рдХрд░реЗрдВ:

CodeBlock "code block"
  = "=>" _ expession:CallExpression {
       return `return ${ expession };`;
     }
  / "{" <strong i="6">@Code</strong> "}"
  / "{" { error("Unbalanced brace."); }

// Will be based on ECMAScript's CallExpression
CallExpression
  = ...
  / MemberExpression

// Will be based on ECMAScript's MemberExpression
MemberExpression
  = ...
  / ValidIdentifier

// Change `LabelIdentifier` into `ValidIdentifier`

рдЗрд╕ рддрд░рд╣ рд╕реЗ рдЕрднреА рднреА рдХреБрдЫ рд╕рд╛рдорд╛рди рдЬреИрд╕реЗ рдИрд╕реАрдПрдордПрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреА рдкреНрд░рд╛рдердорд┐рдХ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рдпреЛрдВ (рд╕рдВрдЦреНрдпрд╛рдУрдВ, рдмреВрд▓рд┐рдпрди, рд╕рд░рдгреА, рдЖрджрд┐) рдХреЛ рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА, рдЗрд╕рд▓рд┐рдП рдзреНрдпрд╛рди рд╕реЗ рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА рдХрд┐ рдХреНрдпрд╛ рдЬреЛрдбрд╝рдирд╛ рд╣реИред


рд╕рдВрддреБрд▓рди рдХреЛрд╖реНрдардХ рдФрд░ рдмреНрд░реЗрд╕рд┐рдЬрд╝

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


_PEG.js v0.12_ рдХреЗ рд╕рд╛рде, рдореИрдВ OpenPEG рдкрд░ рдХрд╛рдо

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

рджрд┐рд▓рдЪрд╕реНрдк рд╡рд┐рдЪрд╛рд░, рд▓реЗрдХрд┐рди рдореИрдВ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рдирд╣реАрдВ рд╕реЛрдЪрддрд╛ рдХрд┐ рдпрд╣ рдПрдХ рд╕реНрдкрд╖реНрдЯ рддрд░реАрдХрд╛ рд╣реЛрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИ рдХрд┐ рд╕рдорд╛рд░реЛрд╣ рдореЗрдВ рдХреМрди рд╕реЗ рддрд░реНрдХ рдкрд╛рд░рд┐рдд рдХрд┐рдП рдЬрд╛ рд░рд╣реЗ рд╣реИрдВред рд╕рд╛рде рд╣реА, рдпрджрд┐ рдЖрдкрдХреЛ "рдХрд╕реНрдЯрдо" рдкреИрд░рд╛рдореАрдЯрд░ рдкрд╛рд╕ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ - рддреЛ рдЖрдкрдХреЛ рдЙрдиреНрд╣реЗрдВ рдирд┐рдпрдорд┐рдд рдлрд╝рдВрдХреНрд╢рди рдХреЙрд▓ рдХреЗ рд╕рд╛рде рдорд┐рд▓рд╛рдирд╛ рд╣реЛрдЧрд╛, рдЗрд╕рд▓рд┐рдП рдпрд╣ рд╕рд░рд▓ рдорд╛рдорд▓реЛрдВ рдХреА рддрд░рд╣ рд╕рд╛рдл рдирд╣реАрдВ рджрд┐рдЦреЗрдЧрд╛ред

#235 рдореЗрдВ рдХрд┐рд╕реА рдиреЗ рддреАрд░ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд╕рд╛рде рдЬрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ => рдХрд╛ рд╕реБрдЭрд╛рд╡ рджрд┐рдпрд╛, рдЬреЛ рдореБрдЭреЗ рд▓рдЧрд╛ рдХрд┐ рдпрд╣ рдХрд╛рдлреА рд╕рд╛рдл рдФрд░ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рдерд╛ред

  = '(' expr:some_expression ')' => expr
  ;

рдореИрдВ рд╢реЙрд░реНрдЯрд╣реИрдВрдб рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреЗ рд▓рд┐рдП рдирд┐рдореНрди рдореЗрдВ рд╕реЗ рдХрд┐рд╕реА рдПрдХ рдХреЛ рдЪреБрдирдиреЗ рдХреА рдУрд░ рдЭреБрдХ рд░рд╣рд╛ рд╣реВрдВ:

  • => expr; _(рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рдХреА рдЬрд░реВрд░рдд рд╣реИ)_
  • { => expr } _(рдЕрднреА рдкреНрд░рдпреЛрдЧ рдХрд░рдиреЗ рдпреЛрдЧреНрдп рд╣реИ, рд▓реЗрдХрд┐рди рдЦреЛрд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ)_
  • { > expr } _(рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рдХреА рдЬрд░реВрд░рдд рд╣реИ)_

рдЕрднреА рддрдХ рдлреИрд╕рд▓рд╛ рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдЪрд░реНрдЪрд╛ рдХреЗ рд▓рд┐рдП рдЦреБрд▓рд╛ рд╣реИред

рдУрдкреА рдЬреЛ рдЪрд╛рд╣рддрд╛ рд╣реИ, рдЙрд╕рдХреЗ рд▓рд┐рдП рдПрдХ рдкреНрд▓рдЧрдЗрди рд▓рд╛рдЧреВ рдХрд░рдирд╛ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ (рд╢реЙрд░реНрдЯрд╣реИрдВрдб рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреЗ рдмрд╛рдж рдпрд╛ рдЙрд╕рд╕реЗ рдкрд╣рд▓реЗ) рдЬреЛ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рдпрд╛ рд╕рджрд╕реНрдп рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреЛ рдЦреЛрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХреЛрд░реНрди рдпрд╛ @ рдмреЗрдмреЗрд▓/рдкрд╛рд░реНрд╕рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдЗрд╕реЗ рдЬреЛрдбрд╝рддреЗ рд╕рдордп рдХреЙрд▓ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдореЗрдВ рдмрджрд▓ рджреЗрддрд╛ рд╣реИ рд▓реЗрдмрд▓ рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдФрд░ рдЬреЗрдирд░реЗрдЯ рдХреЛрдб рд╡рд╛рдкрд╕ рдХрд░ рджреЗрдВред

=> expr;

рдореЗрд░реА рд░рд╛рдп рдореЗрдВ рд╕рд░реНрд╡рд╢реНрд░реЗрд╖реНрдаред

{ => expr }

рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдЖрдИрдПрдордУ рдХреЗ рд╕рд╛рде рд╕рдВрдШрд░реНрд╖ред рдЪреВрдВрдХрд┐ рдпрд╣ { } рдХреЗ рдЕрдВрджрд░ рд╣реИ, { рдЖрдк рдЗрд╕реЗ рдПрдХ рдкреВрд░реНрдг рддреАрд░ рдлрд╝рдВрдХреНрд╢рди ( () => ) рд╣реЛрдиреЗ рдХреА рдЙрдореНрдореАрдж рдХрд░реЗрдВрдЧреЗред

{ > expr}

рдкреЗрдЧрдЬреЗрдПрд╕ рдпрд╛ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдХрд┐рд╕реА рднреА рдЕрдиреНрдп рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рдХреЗ рд▓рд┐рдП рдереЛрдбрд╝рд╛ рдСрд░реНрдереЛрдЧреЛрдирд▓, рддреБрд░рдВрдд "рдпрд╣ рдПрдХ рдореВрд▓реНрдп, рд╢реЙрд░реНрдЯрд╣реИрдВрдб" рдЖрдИрдПрдордУ рдирд╣реАрдВ рдкрдврд╝рддрд╛ рд╣реИ - рдореБрдЦреНрдп рд░реВрдк рд╕реЗ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдШреБрдВрдШрд░рд╛рд▓реЗ рдмреНрд░реЗрд╕рд┐рдЬрд╝ рдореЗрдВ рд╣реИ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИред {=> expr} рд╕рдорд╛рди рддрд░реНрдХ, рдЖрдк рдЙрдореНрдореАрдж рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╡рд╣рд╛рдВ рд╣реЛрдЧрд╛ред


рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, {} рдореЗрдВ рдЧреИрд░-рдЬреЗрдПрд╕ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдЬреЛрдбрд╝рдирд╛ рд╕рд┐рдВрдЯреИрдХреНрд╕ рд╣рд╛рдЗрд▓рд╛рдЗрдЯрд░реНрд╕, рд▓рд┐рдВрдЯрд░реНрд╕ рдЗрддреНрдпрд╛рджрд┐ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдорд╕реНрдпрд╛ рд╣реИред рдореИрдВ рдЗрд╕рдХреЗ рдЦрд┐рд▓рд╛рдл рдЕрдиреБрд╢рдВрд╕рд╛ рдХрд░рддрд╛ рд╣реВрдВред

рдЕрдЧрд░ рдореИрдВ рдЕрднреА рддрдХ рдПрдХ рдФрд░ рд╡рд┐рдХрд▓реНрдк рд╕реБрдЭрд╛ рд╕рдХрддрд╛ рд╣реВрдВ, рд╢рд╛рдпрдж > рдЕрдкрдиреЗ рдЖрдк рдореЗрдВ (рдПрдХ рд╡рд┐рдзреЗрдп рдмреНрд▓реЙрдХ рдХреЗ рдЕрдВрджрд░ рдирд╣реАрдВ)ред рдЬрдм рдЖрдк рдирд┐рдпрдореЛрдВ рдХреЛ рд▓рдВрдмрд╡рдд рд╕реНрдерд╛рди рджреЗрддреЗ рд╣реИрдВ рддреЛ рдпрд╣ рдЪреАрдЬреЛрдВ рдХреЛ рд╕рдВрд░реЗрдЦрд┐рдд рд░рдЦрдиреЗ рдореЗрдВ рдорджрдж рдХрд░рддрд╛ рд╣реИ:

    = foo:bar qux:(' '+ @qix)+
    > {foo, qux}
    ;

рд╕рд╛рде рд╣реА рдЗрдирд▓рд╛рдЗрди

some_rule = foo:bar qux:(' '+ @qix)+ > {foo, qux};

'=>' рдХреЗ рд▓рд┐рдП рдЕрд░реНрдзрд╡рд┐рд░рд╛рдо рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреНрдпреЛрдВ рд╣реИ? рдореИрдВ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдмрд┐рд▓реНрдбрд▓рд┐рд╕реНрдЯ() рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп рдиреЗрд╕реНрдЯреЗрдб рдХреЛрдб рдореЗрдВ рдПрдХ рдорд╛рди рд╡рд╛рдкрд╕ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ:

  = "(" _ head:Expression _ tail:("," _ expr:Expression => expr)* ")" {
      return [head, ...tail]
    }

рдореБрдЭреЗ рдпрд╣ рдХреНрд▓реАрдирд░ рдореИрдЬрд┐рдХ рдЗрдВрдбреЗрдХреНрд╕ (рдиреАрдЪреЗ) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рдорд┐рд▓рддрд╛ рд╣реИред рдПрдХ рдЕрдиреНрдп рд╡рд┐рдХрд▓реНрдк рдиреЗрд╕реНрдЯреЗрдб рд▓реЗрдмрд▓ рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП ("," _ tail:Expression)* ")"

  = "(" _ head:Expression _ tail:("," _ Expression)* ")" {
      return buildList(head, tail, 2)
    }

рдореИрдВ parser.pegjs рджреЗрдЦ рд░рд╣рд╛ рдерд╛, рдФрд░ рдореБрдЭреЗ рд▓рд╛рдЗрди 434 рдХреЗ рдЖрд╕рдкрд╛рд╕ рдХреЛрдбрдмреНрд▓реЙрдХ рджрд┐рдЦрд╛рдИ рджреЗ рд░рд╣рд╛ рд╣реИред рдЗрд╕реЗ рдЖрдЬрдорд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХреНрдпрд╛ рдХрд░рдирд╛ рд╣реЛрдЧрд╛? рдирд┐рдпрдо рдХреЛрдб рдХреЗрд╡рд▓ SourceCharacter рдХреЛ рдкрдврд╝рддрд╛ рд╣реИ, рдЬреЛ рд╕рд┐рд░реНрдл '.' рд╣реИред

CodeBlock "code block"
  = "=>" __ <strong i="13">@Code</strong> // this?
  / "{" <strong i="14">@Code</strong> "}"

@mikeaustin рд╣рд╛рдБ, рдпрд╣ рд╕рд╣реА рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕рдХреЗ рд▓рд┐рдП рдпрд╣ рдЬрд╛рдирдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЗрд╕ рдХреНрд░рдо рдХреЛ рдХрд╣рд╛рдБ рд╕рдорд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛рдП, рдЗрд╕рд▓рд┐рдП => рдмрд╛рдж рд╣рд░ рдЪреАрдЬ рдХрд╛ рдЙрдкрднреЛрдЧ рд╣реЛрдЧрд╛

рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ "рдХреЛрдб" рдереЛрдбрд╝рд╛ рд╣реЛрд╢рд┐рдпрд╛рд░, рдХреЛрд╖реНрдардХ рдФрд░ рдмреНрд░реЗрд╕рд┐рдЬрд╝ рдХреЛ рд╕рдВрддреБрд▓рд┐рдд рдХрд░рдиреЗ рдФрд░ рд▓рд╛рдЗрдирдЯрд░реНрдорд┐рдиреЗрдЯрд░ рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рд╡рд╛рд▓рд╛ рд╣реЛ? рдЗрд╕реЗ рдкреВрд░реНрдг рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрдЧреА, рд▓реЗрдХрд┐рди рдпрд╣ рдЬрд┐рддрдирд╛ рд▓рдЧрддрд╛ рд╣реИ рдЙрд╕рд╕реЗ рдХрд╣реАрдВ рдЕрдзрд┐рдХ рдХрдард┐рди рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

рджрд░рдЕрд╕рд▓, рдореИрдВ рд╕реЛрдЪ рд░рд╣рд╛ рдерд╛, рдпреЗ рдмрджрд▓рд╛рд╡ рд╢рд╛рдпрдж рдХрд╛рдо рдХрд░реЗрдВ:

CodeBlock "code block"
  = "=>" _ expession:CallExpression {
       return `return ${ expession };`;
     }
  / "{" <strong i="6">@Code</strong> "}"
  / "{" { error("Unbalanced brace."); }

// Will be based on ECMAScript's CallExpression
CallExpression
  = ...
  / MemberExpression

// Will be based on ECMAScript's MemberExpression
MemberExpression
  = ...
  / ValidIdentifier

// Change `LabelIdentifier` into `ValidIdentifier`

рдЗрд╕ рддрд░рд╣ рд╕реЗ рдЕрднреА рднреА рдХреБрдЫ рд╕рд╛рдорд╛рди рдЬреИрд╕реЗ рдИрд╕реАрдПрдордПрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреА рдкреНрд░рд╛рдердорд┐рдХ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рдпреЛрдВ (рд╕рдВрдЦреНрдпрд╛рдУрдВ, рдмреВрд▓рд┐рдпрди, рд╕рд░рдгреА, рдЖрджрд┐) рдХреЛ рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА, рдЗрд╕рд▓рд┐рдП рдзреНрдпрд╛рди рд╕реЗ рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА рдХрд┐ рдХреНрдпрд╛ рдЬреЛрдбрд╝рдирд╛ рд╣реИред


рд╕рдВрддреБрд▓рди рдХреЛрд╖реНрдардХ рдФрд░ рдмреНрд░реЗрд╕рд┐рдЬрд╝

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


_PEG.js v0.12_ рдХреЗ рд╕рд╛рде, рдореИрдВ OpenPEG рдкрд░ рдХрд╛рдо

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

exports = module.exports = functionBodies`${grammarScript}
...
objectText =
    head:word
    rest:(_txt_ word)*
    ${f=>{
        return new Txt(rest.reduce((a,b)=>([...a,...b]),[head]))
        }}
word = ch:(wordCharacter/escapedCharacter)+ ${chJoin}
...
`
function functionBodies(glue, ...fns){
    return glue.map( (str,i) => str + (fns[i]||'').toString().replace(/^[^{]*/,'').replace(/[^}]*$/, '') ).join('')
    }

function chJoin(ch){return ch.join('')}

рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рдкрд╛рдЗрдк рдСрдкрд░реЗрдЯрд░ (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Pipeline_operator) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд░реЗрдВ? рдЪреВрдВрдХрд┐, рдореВрд▓ рд░реВрдк рд╕реЗ, рдЖрдк рдбреЗрдЯрд╛ рдХреЛ рдкрд╛рдЗрдк рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣ рд░рд╣реЗ рд╣реИрдВ?

{
  function extract(value) {
    return value;
  }
  function concat(head, tail) {
    return head ? [head].concat(tail) : [];
  }
  function toAddExpr(head, tail) {
    return { type: 'addExpr', expressions: concat(head, tail) };
  }
}

List
  = '(' _ head:Item? tail:( _ ',' _ value:Item |> extract )* _ ')' |> concat

// Another kind of list
Add
  = '(' _ head:Multiply? tail:( _ '+' _ value:Multiply |> extract  )* _ ')' |> toAddExpr

рдРрд╕рд╛ рдХреБрдЫ рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдХреЛрдИ рдЫреЛрдЯрд╛ рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред

рдЗрд╕рдореЗрдВ рд╕реЗ рдХреЛрдИ рднреА рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ рд╣реИ рдпрджрд┐ рд╣рдо рддреАрд░реЛрдВ рдХреЛ рдмрдЧрд╝рд▓ рдореЗрдВ рдЪрдордХрд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рдкрд╛рд░реНрд╕ рдХрд░рддреЗ рд╣реИрдВред

рдЬрдмрдХрд┐ рдпрд╣ рдПрдХ рд╕рд╛рдл-рд╕реБрдерд░рд╛ рд╡рд┐рдЪрд╛рд░ рд╣реИ, рдпрд╣ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдмрдирд╛рдо рд╡реНрдпрд╛рдкрдХ рд╡реНрдпрд╛рдХрд░рдг рд╕рдВрдмрдВрдзреА рдЕрд╕реНрдкрд╖реНрдЯрддрд╛рдУрдВ рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддрд╛ рд╣реИред рдХреЛрдИ рднреА рдЬрд┐рд╕рдиреЗ рдЬреЗрдПрд╕ рдХреЛ рдкрд╛рд░реНрд╕ рдХрд┐рдпрд╛ рд╣реИ рдФрд░ рдпрд╛рдж рдХрд░рддрд╛ рд╣реИ рдХрд┐ with рдХреНрдпрд╛ рдкрд░рд╛рдЬрдп рдерд╛, рд╡рд╣ рдЬрд╛рдирддрд╛ рдерд╛ рдХрд┐ рдпрд╣ рдореВрд▓ рд░реВрдк рд╕реЗ рдПрдХ рдкрд╛рд░реНрд╕рд░ рдХреА рд╣рддреНрдпрд╛ рдХрд░реЗрдЧрд╛ред

рдлреИрдВрд╕реА рдирдИ рдЪреАрдЬреЗрдВ рдмрдирд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп, рд╣рдореЗрдВ рд╕рд┐рд░реНрдл рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдПрд░реЛ рдлрд╝рдВрдХреНрд╢рдВрд╕ ES6 рд╕реЗ рдкреБрд░рд╛рдиреЗ рд╣реИрдВ рдФрд░ ES6 2015 рд╕реЗ рд╣реИрдВред рдЗрд╕реЗ рдЫрд╣ рд╕рд╛рд▓ рдкрд╣рд▓реЗ рд╣рд▓ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдпрд╣рд╛рдВ рдХреЛрдИ рдЖрд╡рд┐рд╖реНрдХрд╛рд░ рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред

рдкрд╛рдЗрдк рдСрдкрд░реЗрдЯрд░ рдмреБрд░реА рддрд░рд╣ рд╕реЗ рддреНрд░реБрдЯрд┐рдкреВрд░реНрдг рд╣реИ рдФрд░ рд╢рд╛рдпрдж рдЗрд╕реЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдирд╣реАрдВ рдмрдирд╛рдпреЗрдЧрд╛, рдФрд░ рджреЛрдиреЛрдВ рднрд╛рд╖рд╛ рдЬреЛ рдореВрд▓ рд░реВрдк рд╕реЗ (рдПрдл #) рд╕реЗ рдЖрддреА рд╣реИ рдФрд░ рдЬрд┐рд╕ рднрд╛рд╖рд╛ рдиреЗ рдЗрд╕реЗ рд▓реЛрдХрдкреНрд░рд┐рдп рдХрд┐рдпрд╛ рд╣реИ (рдЕрдореГрдд) рдЗрд╕рд╕реЗ рджреВрд░ рд╣реЛ рд░рд╣реЗ рд╣реИрдВред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрд╣ рдХрд┐рд╕реА рднреА рдорд╛рдпрдиреЗ рдореЗрдВ рдкрд╛рдЗрдкрд┐рдВрдЧ рдирд╣реАрдВ рд╣реИред

рдкреАрдИрдЬреА рдЗрддрдирд╛ рд╕рдлрд▓ рд╣реЛрдиреЗ рдХрд╛ рдХрд╛рд░рдг рдпрд╣ рдерд╛ рдХрд┐ рдпрд╣ рдиреНрдпреВрдирддрдо рдерд╛, рдФрд░ рднрд╛рд╖рд╛ рдХреЗ рдХрд░реАрдм рд░рд╣рд╛, рдЬрд┐рд╕рд╕реЗ рдпрд╣ рддреЗрдЬ, рдЫреЛрдЯрд╛ рдФрд░ рдЕрдиреБрдорд╛рдирд┐рдд рд╣реЛ рд╕рдХреЗред

рдПрд░реЛ рдлрд╝рдВрдХреНрд╢рдВрд╕ ES6 рд╕реЗ рдкреБрд░рд╛рдиреЗ рд╣реИрдВ рдФрд░ ES6 2015 рд╕реЗ рд╣реИрдВред рдЗрд╕реЗ рдЫрд╣ рд╕рд╛рд▓ рдкрд╣рд▓реЗ рд╣рд▓ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдпрд╣рд╛рдВ рдХреЛрдИ рдЖрд╡рд┐рд╖реНрдХрд╛рд░ рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред

рдЙрд╣ред рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рдЦрдмрд░ рд╣реИред рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рдиреЗ рдХреА рджреЗрдЦрднрд╛рд▓?

рдкреАрдИрдЬреА рдЗрддрдирд╛ рд╕рдлрд▓ рд╣реЛрдиреЗ рдХрд╛ рдХрд╛рд░рдг рдпрд╣ рдерд╛ рдХрд┐ рдпрд╣ рдиреНрдпреВрдирддрдо рдерд╛, рдФрд░ рднрд╛рд╖рд╛ рдХреЗ рдХрд░реАрдм рд░рд╣рд╛, рдЬрд┐рд╕рд╕реЗ рдпрд╣ рддреЗрдЬ, рдЫреЛрдЯрд╛ рдФрд░ рдЕрдиреБрдорд╛рдирд┐рдд рд╣реЛ рд╕рдХреЗред

рдкреАрдИрдЬреА (рдПрдХ рдЕрд╡рдзрд╛рд░рдгрд╛ рдХреЗ рд░реВрдк рдореЗрдВ, рдпрд╣ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдирд╣реАрдВ) рд╕рдлрд▓ рд╣реЛрдиреЗ рдХрд╛ рдХрд╛рд░рдг рдЬрдЯрд┐рд▓ рд╡реНрдпрд╛рдХрд░рдг (рдкреБрдирд░рд╛рд╡рд░реНрддреА, рдЖрджрд┐) рдХреЛ рд╕рд░рд▓ рддрд░реАрдХреЗ рд╕реЗ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рд╣реИред рдЗрд╕ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рд╕рд╛рде рдкреИрдХрд░рд╛рдЯ рдХрд╛ рдЖрд╡рд┐рд╖реНрдХрд╛рд░ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛; рдпрд╣ рдПрдХ рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рдирд╣реАрдВ рд╣реИред рдпрд╣ рдПрдХ рдПрд▓реНрдЧреЛрд░рд┐рдердо рд╣реИред

рдПрд░реЛ рдлрд╝рдВрдХреНрд╢рдВрд╕ ES6 рд╕реЗ рдкреБрд░рд╛рдиреЗ рд╣реИрдВ рдФрд░ ES6 2015 рд╕реЗ рд╣реИрдВред рдЗрд╕реЗ рдЫрд╣ рд╕рд╛рд▓ рдкрд╣рд▓реЗ рд╣рд▓ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдпрд╣рд╛рдВ рдХреЛрдИ рдЖрд╡рд┐рд╖реНрдХрд╛рд░ рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред

рдЙрд╣ред рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рдЦрдмрд░ рд╣реИред рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рдиреЗ рдХреА рджреЗрдЦрднрд╛рд▓?

рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдирд╣реАрдВ рдЬрд╛рдирддрд╛ рдХрд┐ рдЖрдк рдХреНрдпрд╛ рдкреВрдЫ рд░рд╣реЗ рд╣реИрдВред

рдПрд░реЛ рдлрдВрдХреНрд╢рди ES6 рд╕реЗ рдкреБрд░рд╛рдиреЗ рд╣реИрдВред рдпрд╣ ES6 рдореЗрдВ рджреВрд╕рд░реА рд╕рдмрд╕реЗ рдмрдбрд╝реА рд▓рдбрд╝рд╛рдИ рдереА, рдЬрд┐рд╕рдиреЗ ES4 рдХреЛ рдкрдЯрд░реА рд╕реЗ рдЙрддрд╛рд░ рджрд┐рдпрд╛ рдФрд░ ES5+ рдХреЛ рдкрдЯрд░реА рд╕реЗ рдЙрддрд╛рд░ рджрд┐рдпрд╛ред рдЙрд╕ рд╕рдордп, 90 рдХреЗ рджрд╢рдХ рдХреЗ рдордзреНрдп рд╕реЗ, рд╣рд░ рдХреЛрдИ рдЙрдирдХреЗ рд▓рд┐рдП рдкреВрдЫ рд░рд╣рд╛ рдерд╛, рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА E4X рдореЗрдВ рдореМрдЬреВрдж рдереЗ, рдФрд░ рдЙрдиреНрд╣реЗрдВ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЧрдпрд╛ рдХреНрдпреЛрдВрдХрд┐ Google рдФрд░ Apple рдиреЗ Microsoft рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХрднреА рднреА рдХреБрдЫ рднреА рдЖрд╡рд┐рд╖реНрдХрд╛рд░ рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ Hixie рдкрд░ рдПрдХ рдлрд┐рдЯ рдлреЗрдВрдХрд╛ред

рдЕрдм рдЖрдк E4X рдХреЛ рд░рд┐рдПрдХреНрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдЬрд╛рдирддреЗ рд╣реИрдВ, рдФрд░ рд╕реЛрдЪрддреЗ рд╣реИрдВ рдХрд┐ рдлреЗрд╕рдмреБрдХ рдиреЗ рдЗрд╕рдХрд╛ рдЖрд╡рд┐рд╖реНрдХрд╛рд░ рдХрд┐рдпрд╛ рдерд╛ред рдлреЗрд╕рдмреБрдХ рдХреЛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЙрдиреНрд╣реЛрдВрдиреЗ рд╣рд╛рдЗрдкрд░рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рддреЛрдбрд╝ рджрд┐рдпрд╛ред рд╣рд╛рдЗрдкрд░рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЖрджрдореА рд╕реНрдкрд╖реНрдЯ рд╣реИ рдХрд┐ рд╡рд╣ рдкреБрд░рд╛рдиреЗ IE рд╕реЗ рдПрдХ рдЙрдкрдпреЛрдЧреА рдЪреАрдЬрд╝ рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓рд╛рдЧреВ рдХрд░ рд░рд╣рд╛ рдерд╛ред

рдЯреЗрдореНрдкрд▓реЗрдЯ рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ рдХреА рддрд░рд╣, рд╡реЗ рдкреВрд░реА рддрд░рд╣ рд╕реЗ ES6 рд╕реЗ рдмрд╛рд╣рд░ рд░рд╣рдиреЗ рд╡рд╛рд▓реЗ рдереЗ, рд▓реЗрдХрд┐рди рдлрд┐рд░ рдХреЙрдлрд╝реАрд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕рд╛рде рдЖрдпрд╛ рдФрд░ рдЬреЗрдПрд╕ рд╕рдореБрджрд╛рдп рдХреЛ рджреЛрдиреЛрдВ рджрд┐рдпрд╛, рдФрд░ рддрдм рддрдХ рдЬреЗрдПрд╕ рд╕рдореБрджрд╛рдп рдЪрд┐рд▓реНрд▓рд╛рдпрд╛ рдЬрдм рддрдХ рдИрд╕реАрдПрдордП рдХреЗ рд▓реЛрдЧ рд╣рд┐рд▓ рдЧрдПред рдХреЗрд╡рд▓ 18 рдорд╣реАрдиреЗ рд▓рдЧреЗ

рдПрд░реЛ рдлрдВрдХреНрд╢рди рд╡рд╣ рд╕рдм рдХреБрдЫ рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рдпрд╣рд╛рдВ рд╣реЛрдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИред рдЖрдк рднреА рд╡рд╣реА рд╡реНрдпрдХреНрддрд┐ рдкреНрд░рддреАрдд рд╣реЛрддреЗ рд╣реИрдВ рдЬрд┐рд╕рдиреЗ 2018 рдореЗрдВ рдЙрдиреНрд╣реЗрдВ рдЗрд╕ рд╕реВрддреНрд░ рдореЗрдВ рдкрд╛рд▓рд╛ рдерд╛, рдЬреЛ рдЖрдкрдХреА рдЕрд╕рд╣рдорддрд┐ рдХреЛ рдХрд╛рдлреА рдЪреМрдВрдХрд╛рдиреЗ рд╡рд╛рд▓рд╛ рдмрдирд╛рддрд╛ рд╣реИ; рдореИрдВ рдЖрдкрдХрд╛ рдмреИрдХрдЕрдк рд▓реЗрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рдерд╛ред

рдореЗрд░реЗ рд▓рд┐рдП рдЗрд╕рд╕реЗ рднреА рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рдЕрдЧрд░ рдпрд╣ рдПрдХ рдПрд░реЛ рдлрдВрдХреНрд╢рди рдХреЗ рд╕рд╛рде рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ , рддреЛ

рдЬреЗрдПрд╕ рд╕реЗ рдкреЗрдЧ рдХреЗ рдорддрднреЗрдж рдмрд┐рд▓реНрдХреБрд▓ рдХрдо рд╣реИрдВред рдХреЗрд╡рд▓ ES6 рд╕рд╛рдорд╛рди рдХрд░рдХреЗ рдЗрд╕рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рд╕реВрдЪреА рдирд╣реАрдВ рдмрджрд▓реА рд╣реИред

рдпрд╣ рдЕрддреНрдпрдВрдд рдореВрд▓реНрдпрд╡рд╛рди рд╣реИред


рдкреАрдИрдЬреА (рдПрдХ рдЕрд╡рдзрд╛рд░рдгрд╛ рдХреЗ рд░реВрдк рдореЗрдВ, рдпрд╣ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдирд╣реАрдВ) рд╕рдлрд▓ рд╣реЛрдиреЗ рдХрд╛ рдХрд╛рд░рдг рдЬрдЯрд┐рд▓ рд╡реНрдпрд╛рдХрд░рдг (рдкреБрдирд░рд╛рд╡рд░реНрддреА, рдЖрджрд┐) рдХреЛ рд╕рд░рд▓ рддрд░реАрдХреЗ рд╕реЗ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рд╣реИред

рдореИрдВ рд╕рд╣рдордд рдирд╣реАрдВ рд╣реВрдВред рдХрдИ рдкрд╛рд░реНрд╕рд░ рдЗрд╕рдХрд╛ рдмреЗрд╣рддрд░ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдереЛрдбрд╝реЗ рд▓реЛрдХрдкреНрд░рд┐рдп рднреА рдирд╣реАрдВ рд╣реИрдВ, рдпрд╣рд╛рдВ рддрдХ тАЛтАЛтАЛтАЛрдХрд┐ рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд╕рд╛рде рднреА рдЬреЛ рдЙрдирдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирддреЗ рд╣реИрдВ (рдЬреИрд╕реЗ рдЕрд░реНрд▓реАред)

рдкрд╛рд░рдВрдкрд░рд┐рдХ рд╡реНрдпрд╛рдЦреНрдпрд╛ рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢ рдЧреБрдгрд╡рддреНрддрд╛ рдФрд░ рдЧрддрд┐ рдХрд╛ рдПрдХ рд╕рдВрдпреЛрдЬрди рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВ рдЗрд╕рд╕реЗ рднреА рд╕рд╣рдордд рдирд╣реАрдВ рд╣реВрдВ, рдХреНрдпреЛрдВрдХрд┐ рдХрдИ рдкрд╛рд░реНрд╕рд░реНрд╕ рдХреЗ рдкрд╛рд╕ рдмреЗрд╣рддрд░ рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢ рддреЗрдЬреА рд╕реЗ рд╣реЛрддреЗ рд╣реИрдВ (рдлрд┐рд░ рд╕реЗ, рдЕрд░реНрд▓реА рдХреА рддрд░рд╣,) рдФрд░ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛтАЛтАЛрдХрд┐ рд▓реЛрдЧреЛрдВ рдХреЗ рд╕рд╛рде рднреА рдереЛрдбрд╝рд╛ рд▓реЛрдХрдкреНрд░рд┐рдп рдирд╣реАрдВ рд╣реИрдВред рдЙрдирдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреМрди рдЬрд╛рдирддрд╛ рд╣реИ

рд╕рд╛рде рд╣реА, рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдкреАрдИрдЬреА рдореЗрдВ рддреАрди рдЧрдВрднреАрд░ рдЬрдЯрд┐рд▓рддрд╛ рдЫрдд рд╣реИрдВред

рдПрдХ, рдЬреЛ рдХреБрдЫ рднреА рдЖрдк рдкреЗрдЧ рд╡реНрдпрд╛рдХрд░рдг рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд░рдЦрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдЙрд╕рдореЗрдВ рдПрдХ рд╕рдВрдпреЛрдЬрди рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП рдЬреЛ рд╕реНрдерд╛рдиреАрдп рдорд╢реАрди рдХреЗ рдХреИрд╢реЗ рдФрд░ рдореВрд▓реНрдпрд╛рдВрдХрди рдереНрд░реВрдкреБрдЯ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП #623) рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдирд╣реАрдВ рдХрд░рддреА рд╣реИред

рджреЛ, рдХрдИ рд╕рд╛рдорд╛рдиреНрдп рдХрд╛рд░реНрдп, рдЬреИрд╕реЗ рдХрд┐ рдмреАрдПрдирдПрдл рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░рдирд╛, рдЕрдХреНрд╕рд░ рдЦреВрдВрдЯреА рдореЗрдВ рдХреНрд░реВрд░рддрд╛ рд╕реЗ рдХрдард┐рди рд╣реЛрддрд╛ рд╣реИ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП #489)

рддреАрд╕рд░рд╛, рдпрд╣ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИ рдХрд┐ рд╣рд░ рджреВрд╕рд░реА JS PEG рд▓рд╛рдЗрдмреНрд░реЗрд░реА, рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдХрд╛рдлреА рдЕрдзрд┐рдХ рд╢рдХреНрддрд┐рд╢рд╛рд▓реА, рд╡рд┐рдлрд▓ рд╣реЛ рдЧрдИ рд╣реИред рдореИрдВрдиреЗ рджреВрд░ рдЬрд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА, рдФрд░ рдХрдИ рдмрд╛рд░ рд╡рд╛рдкрд╕ рдЖ рдЧрдпрд╛ред рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рдореИрдВрдиреЗ рдХрдИ рдмрд╛рд░ canopy рдкрд░ рд╕реНрд╡рд┐рдЪ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд┐рдпрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдореБрдЭреЗ рдЗрд╕рдХреЗ рдЕрддрд┐рд░рд┐рдХреНрдд c , ruby , рдФрд░ python рдХреЛ рд▓рдХреНрд╖рд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рд╕реЗ javascript

рджреА, рдореИрдВ рдХреЗрд╡рд▓ рджреЛ рджрд░реНрдЬрди рдпрд╛ рдЙрд╕рд╕реЗ рдЕрдзрд┐рдХ рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдмреЛрд▓ рд╕рдХрддрд╛ рд╣реВрдВ рдЬрд┐рдиреНрд╣реЗрдВ рдореИрдВ рдЬрд╛рдирддрд╛ рд╣реВрдВ рдХрд┐ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреМрди рдХрд░ рд░рд╣рд╛ рд╣реИред рдФрд░ рдореИрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ, рдХреНрдпреЛрдВрдХрд┐ рдореИрдВрдиреЗ рдХреБрдЫ рджрд┐рди рдкрд╣рд▓реЗ рдкреВрдЫрд╛ рдерд╛, рдЬрдм рдореБрдЭреЗ рдПрд╣рд╕рд╛рд╕ рд╣реБрдЖ рдХрд┐ рдирдпрд╛ рдЧреИрд░-рд░рдЦрд░рдЦрд╛рд╡ рд╕реЙрдлрд╝реНрдЯрд╡реЗрдпрд░ рдХреЛ рдлреЗрдВрдХ рд░рд╣рд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ рдХрд┐рд╕реА рдРрд╕реА рдЪреАрдЬрд╝ рд╕реЗ рдмрджрд▓ рд░рд╣рд╛ рд╣реИ рдЬрд┐рд╕реЗ рдЙрд╕рдиреЗ рдЦрд░реЛрдВрдЪ рд╕реЗ рдмрдирд╛рдпрд╛ рд╣реИ, рдмрд┐рдирд╛ рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд╢рд┐рдд рдкрд░рд┐рд╡рд░реНрддрди рдХреЗ рд╡рд░реНрд╖реЛрдВ рдХреЗ рдмрд╛рдж

рд▓реЗрдХрд┐рди рдЙрдирдореЗрдВ рд╕реЗ рд╣рд░ рдПрдХ рдиреЗ рдореБрдЭрд╕реЗ рдХрд╣рд╛ рдХрд┐ рдпрд╛ рддреЛ рдЙрдиреНрд╣реЗрдВ рдПрдХ рдРрд╕реЗ рдкрд╛рд░реНрд╕рд░ рдХреА рдЬрд░реВрд░рдд рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдореВрд▓ рд╡реИрдЪрд╛рд░рд┐рдХ рдУрд╡рд░рд╣реЗрдб рди рд╣реЛ, рдпрд╛ рдХрд┐ рдЙрдиреНрд╣реЗрдВ рдХреБрдЫ рддреЗрдЬ рдФрд░ рдЫреЛрдЯрд╛ рдЪрд╛рд╣рд┐рдП рдЬрд┐рд╕рдХрд╛ рд╡реНрдпрд╡рд╣рд╛рд░ рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рд╣реЛ

рдЕрдкреНрд░рдХрд╛рд╢рд┐рдд 0.11 рдиреЛрдб рдмрдирд╛рдо рдХреНрд░реЛрдо рдореЗрдВ рд╕рд╛рд░реНрдердХ рд░реВрдк рд╕реЗ рдЕрд▓рдЧ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдиреЛрдб рдХреНрд░реЛрдо рд╕реЗ рдмрдирд╛ рд╣реЛрддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЦрд┐рд▓рд╛рдл рдХреБрдЫ рд╕рдВрдкрддреНрддрд┐ рдкрд░реАрдХреНрд╖рдг рд▓рд┐рдЦрдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВред рдпрд╣ рдИрдорд╛рдирджрд╛рд░реА рд╕реЗ рдбрд░рд╛рд╡рдирд╛ рд╣реИред

.

рдЗрд╕ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рд╕рд╛рде рдкреИрдХрд░рд╛рдЯ рдХрд╛ рдЖрд╡рд┐рд╖реНрдХрд╛рд░ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛; рдпрд╣ рдПрдХ рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рдирд╣реАрдВ рд╣реИред рдпрд╣ рдПрдХ рдПрд▓реНрдЧреЛрд░рд┐рдердо рд╣реИред

рдореИрдВрдиреЗ рдкреИрдХрд░рд╛рдЯ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рдирд╣реАрдВ рдХрд╣рд╛, рджреЛрд╕реНрддред рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЖрдк рдХреНрдпрд╛ рдареАрдХ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣реЗ рд╣реИрдВред

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

рджрд░рдЕрд╕рд▓, рдЕрдзрд┐рдХрд╛рдВрд╢ рдЗрдВрдЯреНрд░реЛ рд╣реИрдХреЗрд▓ рдХрд┐рддрд╛рдмреЗрдВ рдЖрдкрдХреЛ рддреАрди рдпрд╛ рдЪрд╛рд░ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдкреИрдХреЗрдЯ рдкрд╛рд░реНрд╕рд░реНрд╕ рдмрдирд╛рддреА рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ рднрд┐рдХреНрд╖реБрдУрдВ рдХреЗ рд▓рд┐рдП рд╣реИрдХреЗрд▓ рдХреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреА рдкреНрд░рджрд░реНрд╢рди рд╕рдорд╕реНрдпрд╛рдУрдВ рдкрд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд▓рдЯрдХрд╛рдП рдЬрд╛рдиреЗ рдХрд╛ рдПрдХ рд╢рд╛рдирджрд╛рд░ рддрд░реАрдХрд╛ рд╣реИрдВ, рдФрд░ рд╡реЗ рдЖрдкрдХреЛ рджрд┐рдЦрд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ рд▓реЗрдЦрди рдХреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЛ рдХреИрд╕реЗ рдмрджрд▓рдирд╛ рд╣реИ packrats (рдЕрд░реНрдерд╛рдд, рдПрд▓реНрдЧреЛрд░рд┐рдердо рдмрджрд▓рдирд╛) рдмреЗрд╣рддрд░ рдкрд░рд┐рдгрд╛рдо рджреЗрддрд╛ рд╣реИред

.

рдХреГрдкрдпрд╛ рдЙрд╕ рдкрд░ рдкреБрдирд░реНрд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред рдЗрд╕ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЛ рдорд░реЗ рд╣реБрдП рддреАрди рд╕рд╛рд▓ рд╣реЛ рдЧрдП рд╣реИрдВ, рдФрд░ рдореИрдВ рдЕрдм рдЗрд╕реЗ рдлрд┐рд░ рд╕реЗ рдЬреАрд╡рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред

рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рдореГрдд рд╣реЛрдиреЗ рдХрд╛ рдПрдХ рдХрд╛рд░рдг рдпрд╣ рд╣реИ рдХрд┐ рд▓реЛрдЧ рд╕рд╛рдзрд╛рд░рдг рд░рдЦрд░рдЦрд╛рд╡ рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХрд╛ рдЖрд╡рд┐рд╖реНрдХрд╛рд░ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд░рд╣рддреЗ рд╣реИрдВ, рдЬреИрд╕реЗ es() рдореЙрдбреНрдпреВрд▓ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдЬреЛрдбрд╝рдирд╛ рдЬреЛ рджреЛ рд╕рд╛рд▓ рд╕реЗ рджреЗрд╡ рдореЗрдВ рдмреИрдард╛ рд╣реИ

рдореБрдЭреЗ рдЕрдкрдиреЗ рдкреАрдИрдЬреА рдкрд╛рд░реНрд╕рд░реНрд╕ рдХреЛ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рд▓рд╛рдЗрдиреЛрдВ рдХреЛ рдХрд╛рдЯрдХрд░ рдФрд░ рдЙрдирдХреЗ рдЕрдВрдд рдореЗрдВ рд╣рд╛рде рд╕реЗ рд▓рд┐рдЦрд┐рдд рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рд╕реНрдЯреЗрдкрд▓ рдХрд░рдХреЗ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛

рддрд╛рд░реЛрдВ рд╡рд╛рд▓реА рдЖрдВрдЦреЗрдВ рдереЛрдбрд╝реА рджреЗрд░ рдХреЗ рд▓рд┐рдП рдмрдВрдж рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП, рдФрд░ рдХреБрдЫ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рдЪрд┐рдХрдирд╛ рдХреЛрд╣рдиреА рд╢реБрд░реВ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред рдкреАрдИрдЬреА рдХрд╛ рдПрдХрдорд╛рддреНрд░ рдкреНрд░рдореБрдЦ рдПрдирдкреАрдПрдо рдкреБрд╕реНрддрдХрд╛рд▓рдп рдореИрдВрдиреЗ рдХрднреА рднреА рдШрдЯрддреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рд╕рд╛рде рджреЗрдЦрд╛ рд╣реИред рдпрд╣ рджреЗрдЦрддреЗ рд╣реБрдП рдХрд┐ рдореБрдЭреЗ рдЙрдЪрд┐рдд рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрддрд╛ рдирд╣реАрдВ рд╣реИ, рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рд╡рд┐рдЪрд┐рддреНрд░ рдФрд░ рднреНрд░рдорд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рд╣реИред

image

рдореЗрд░реЗ рдкрд╛рд╕ рдмрдЧрдлрд┐рдХреНрд╕ рд╣реИрдВ рдЬрд┐рдирдХрд╛ рдореИрдВ рдЕрднреА рдпреЛрдЧрджрд╛рди рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдореИрдВ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛, рдХреНрдпреЛрдВрдХрд┐

  1. 0.10 dmajda рдХреЗ рдЬрд╛рдиреЗ рдХреЗ рдмрд╛рдж рд╕реЗ рдкреНрд░рдХрд╛рд╢рд┐рдд рдирд╣реАрдВ рд╣реБрдЖ рд╣реИ,
  2. 0.11 рддреАрди рд╕рд╛рд▓ рдкреБрд░рд╛рдирд╛ рд╣реИ, рдХрднреА рдкреНрд░рдХрд╛рд╢рд┐рдд рдирд╣реАрдВ рд╣реБрдЖ, рдФрд░ рдПрдХ рдорд╣реАрдиреЗ рдкрд╣рд▓реЗ рдЗрд╕рдХреА рдШреЛрд╖рдгрд╛ рдХреА рдЧрдИ рдереА рдХрд┐ рдЗрд╕реЗ рдХрднреА рдкреНрд░рдХрд╛рд╢рд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдФрд░
  3. рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди, 0.12 , рдЦреВрдВрдЯреА рдмрд┐рд▓реНрдХреБрд▓ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдХреБрдЫ рдЕрдиреНрдп рд╡реНрдпрдХреНрддрд┐ рдиреЗ рдПрдХ рдЕрд▓рдЧ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛ рдореЗрдВ рдЦрд░реЛрдВрдЪ рд╕реЗ рд▓рд┐рдЦрд╛ рд╣реИ, рдФрд░ рд╣рдо рдореЗрдВ рд╕реЗ рдХреЛрдИ рднреА рдЗрд╕реЗ рдирд╣реАрдВ рджреЗрдЦ рд╕рдХрддрд╛ рд╣реИ

рдореБрдЭреЗ рдкрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЕрд╕рднреНрдп рд╣реИ, рд▓реЗрдХрд┐рди рд╣рдореЗрдВ рдЗрд╕рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдХрд┐ рдЗрд╕ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЛ рдорд╛рд░ рджрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ

рдпрд╣ рд╕рд╛рдордирд╛ рдХрд░рдиреЗ рдХрд╛ рд╕рдордп рд╣реИ рдХрд┐ рд╣рдореЗрдВ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рд╡рд┐рдХрд╛рд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдпрджрд┐ рдпрд╣ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдлрд┐рд░ рд╕реЗ рдЕрдкрдбреЗрдЯ рджреЗрдЦрдиреЗ рдЬрд╛ рд░рд╣рд╛ рд╣реИред рдпрд╣ 2020 рд╣реИред рд╣рдордиреЗ 2017 рдХреЗ рдмрд╛рдж рд╕реЗ рдХреБрдЫ рднреА рдирд╣реАрдВ рджреЗрдЦрд╛ рд╣реИред

рдирд╣реАрдВ, рджреЗрд╡ рд╢рд╛рдЦрд╛ рдХреА рдЧрд┐рдирддреА рдирд╣реАрдВ рд╣реИред рдФрд░ рдирдП рдЕрдиреБрд░рдХреНрд╖рдХ рдХреЛ рдмрд╣реБрдд рд╕рд╛рд░реЗ рдореБрджреНрджреЛрдВ рдХреЛ рдлрд┐рд░ рд╕реЗ рдЦреЛрд▓рдирд╛ рд╣реЛрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ 0.11 рдкрд░реНрдпрд╛рдкреНрдд рдЧреБрдгрд╡рддреНрддрд╛ рдХрд╛ рдирд╣реАрдВ рд╣реИ, рдФрд░ 10 рд╕реЗ рд╢реБрд░реВ рдХрд░рдирд╛ 11 рдареАрдХ рдХрд░рдиреЗ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдмрд╣реБрдд рдХрдо рдХрд╛рдо рд╣реИ

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