Pegjs: рдлреЛрд░рдо рдпрд╛ рдЪреИрдЯ? рдореВрд▓реНрдпреЛрдВ рдХреЛ рдиреАрдЪреЗ/рдкреЙрдкрд┐рдВрдЧ рдореВрд▓реНрдпреЛрдВ рдХреЛ рдкрд╛рд╕ рдХрд░рдирд╛?

рдХреЛ рдирд┐рд░реНрдорд┐рдд 23 рдорд╛рд░реНрдЪ 2017  ┬╖  7рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: pegjs/pegjs

pegjs рд╕рд░рд▓ рдФрд░ рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рд╣реИред рдореБрдЭреЗ рдЗрд╕рд╕реЗ рдкреНрдпрд╛рд░ рд╣реИ! рдореЗрд░реЗ рдХреБрдЫ рдкреНрд░рд╢реНрди рд╣реИрдВ рдЬреЛ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реЛрдВ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рд╣реИрдВ:

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

f = x => x * x

рдЕрдЧрд░ рдореИрдВ рдЗрд╕реЗ рдСрдкрд░реЗрдЯрд░ рдХрд╣рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реМрдВрдкрддрд╛ рд╣реВрдВ, рддреЛ рдореВрд▓реНрдпреЛрдВ рдХреЛ рдкрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реИред рдЕрдЧрд░ рдореИрдВ ValuesOperators рдФрд░ рдпрд╛ = рдФрд░ => рдмрдирд╛рддрд╛ рд╣реВрдВ, рддреЛ рдпрд╣ рдереЛрдбрд╝рд╛ рд╕рд╛рдл рд╣реИ, рд▓реЗрдХрд┐рди рд╢реАрд░реНрд╖ рд╕реНрддрд░ рдкрд░ рдореБрдЭреЗ рдЕрднреА рднреА рдпрд╣ рдЬрд╛рдВрдЪрдирд╛ рд╣реЛрдЧрд╛ рдХрд┐ рдпрд╣ рдХреМрди рд╕рд╛ рдерд╛ред рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рдореБрдЭреЗ {рдЯрд╛рдЗрдк: "рд▓рд┐рдЯрд░рд▓", рд╡реИрд▓реНрдпреВ: ...} рдХрд╛ рдЙрдкрдпреЛрдЧ рджрд┐рдЦрд╛рдИ рджреЗрддрд╛ рд╣реИред рдХреНрдпрд╛ рдЬрд╛рдирдХрд╛рд░реА рдХреЛ рд╡рд╛рдкрд╕ рдкрд╛рд╕ рдХрд░рдиреЗ рдХрд╛ рдпрд╣ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рддрд░реАрдХрд╛ рд╣реИ?

  = values:Values body:(_ "=>" _ Expression)? assign:(_ "=" _ Expression)? {
      if (body && body.length > 0) {
        return new Function(values, body[3]);
      } else if (assign) {
        return new Assignment(values, assign[3]);
      } else {
        return values;
      }
    }

рдзрдиреНрдпрд╡рд╛рдж!
рдорд╛рдЗрдХ

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

рдореИрдВ рдЗрд╕ рдзрд╛рд░рдгрд╛ рдХреЗ рддрд╣рдд рдерд╛ рдХрд┐ рдХреЛрдИ рдмреИрдХрдЯреНрд░реИрдХрд┐рдВрдЧ рдФрд░ рд▓рд╛рд▓рдЪреА рд╣реЛрдиреЗ рдХрд╛ рдорддрд▓рдм рдпрд╣ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЖрдкрдХреЛ "рдЬрд╣рд╛рдВ рднреА рдЖрдк рд╡рд░реНрддрдорд╛рди рдореЗрдВ рд╣реИрдВ" рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдРрд╕рд╛ рдирд╣реАрдВ рд╣реИред рд╡рд╛рд╣!

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

x, y = 2 + 3.foo + "foo", 5 * 2

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

  = Assignment
  / Expression

Assignment
  = vars:Variables _ "=" _ expr:Expression

Variables
  = head:Identifier tail:(_ "," _ Identifier)*

...

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

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

рдХреНрдпрд╛ рдЖрдк рд╡рд░реНрдЪреБрдЕрд▓ рдорд╢реАрди рдореЗрдВ рдмреЙрдХреНрд╕рд┐рдВрдЧ/рдЕрдирдмреЙрдХреНрд╕рд┐рдВрдЧ рдЬрд╛рдирддреЗ рд╣реИрдВ?

рдЕрд╕рд╛рдЗрдирдореЗрдВрдЯ рдХреЗ рдмрд╛рдИрдВ рдУрд░ рдЖрдкрдХреЗ рдкрд╛рд╕ values рдХреИрд╕реЗ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ? рдХреНрдпреЛрдВрдХрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдпрд╣ рд╣реИ: body:(_ "=>" _ Expression)? рд╕рд╛рде рд╕рдорд╛рдкреНрдд рд╣реБрдЖ ?

рдЖрдкрдХреЗ рд╡реНрдпрд╛рдХрд░рдг рдореЗрдВ values рдЕрд░реНрде рд╣реИ? рдХреНрдпрд╛ рдЖрдк рдЬрд╛рдирддреЗ рд╣реИрдВ рдПрд▓-рд╡реИрд▓реНрдпреВ рдХреНрдпрд╛ рд╣реИ?

рдЖрдкрдХреЛ рдЕрдкрдиреЗ рд╡реНрдпрд╛рдХрд░рдг рдХреЛ рд╢рдмреНрджрд╛рд░реНрде рдХреЗ рдХрд░реАрдм рд░рдЦрдирд╛ рдЪрд╛рд╣рд┐рдПред рдХреБрдЫ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдкреАрдИрдЬреА рдХреЗ рд╕рд╛рде рдпрд╣ рдХрдард┐рди рд╣реИ .. { type: "Literal", value: ... } рд╡рд╣реА рд╣реИ рдЬреЛ рдЖрдкрдХреЛ рдПрдПрд╕рдЯреА рдореЗрдВ рдЪрд╛рд╣рд┐рдПред http://astexplorer.net/ рджреЗрдЦреЗрдВ рдХрд┐ рдпрд╣ рдХреИрд╕рд╛ рджрд┐рдЦ рд╕рдХрддрд╛ рд╣реИ

рдореИрдВрдиреЗ рдЕрднреА рдкреНрд░рдпреЛрдЧ рдХреЗ рд▓рд┐рдП рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд┐рдпрд╛ рд╣реИ, рддреЛ рд╣рд╛рдБ, рдХреБрдЫ рдирд╛рдордХрд░рдг рдЧрд▓рдд рд╣реИ :) рдореИрдВрдиреЗ рдХреБрдЫ рд╕рд░рд▓ рдПрд▓рдПрд▓ (1) рдкрд╛рд░реНрд╕рд░реНрд╕ рд▓рд┐рдЦреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдпрд╣ рдХреБрдЫ рд╕рдордп рд╣реЛ рдЧрдпрд╛ рд╣реИред рдореИрдВ рдмрд╕ рдЙрддреНрд╕реБрдХ рд╣реВрдВ рдХрд┐ рдирд┐рд░реНрдгрдп рд▓реЗрдиреЗ рдХрд╛ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рддрд░реАрдХрд╛ рдХреНрдпрд╛ рд╣реИред рдореИрдВ рдЗрд╕ рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рдХреЗ рд▓рд┐рдП рд╕рд░рд▓ рдмрдирд╛рдКрдВрдЧрд╛:

рдП = рдмреА
рдпрд╛
рдПрдХреНрд╕ => рдПрдХреНрд╕ * рдПрдХреНрд╕

рдХреНрдпрд╛ рдРрд╕рд╛ рдХреБрдЫ рдХрд░рдирд╛ рдЬреНрдпрд╛рджрд╛ рдЙрдЪрд┐рдд рд╣реИ?

рдЕрд╕рд╛рдЗрдирдореЗрдВрдЯ рдпрд╛ рдлрдВрдХреНрд╢рди
= рдкрд╣рдЪрд╛рди: рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рдСрдкрд░реЗрдЯрд░: рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ {
рдЕрдЧрд░ (рдСрдкрд░реЗрдЯрд░ рдЯрд╛рдЗрдк === "рдлрдВрдХреНрд╢рди") {
...
}

рдкрд╣рдЪрд╛рди рд╕рдВрдЪрд╛рд▓рдХ
= "="!">" {рд╡рд╛рдкрд╕реА {рдкреНрд░рдХрд╛рд░: "рдЕрд╕рд╛рдЗрдирдореЗрдВрдЯ"; } }
/ "=>" {...}

рдПрдлрд╡рд╛рдИрдЖрдИ, "рдорд╛рди" рдПрдХ рд╢рдмреНрдж рдерд╛ рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдореИрдВ рд╡рд╕реНрддреБрдУрдВ рдХреА рдПрдХ рд╕реВрдЪреА рдХреЗ рд▓рд┐рдП рдХрд░рддрд╛ рдерд╛ - рдпрджрд┐ рд╡реЗ рдЯреБрдкрд▓ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ рддреЛ рд╡реЗ рдорд╛рди рд╣реЛрдВрдЧреЗ, рд▓реЗрдХрд┐рди рдлрд╝рдВрдХреНрд╢рди рддрд░реНрдХреЛрдВ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдЪрд░ред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП (2 + 3)ред

рдЖрдкрдХреЗ рд╕рдордп рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж!

@mikeaustin рдпрд╣ рдЖрдк рдкрд░ рд╣реИ :-)

рд╡реНрдпрд╛рдХрд░рдг рд▓рд┐рдЦрдирд╛ рд╕рднреА рдХрдЯреМрддреА рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣реИред рд╕рдмрд╕реЗ рдКрдкрд░ рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рд╣реИ ред рдпрд╣ рд╡рд╛рдХреНрдп рдХреА рддрд░рд╣ рд╣реИ, рдЖрдк рдЬрд╛рдирддреЗ рд╣реИрдВ, рдЖрдкрдХреЗ рдкрд╛рд╕ рдПрд▓рдПрд▓ рд╡реНрдпрд╛рдХрд░рдг рд╣реИ :-)

рд╡реНрдпрд╛рдХрд░рдг рдХреЛ рдЕрд░реНрде рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдирд╛ рдЖрдкрдХреА рдЬрд┐рдореНрдореЗрджрд╛рд░реА рд╣реИ (рдХреНрд╖рдорд╛ рдХрд░реЗрдВ, рдореБрдЭреЗ рдЕрдВрдЧреНрд░реЗрдЬреА рд╕реЗ рдкрд░реЗрд╢рд╛рдиреА рд╣реИ :-D рдХрднреА-рдХрднреА)

рдЖрдк рдЕрд╕рд╛рдЗрдирдореЗрдВрдЯрдСрд░рдлрдВрдХреНрд╢рди рдХреЛ рдХреИрд╕реЗ рдкреНрд░реЛрд╕реЗрд╕ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ? рдпрд╣ рдореВрд▓ рд░реВрдк рд╕реЗ рдХрдИ рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ рдХрдерди рдХреЗ рд╕рдорд╛рди рд╣реИ, рд▓реЗрдХрд┐рди рдЖрд░-рд╡реИрд▓реНрдпреВ рднреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИред
рджреВрд╕рд░реА рддрд░рдл

    = "=" !">" { return { type: "Assignment"; } }
    / "=>" { ... }

рдХреЗ рд░реВрдк рдореЗрдВ рдмреЗрд╣рддрд░ рд▓рд┐рдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ

    = "=>" { ... }
    / "=" { return { type: "Assignment"; } }

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

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

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

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

рдкреАрдИрдЬреА рд╕рдмрд╕реЗ рд╕рд░рд▓ рджрд┐рдЦрддрд╛ рд╣реИред рдпрд╣ рд╕рдЪ рдореЗрдВ рд╣реИред рд▓реЗрдХрд┐рди рдпрд╣ рд╣рдореЗрд╢рд╛ рд╕рдмрд╕реЗ рдЦрддрд░рдирд╛рдХ рд╣реЛрдЧрд╛...

рдмрд╣реБрдд рдзрдиреНрдпрд╡рд╛рдж! рдУрд╣, рдореБрдЭреЗ pegjs рдХреЗ рд▓рд┐рдП Google рд╕рдореВрд╣ рдорд┐рд▓рд╛, рд▓реЗрдХрд┐рди рдЗрд╕ рдкрд░ рдзреНрдпрд╛рди рдирд╣реАрдВ рджрд┐рдпрд╛ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╡рд┐рдХрд╛рд╕ рдЦрдВрдб рдореЗрдВ рдерд╛ред рдпрджрд┐ рдореЗрд░реЗ рдкрд╛рд╕ рдЕрдиреНрдп рдкреНрд░рд╢реНрди рд╣реИрдВ, рддреЛ рдореИрдВ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рд╡рд╣рд╛рдВ рдЬрд╛рдКрдВрдЧрд╛ред

рд╣рд╛рдВ, рдЕрд╕рд╛рдЗрдирдореЗрдВрдЯ "x = y" рдПрдХ _statement_ рд╣реИ, рд▓реЗрдХрд┐рди "x => x * x" рдПрдХ _expression_ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рд╕рд╛рде рд╣реА "x == y", рдЖрджрд┐ред "=" рдПрдХ рд╡рд┐рд╢реЗрд╖ рдорд╛рдорд▓рд╛ рд╣реИ, рдФрд░ рдЗрд╕рд▓рд┐рдП "=>" рдЗрд╕ рдЕрд░реНрде рдореЗрдВ рд╣реИ рдХрд┐ рд╡реЗ рдирд┐рдпрдорд┐рдд рдСрдкрд░реЗрдЯрд░ рдирд╣реАрдВ рд╣реИрдВред рдореИрдВ рдФрд░ рдЕрдзрд┐рдХ рдЕрднреНрдпрд╛рд╕ рдХрд░реВрдВрдЧрд╛, рдФрд░ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЛ рдФрд░ рдХрд░реАрдм рд╕реЗ рджреЗрдЦреВрдВрдЧрд╛ред рдореЗрд░реА рдЗрдЪреНрдЫрд╛ рд╣реИ рдХрд┐ рдРрд╕реЗ рдЙрджрд╛рд╣рд░рдг рдереЗ рдЬреЛ рдХреИрд▓рдХреБрд▓реЗрдЯрд░ рд╕реЗ рдмрдбрд╝реЗ рдереЗ, рд▓реЗрдХрд┐рди рдЕрдиреНрдп рдЙрджрд╛рд╣рд░рдгреЛрдВ рд╕реЗ рдЫреЛрдЯреЗ рдереЗред рд╢рд╛рдпрдж рдЕрдЧрд░ рдореИрдВ рдкреНрд░рдЧрддрд┐ рдХрд░рддрд╛ рд╣реВрдВ рддреЛ рдпрд╣ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реЛ рд╕рдХрддрд╛ рд╣реИ :)

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

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╡рд╣рд╛рдБ рдХреА рддрд░рд╣ рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╣реИрдВ рдПрдбреАрдЯреА рдФрд░ рдореБрд▓реНрдЯреАрдореЗрдердбреНрд╕ рдХрд┐ рджреЗрд╢реА рд╡рд╛рдХреНрдп рд░рдЪрдирд╛ рд╕реЗ рдлрд╛рдпрджрд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдЙрдиреНрд╣реЗрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдореАрдард╛ рдХреЗ рд╕рд╛рде рд╣рд╛рд╕рд┐рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореАрдард╛ рдХреЗрд╡рд▓ рдЬреЗрдПрд╕ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдЗрд╕реЗ рдЖрд╕рд╛рди рдирд╣реАрдВ рдмрдирд╛ рд╕рдХрддрд╛ рд╣реИред рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ "--strictNullChecks" рдЬреИрд╕реЗ рд╡рд┐рдХрд▓реНрдк рд╣реИрдВ рдФрд░ рдЗрдирд▓рд╛рдЗрди рдпреВрдирд┐рдпрди рдкреНрд░рдХрд╛рд░реЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдлрд┐рд░ рд╕реЗ, рдпрд╣ JS рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдЕрднреА рднреА рд╕рднреА рдмреБрд░реА рдЪреАрдЬреЛрдВ рдХреЛ рдЫреЛрдбрд╝ рджреЗрддрд╛ рд╣реИ (рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдЬрдмрд░рджрд╕реНрддреА, "+" рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╕рдВрдпреЛрдЬрди, рд╕реНрдХреЛрдк рдЙрддреНрдерд╛рдкрди, рдЖрджрд┐ рдХреЗ рд▓рд┐рдП)ред

рдлрд┐рд░ рд╕реЗ, рд╕рднреА рдХреЛрдВ рдорджрдж рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж!
рдорд╛рдЗрдХ

рдореИрдВ рдЗрд╕ рдзрд╛рд░рдгрд╛ рдХреЗ рддрд╣рдд рдерд╛ рдХрд┐ рдХреЛрдИ рдмреИрдХрдЯреНрд░реИрдХрд┐рдВрдЧ рдФрд░ рд▓рд╛рд▓рдЪреА рд╣реЛрдиреЗ рдХрд╛ рдорддрд▓рдм рдпрд╣ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЖрдкрдХреЛ "рдЬрд╣рд╛рдВ рднреА рдЖрдк рд╡рд░реНрддрдорд╛рди рдореЗрдВ рд╣реИрдВ" рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдРрд╕рд╛ рдирд╣реАрдВ рд╣реИред рд╡рд╛рд╣!

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

x, y = 2 + 3.foo + "foo", 5 * 2

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

  = Assignment
  / Expression

Assignment
  = vars:Variables _ "=" _ expr:Expression

Variables
  = head:Identifier tail:(_ "," _ Identifier)*

...

@mikeaustin PEGs рдиреЗ рдкрд╕рдВрдж рдХрд╛ рдЖрджреЗрд╢ рджрд┐рдпрд╛ рд╣реИ рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдореЗрдВ рдорд┐рд▓рд╛рди рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдкрд╣рд▓рд╛ рдкреИрдЯрд░реНрди рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдореЗрд▓ рдЦрд╛рдПрдЧрд╛ред @langpavel рдХрд╛ рдЙрджрд╛рд╣рд░рдг => рд╕реЗ рдЕрдзрд┐рдХ = рд▓рд┐рдП рд╡рд░реАрдпрддрд╛ рд╡реНрдпрдХреНрдд рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдЕрдЪреНрдЫрд╛ рддрд░реАрдХрд╛ рд╣реИред рдЖрдк рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рд╕реЛрдЪрдирд╛ рдЪрд╛рд╣реЗрдВрдЧреЗ рдХрд┐ "рдЗрди рдЪреАрдЬреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ" рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рдПрдХ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреНрдпрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИ, "рдЗрд╕ рд╕рднреА рдкрд╛рда рдХреЛ рдкрдХрдбрд╝реЛ рдЬреЛ рдПрдХ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рд╣реЛ рд╕рдХрддреА рд╣реИ рдФрд░ рдмрд╛рдж рдореЗрдВ рдЗрд╕рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛ рд╕рдХрддреА рд╣реИ"

  = FunctionExpression
  / Assignment
  / Value

рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдореИрдВрдиреЗ рдПрдХ рдкрд░реАрдХреНрд╖рдг рд╡реНрдпрд╛рдХрд░рдг рдмрдирд╛рдпрд╛ рд╣реИ рдЬрд┐рд╕рдХреЗ рд╕рд╛рде рдЖрдк рдЦреЗрд▓ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рдереЛрдбрд╝рд╛ рд╢реЛрд░ рд╣реИ рд▓реЗрдХрд┐рди рдореИрдВрдиреЗ рдЗрд╕реЗ рдмрд╣реБрдд рд╕рд░рд▓ рд░рдЦрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рд╣реИ, рдХреБрдЫ рдЪреАрдЬреЛрдВ рдХреЛ рдЕрдирджреЗрдЦрд╛ рдХрд░ рджрд┐рдпрд╛ рд╣реИ рдЬреИрд╕реЗ рдЕрддрд┐рд░рд┐рдХреНрдд рд╕рдлреЗрдж рдЬрдЧрд╣ рдФрд░ рдСрдкрд░реЗрдЯрд░реЛрдВ рдХреЛ рдЕрдиреБрдорддрд┐ рджреЗрдирд╛ред Expression рдмреНрд▓реЙрдХ рдкрд░ рдзреНрдпрд╛рди рджреЗрдВ рдЬрд╣рд╛рдВ рдЬрд╛рджреВ рд╣реЛрддрд╛ рд╣реИред рд╕рд╛рде рд╣реА, рдореИрдВрдиреЗ SubExpression рдФрд░ ExpressionList рдЬреИрд╕реА рдЪреАрдЬреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ "рдЗрдирдореЗрдВ рд╕реЗ рдХрдИ" рд╕реНрдерд┐рддрд┐рдпреЛрдВ рд╕реЗ рдирд┐рдкрдЯрдиреЗ рдХреЗ рддрд░реАрдХреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд┐рдпрд╛ рд╣реИ; рд╕реВрдЪреА рд╡рд┐рднрд╛рдЬрдХреЛрдВ рдФрд░ рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдЕрд▓рдЧ рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд╣ рдкреИрдЯрд░реНрди рдореЗрд░реЗ рд▓рд┐рдП рдЕрдЪреНрдЫрд╛ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред

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

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

@dmsnell рдореИрдВрдиреЗ рд╣рд╛рд▓ рд╣реА рдореЗрдВ рдирд┐рдпрдореЛрдВ рдХреЛ рд╣рдЯрд╛рдХрд░ рдФрд░ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╡реНрдпрд╛рдХрд░рдг рдореЗрдВ рдХреБрдЫ рдирдП рдЬреЛрдбрд╝рдХрд░ рдмрд╣реБрдд рдХреБрдЫ рд╕реАрдЦрд╛ рд╣реИ, рдЖрдк рдпрд╣рд╛рдВ рдирд╡реАрдирддрдо рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ: Impuls.pegjs ред рдореИрдВрдиреЗ рдПрд▓реАрд╢рди рд╕рд┐рдВрдЯреИрдХреНрд╕ [,,], рдХреБрдЫ рдСрдкрд░реЗрдЯрд░реНрд╕, рд╕реАрдХреНрд╡реЗрдВрд╕ рдПрдХреНрд╕рдкреНрд░реЗрд╢рди рдЗрддреНрдпрд╛рджрд┐ рдХреЛ рд╣рдЯрд╛ рджрд┐рдпрд╛ рд╣реИ рдФрд░ рдЯрдкрд▓ рд╕рд┐рдВрдЯреИрдХреНрд╕ (1, 2) рдФрд░ рд░реЗрдВрдЬ рд╕рд┐рдВрдЯреИрдХреНрд╕ 1..5 рдЬреЛрдбрд╝рд╛ рд╣реИред рдлрд╝реНрд▓реЛрдЯрд┐рдВрдЧ рдкреЙрдЗрдВрдЯ рдирдВрдмрд░реЛрдВ рдХреЛ рд╢рд╛рдмреНрджрд┐рдХ рд╢реНрд░реЗрдгрд┐рдпреЛрдВ рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░рдирд╛ рдЖрд╕рд╛рди рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рджреЛрдиреЛрдВ рддрд░рдл рджрд╢рдорд▓рд╡ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред

рдореИрдВ рд╣рд╛рд▓ рд╣реА рдореЗрдВ рдмрд╣реБрдд рд╕рд╛рд░реЗ рд░рдирдЯрд╛рдЗрдо рдкрд░ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдЙрддреНрд╕рд░реНрдЬрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд╛рд░реНрд╕рд░ рдкрд░ рд╡рд╛рдкрд╕ рдЬрд╛рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред рдореИрдВ рдиреМрдХрд░рд┐рдпреЛрдВ рдХреЗ рдмреАрдЪ рд╣реВрдВ рдЗрд╕рд▓рд┐рдП рдореЗрд░реЗ рдкрд╛рд╕ рдереЛрдбрд╝рд╛ рд╕рдордп рд╣реИ :) рд╡рд┐рд╕реНрддрд╛рд░ рд╡рд┐рдзрд┐рдпреЛрдВ, рдирд╛рдорд┐рдд рдкреИрд░рд╛рдореАрдЯрд░, рд▓рдХреНрд╖рдг рдФрд░ рдорд┐рд╢реНрд░рдг, рдСрдкрд░реЗрдЯрд░ рдУрд╡рд░рд▓реЛрдбрд┐рдВрдЧ рдФрд░ рд╢рд╛рдмреНрджрд┐рдХ рдЯреНрдпреВрдкрд▓ рдФрд░ рд░реЗрдВрдЬ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреЗ рд╕рд╛рде рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреА рд╕рд╛рдл-рд╕реБрдерд░реА рдмреЛрд▓реА рдХреЗ рд▓рд┐рдП рдХреБрдЫ рд╡рд┐рдЪрд╛рд░ ред

рдПрдХ рдмрд╛рд░ рдлрд┐рд░ рдзрдиреНрдпрд╡рд╛рдж!
рдорд╛рдЗрдХ

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

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

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

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

futagoza picture futagoza  ┬╖  13рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

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

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