Pegjs: рдХреБрдЫ рдкреНрд░рд╕реНрддреБрддрд┐рдпреЛрдВ рдХреЛ рдЕрдирджреЗрдЦрд╛ рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛

рдХреЛ рдирд┐рд░реНрдорд┐рдд 8 рдЕрдХреНрддреВре░ 2010  ┬╖  29рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: pegjs/pegjs

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

рд╢реБрдХреНрд░рд┐рдпрд╛

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

@atesgoral - рдореИрдВ рдЬрдорд╛рдирдд рдкрд░ рдЫреВрдЯ рдЧрдпрд╛ред рдореБрдЭреЗ "рдЕрд╕рд▓реА рдкрд╛рд░реНрд╕рд░" рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рдереА - рдореБрдЭреЗ рдХреЗрд╡рд▓ рд▓рдХреНрд╖реНрдп рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдХреБрдЫ рдирд╛рдорд┐рдд рддрддреНрд╡реЛрдВ рдХреЛ рдЕрд▓рдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдереАред

рддреЛ рдореИрдВрдиреЗ рд╡рд╣реА рдХрд┐рдпрд╛ рдЬреЛ рдХреЛрдИ рднреА рдбрд░рдкреЛрдХ рдЖрджрдореА рдХрд░реЗрдЧрд╛ - рд░реЗрдЧреБрд▓рд░ рдПрдХреНрд╕рдкреНрд░реЗрд╢рди рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ред (рдФрд░ рдлрд┐рд░ рдореБрдЭреЗ рджреЛ рд╕рдорд╕реНрдпрд╛рдПрдВ рдереАрдВ :-)

рд▓реЗрдХрд┐рди рдЗрд╕рдиреЗ рдЪрд╛рд▓ рдЪрд▓реА, рдЗрд╕рд▓рд┐рдП рдореИрдВ рдЕрдЧрд▓реА рдЪреБрдиреМрддреА рдХреЗ рд▓рд┐рдП рдЖрдЧреЗ рдмрдврд╝рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдерд╛ред рдЖрдкрдХреА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рд╢реБрднрдХрд╛рдордирд╛рдПрдБ!

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

рдорд╛рдирд╛ред рдХреНрдпрд╛ рдЗрд╕ рд╕рдордп рдРрд╕рд╛ рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рд╕рд╛рдл рддрд░реАрдХрд╛ рд╣реИ?

@benekastah : рдЕрднреА рддрдХ рдХреЛрдИ рд╕рд╛рдл рд░рд╛рд╕реНрддрд╛ рдирд╣реАрдВ рд╣реИред

PEG.js рдХреЗ рдХрд╛рд░реНрдп рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЗ рдХреЛ рдмрджрд▓реЗ рдмрд┐рдирд╛ рдпрд╣ рдХрд░рдирд╛ рдХрдард┐рди рд╣реЛрдЧрд╛ред рд╕рдВрднрд╛рд╡рд┐рдд рд╕рдорд╛рдзрд╛рдиреЛрдВ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ:

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

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

рдореБрдЭреЗ рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред

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

рдореИрдВ рднреА рдРрд╕рд╛ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рдвреВрдВрдв рд░рд╣рд╛ рд╣реВрдВред

рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ рдмрдбрд╝реА рд╡реНрдпрд╛рдХрд░рдг рдлрд╝рд╛рдЗрд▓ рд╣реИ (рдпрд╣ рдПрд╕рдПрдирдПрдордкреА рдПрдордЖрдИрдмреА рдлрд╛рдЗрд▓реЛрдВ рдХреЗ рд▓рд┐рдП рдПрдПрд╕рдПрди.1 рдкреНрд░рд╛рд░реВрдк рдХреЛ рдкрд╛рд░ рдХрд░рддреА рд╣реИ)ред рдореИрдВрдиреЗ рдЗрд╕реЗ рдирд╣реАрдВ рд▓рд┐рдЦрд╛, рд▓реЗрдХрд┐рди рдореИрдВрдиреЗ рдЗрд╕реЗ рдореВрд▓ рд░реВрдк рд╕реЗ PEG.js рдореЗрдВ рдПрдХ рдкрд╛рд░реНрд╕рд░ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдмрджрд▓ рджрд┐рдпрд╛ред (рдпрд╣ рдЕрдЪреНрдЫрд╛ рд╣реИред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдпрд╣ рдмрд╣реБрдд рд╣реА рд╕реНрд▓реАрдХ рд╣реИ рдХрд┐ рдореБрдЭреЗ рдЗрд╕реЗ рдмрджрд▓рдиреЗ рдореЗрдВ 15 рдорд┐рдирдЯ рд╕реЗ рднреА рдХрдо рд╕рдордп рд▓рдЧрд╛ рддрд╛рдХрд┐ PEG.js рдЗрд╕реЗ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░ рд╕рдХреЗред)

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

рдореИрдВ рд╡реНрдпрд╛рдХрд░рдг рдХреЛ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП рдЙрддреНрд╕реБрдХ рдирд╣реАрдВ рд╣реВрдВ рддрд╛рдХрд┐ рдореИрдВ рд╕рднреА рдирд┐рдпрдореЛрдВ рдореЗрдВ рд╕рднреА рдЙрдЪрд┐рдд рд╕рдлреЗрдж рдЬрдЧрд╣ рдбрд╛рд▓ рд╕рдХреВрдВ (рд▓рдЧрднрдЧ 126 рдкреНрд░рд╕реНрддреБрддрд┐рдпрд╛рдВ рд╣реИрдВ ...) рдХреНрдпрд╛ рдРрд╕рд╛ рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рдФрд░ рддрд░реАрдХрд╛ рд╣реИ?

рдзреНрдпрд╛рди рджреЗрдВ: рдЗрд╕ рдШрдЯрдирд╛ рдореЗрдВ рдХрд┐ рдореБрдЭреЗ рд╡реНрдпрд╛рдХрд░рдг рдХреЛ рд╣рд╛рде рд╕реЗ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдирд╛ рд╣реИ, рдореИрдВрдиреЗ Google рд╕рдореВрд╣ рд╕реВрдЪреА рдореЗрдВ рдЯрд┐рдХрдЯ рдореЗрдВ рдХреБрдЫ quesitons рдХреЗ рд▓рд┐рдП рдорджрдж рдорд╛рдВрдЧреАред http://groups.google.com/group/pegjs/browse_thread/thread/568b629f093983b7

рдмрд╣реБрдд рдзрдиреНрдпрд╡рд╛рдж!

Google Groups рдкрд░ рдореМрдЬреВрдж рд▓реЛрдЧреЛрдВ рдХреЛ рдзрдиреНрдпрд╡рд╛рджред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореБрдЭреЗ рд╡рд╣ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рдЬрд╛рдирдХрд╛рд░реА рдорд┐рд▓реА рд╣реИ рдЬреЛ рдореИрдВ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред

рд▓реЗрдХрд┐рди рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдкреАрдИрдЬреА.рдЬреЗрдПрд╕ рдореЗрдВ рд╡реНрд╣рд╛рдЗрдЯрд╕реНрдкреЗрд╕/рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрдирджреЗрдЦрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЪрд┐рд╣реНрдирд┐рдд рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рддрд╛рдХрд┐ рдореБрдЭреЗ рдЕрдиреНрдпрдерд╛ рд╕рд╛рдл рд╡реНрдпрд╛рдХрд░рдг рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдШрдВрдЯреЗ рдирд╣реАрдВ рд▓реЗрдирд╛ рдкрдбрд╝реЗ ... рдзрдиреНрдпрд╡рд╛рдж!

рдзрдиреА

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

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

elideWS.pegjs:

рдПрд╕ = рдЗрдирдкреБрдЯ: (рд╡реНрд╣рд╛рдЗрдЯрд╕реНрдкреЗрд╕ рдХреИрд░реЗрдХреНрдЯрд░ / рдЯреЗрдХреНрд╕реНрдЯ рдХреИрд░реЗрдХреНрдЯрд░) *
{
рд╡рд░ рдкрд░рд┐рдгрд╛рдо = "";

for(var i = 0;i < input.length;i++) result += input[i];
рд╡рд╛рдкрд╕реА рдкрд░рд┐рдгрд╛рдо;
}

рд╡реНрд╣рд╛рдЗрдЯрд╕реНрдкреЗрд╕ рдХреИрд░реЗрдХреНрдЯрд░ = [рдПрдирдЯреА] {рд░рд┐рдЯрд░реНрди ""; }
рдЯреЗрдХреНрд╕реНрдЯ рдХреИрд░реЗрдХреНрдЯрд░ = рд╕реА: [^ рдПрдирдЯреА] {рд░рд┐рдЯрд░реНрди рд╕реА; }

рд▓реЗрдХрд┐рди рдпрд╣ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рдХрд╛рд░рдг рдмрдирддрд╛ рд╣реИ рдЬрдм рд╡реНрд╣рд╛рдЗрдЯрд╕реНрдкреЗрд╕ рдПрдХ рдбрд┐рд▓реАрдореАрдЯрд░ рд╣реЛрддрд╛ рд╣реИ - рдЬреИрд╕реЗ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП

рдЗрд╕ рдореБрджреНрджреЗ рдкрд░ рдЕрдХреНрд╕рд░ рдЯрдХрд░рд╛рддреЗ рд░рд╣рддреЗ рд╣реИрдВред
рд▓реЗрдХрд┐рди рдПрдХ рдЕрдЪреНрдЫрд╛ рд▓реЗрдХреНрд╕рд░ рд▓рд┐рдЦрдирд╛ рдЖрд╕рд╛рди рдирд╣реАрдВ рд╣реИ (рдЖрдк рдПрдХ рд╕реБрд╕рдВрдЧрдд рд▓реЗрдХреНрд╕рд░ рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рд╛рд░рдВрднрд┐рдХ рд╡реНрдпрд╛рдХрд░рдг рдХреЗ рдПрдХ рдЕрдЪреНрдЫреЗ рд╣рд┐рд╕реНрд╕реЗ рдХреА рдирдХрд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ)ред

рдореИрдВ рдЬреЛ рд╕реЛрдЪ рд░рд╣рд╛ рдерд╛ рд╡рд╣ рд╕реНрдХрд┐рдк рдирд┐рдпрдореЛрдВ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рд╣реИ рдЬреЛ рдХрд┐ рдЬрдм рднреА рдХреЛрдИ рдореЗрд▓ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ рддреЛ рд╡рд┐рдХрд▓реНрдк рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдпрд╣ рд╣рд╛рд▓рд╛рдВрдХрд┐ рдПрдХ рдЧреИрд░-рдмреНрд░реЗрдХрд┐рдВрдЧ рд╡рд░реНрдЧ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХрд╛ рдкрд░рд┐рдЪрдп рджреЗрддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг arithmetics.pegjs рдлреНрд▓реЛрдЯреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ

  = Term (("+" / "-") Term)*

Term
  = Factor (("*" / "/") Factor)*

Factor
  = "(" Expression ")"
  / Float

Float "float"
  = "-"? # [0-9]+ # ("." # [0-9]+) // # means that skip rules cannot match

// skip rule marked by "!="
// skip rules cannot match the empty string
_ "whitespace"
  != [ \t\n\r]+

рдЕрднреА рднреА рдЗрд╕реЗ рдкрдЪрд╛ рд░рд╣реЗ рд╣реИрдВред рдХреЛрдИ рдкреНрд░рддрд┐рдкрд╛рджрди? рдмрд╣реБрдд рдмреЗрд╡рдХреВрдлреА рднрд░рд╛ рд╡рд┐рдЪрд╛рд░ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

рддреЛ рдЕрдВрддрд░ рдпрд╣ рд╣реИ рдХрд┐ рдЖрдк рдЕрдВрддрд░ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдЬрдм рд╕рдордЧреНрд░ рдЗрдВрдЬрди рд╣реИ
рд▓реЗрдХреНрд╕рд░ рдореЛрдб рдореЗрдВ рдХрд╛рдо рдХрд░рдирд╛ (рд╡реНрд╣рд╛рдЯреНрд╕рдПрдк рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ) рдФрд░ рдЬрдм рдирд╣реАрдВ (рд╡реНрд╣рд╛рдЯреНрд╕рдПрдк is
рдЕрд╡рд╣реЗрд▓рдирд╛ рдХрд░рдирд╛)ред

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

рдХреНрдпрд╛ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕рдордХрдХреНрд╖ рд╣реЛрдВрдЧреЗ?

рдкрд╛рдиреА рдкрд░ рддреИрд░рдирд╛
"-?[0-9]+("ред" [0-9]+)"

рдпрд╛ рдЕрдиреНрдпрдерд╛ рд╕рд╛рдорд╛рдиреНрдп рд░реЗрдЧреЗрдХреНрд╕ рдХреЛ рд╕реАрдзреЗ рдФрд░ рдмрд╛рд╣рд░ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреЗрдЧ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░реЗрдВ
рдПрдХ рдЙрджреНрдзреГрдд рд╕реНрдЯреНрд░рд┐рдВрдЧ (рдЬрд┐рд╕рдореЗрдВ рд░реЗрдЧреЗрдХреНрд╕ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ) рд╡реНрд╣рд╛рдЗрдЯрд╕реНрдкреЗрд╕ рдХреЛ рдЕрдирджреЗрдЦрд╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

19 рдЕрдкреНрд░реИрд▓ 2014 рдХреЛ рдЕрдкрд░рд╛рд╣реНрди 3:22 рдмрдЬреЗ, рдЖрдВрджреНрд░реЗрдИ рдиреЗрдХреБрд▓рд╛рдК рдиреЛрдЯрд┐рдлрд┐рдХреЗрд╢рди @github.com рдиреЗ рд▓рд┐рдЦрд╛:

рдЗрд╕ рдореБрджреНрджреЗ рдкрд░ рдЕрдХреНрд╕рд░ рдЯрдХрд░рд╛рддреЗ рд░рд╣рддреЗ рд╣реИрдВред
рд▓реЗрдХрд┐рди рдПрдХ рдЕрдЪреНрдЫрд╛ рд▓реЗрдХреНрд╕рд░ рд▓рд┐рдЦрдирд╛ рдЖрд╕рд╛рди рдирд╣реАрдВ рд╣реИ (рдЖрдк рдПрдХ рд╕реБрд╕рдВрдЧрдд рд▓реЗрдХреНрд╕рд░ рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рд╛рд░рдВрднрд┐рдХ рд╡реНрдпрд╛рдХрд░рдг рдХреЗ рдПрдХ рдЕрдЪреНрдЫреЗ рд╣рд┐рд╕реНрд╕реЗ рдХреА рдирдХрд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ)ред

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

рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐
= рдЯрд░реНрдо (("+" / "-") рдЯрд░реНрдо)*

рдЕрд╡рдзрд┐
= рдХрд╛рд░рдХ (("_" / "/") рдХрд╛рд░рдХ)_

рдлрд╝реИрдХреНрдЯрд░
= "(" рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ ")"
/ рдкрд╛рдиреА рдкрд░ рддреИрд░рдирд╛

рдлреНрд▓реЛрдЯ "рдлреНрд▓реЛрдЯ"
= "-"? # [0-9]+ # ("ред" # [0-9]+) // # рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рд╕реНрдХрд┐рдк рдирд┐рдпрдо рдореЗрд▓ рдирд╣реАрдВ рдЦрд╛ рд╕рдХрддреЗ

// "! =" рджреНрд╡рд╛рд░рд╛ рдЪрд┐рд╣реНрдирд┐рдд рдирд┐рдпрдо рдЫреЛрдбрд╝реЗрдВ
// рдЫреЛрдбрд╝реЗрдВ рдирд┐рдпрдо рдЦрд╛рд▓реА рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╕реЗ рдореЗрд▓ рдирд╣реАрдВ рдЦрд╛ рд╕рдХрддреЗ рд╣реИрдВ
_ "рд╡реНрд╣рд╛рдЗрдЯрд╕реНрдкреЗрд╕"
!= [ рдЯреАрдПрдирдЖрд░]+
рдЕрднреА рднреА рдЗрд╕реЗ рдкрдЪрд╛ рд░рд╣реЗ рд╣реИрдВред рдХреЛрдИ рдкреНрд░рддрд┐рдкрд╛рджрди? рдмрд╣реБрдд рдмреЗрд╡рдХреВрдлреА рднрд░рд╛ рд╡рд┐рдЪрд╛рд░ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

-
рдЗрд╕ рдИрдореЗрд▓ рдХрд╛ рд╕реАрдзреЗ рдЙрддреНрддрд░ рджреЗрдВ рдпрд╛ рдЗрд╕реЗ GitHub рдкрд░ рджреЗрдЦреЗрдВред

@waTeim рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдирд╣реАрдВред

рдкрд░рдВрдкрд░рд╛рдЧрдд рд░реВрдк рд╕реЗ рдкрд╛рд░реНрд╕рд┐рдВрдЧ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рд▓реЗрдХреНрд╕рд┐рдВрдЧ рдФрд░ рдкрд╛рд░реНрд╕рд┐рдВрдЧ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд▓реЗрдХреНрд╕рд┐рдВрдЧ рдХреЗ рджреМрд░рд╛рди рд╣рд░ рдХрд┐рд░рджрд╛рд░ рдХрд╛ рдорд╣рддреНрд╡ рд╣реЛрддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рд╡реНрд╣рд╛рдЗрдЯрд╕реНрдкреЗрд╕ рднреА рд╢рд╛рдорд┐рд▓ рд╣реИред рд▓реЗрдХрд┐рди рдлрд┐рд░ рдЗрдиреНрд╣реЗрдВ "рддреНрдпрд╛рдЧ" рдЯреЛрдХрди рдореЗрдВ рдмрджрд▓ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдкрд╛рд░реНрд╕рд░, рдЕрдЧрд▓реЗ рдЯреЛрдХрди рдкрд░ рдЖрдЧреЗ рдмрдврд╝рдиреЗ рдкрд░, рдХрд┐рд╕реА рднреА рддреНрдпрд╛рдЧрдиреЗ рд╡рд╛рд▓реЗ рдЯреЛрдХрди рдХреЛ рддреНрдпрд╛рдЧ рджреЗрдЧрд╛ред рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣рд┐рд╕реНрд╕рд╛ рдпрд╣ рд╣реИ рдХрд┐ рдЖрдк рдХреБрдЫ рднреА рддреНрдпрд╛рдЧ рд╕рдХрддреЗ рд╣реИрдВ, рди рдХрд┐ рдХреЗрд╡рд▓ рд░рд┐рдХреНрдд рд╕реНрдерд╛рдиред рдпрд╣ рд╡реНрдпрд╡рд╣рд╛рд░ рдареАрдХ рд╡реИрд╕рд╛ рд╣реА рд╣реИ рдЬреИрд╕рд╛ @andreineculau рд╡рд░реНрдгрди рдХрд░ рд░рд╣рд╛ рд╣реИред

рдореВрд▓ рд╡рд┐рдЪрд╛рд░ рдпрд╣ рд╣реИ рдХрд┐ рдЗрд╕реЗ рдХреИрд╕реЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдП рдПрдХ рд░рд╛рдЬреНрдп рд╕реЗ рджреВрд╕рд░реЗ рд░рд╛рдЬреНрдп рдореЗрдВ рд╕рдВрдХреНрд░рдордг рдХрд░рддреЗ рд╕рдордп рд╕рднреА рддреНрдпрд╛рдЧ рдирд┐рдпрдореЛрдВ рдХреЗ рдЦрд┐рд▓рд╛рдл рдЕрддрд┐рд░рд┐рдХреНрдд рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

23 рдЕрдкреНрд░реИрд▓ 2014 рдХреЛ рджреЛрдкрд╣рд░ 2:54 рдмрдЬреЗ рд╕реАрди рдлреИрд░реЗрд▓ рдиреЛрдЯрд┐рдлрд┐рдХреЗрд╢рди @github.com рдиреЗ рд▓рд┐рдЦрд╛:

@waTeim рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдирд╣реАрдВред

рддреЛ рд╣рдо рд╕рд╣рдордд рд╣реИрдВред рдкрд╛рд░рдВрдкрд░рд┐рдХ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдкрд░реНрдпрд╛рдкреНрдд рд╣реИред рд╣реЛрдиреЗ рдХреА рдХреЛрдИ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ
рдХрдбрд╝рд╛рдИ рд╕реЗ рдкрд╛рд░реНрд╕рд░ рднрд╛рдЧ рддреНрдпрд╛рдЧ рдХрд┐рдП рдЧрдП рдЯреЛрдХрди рдХреЗ рдЕрд╕реНрддрд┐рддреНрд╡ рдХреЛ рдкрд╣рдЪрд╛рдирддрд╛ рд╣реИ рдФрд░ рд╡рд╣рд╛рдВ рд╣реИ
рд▓реЗрдХреНрд╕рд░ рднрд╛рдЧ рдХреЛ рд╕рд╢рд░реНрдд рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рдХрд╛рд░рдг рдирд╣реАрдВ рд╣реИ (рд╕рдВрджрд░реНрдн рд╕рдВрд╡реЗрджрдирд╢реАрд▓ рддрд░реАрдХреЗ рд╕реЗ)
wrt рдЯреЛрдХрди рдкрд╣рдЪрд╛рди рд░рд╣рд╛ рд╣реИред

рдЗрд╕рд▓рд┐рдП рднрд╛рд╖рд╛ рдореЗрдВ рдЧреЛрдВрдж рддрддреНрд╡ (рдЬреИрд╕реЗ '#') рд░рдЦрдиреЗ рдХреА рдХреЛрдИ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ
рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ

1) рдЯреЛрдХрди рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд░реЗрдЧреЗрдХреНрд╕ рд╕реЗ рдмрдирд╛рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рд╕рдВрджрд░реНрдн рд╕рдВрд╡реЗрджрдирд╢реАрд▓ рдирд╣реАрдВ рд╣реИрдВред
2) рдЯреЛрдХрди рдХреЛ рдмрд┐рдирд╛ рдХрд┐рд╕реА рдЕрдкрд╡рд╛рдж рдХреЗ рддреНрдпрд╛рдЧрдиреЗ рдХреЗ рд▓рд┐рдП рдЪрд┐рд╣реНрдирд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдкрд░рдВрдкрд░рд╛рдЧрдд рд░реВрдк рд╕реЗ рдкрд╛рд░реНрд╕рд┐рдВрдЧ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рд▓реЗрдХреНрд╕рд┐рдВрдЧ рдФрд░ рдкрд╛рд░реНрд╕рд┐рдВрдЧ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд▓реЗрдХреНрд╕рд┐рдВрдЧ рдХреЗ рджреМрд░рд╛рди рд╣рд░ рдХрд┐рд░рджрд╛рд░ рдХрд╛ рдорд╣рддреНрд╡ рд╣реЛрддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рд╡реНрд╣рд╛рдЗрдЯрд╕реНрдкреЗрд╕ рднреА рд╢рд╛рдорд┐рд▓ рд╣реИред рд▓реЗрдХрд┐рди рдлрд┐рд░ рдЗрдиреНрд╣реЗрдВ "рддреНрдпрд╛рдЧ" рдЯреЛрдХрди рдореЗрдВ рдмрджрд▓ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдкрд╛рд░реНрд╕рд░, рдЕрдЧрд▓реЗ рдЯреЛрдХрди рдкрд░ рдЖрдЧреЗ рдмрдврд╝рдиреЗ рдкрд░, рдХрд┐рд╕реА рднреА рддреНрдпрд╛рдЧрдиреЗ рд╡рд╛рд▓реЗ рдЯреЛрдХрди рдХреЛ рддреНрдпрд╛рдЧ рджреЗрдЧрд╛ред рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣рд┐рд╕реНрд╕рд╛ рдпрд╣ рд╣реИ рдХрд┐ рдЖрдк рдХреБрдЫ рднреА рддреНрдпрд╛рдЧ рд╕рдХрддреЗ рд╣реИрдВ, рди рдХрд┐ рдХреЗрд╡рд▓ рд░рд┐рдХреНрдд рд╕реНрдерд╛рдиред рдпрд╣ рд╡реНрдпрд╡рд╣рд╛рд░ рдареАрдХ рд╡реИрд╕рд╛ рд╣реА рд╣реИ рдЬреИрд╕рд╛ @andreineculau рд╡рд░реНрдгрди рдХрд░ рд░рд╣рд╛ рд╣реИред

рдореВрд▓ рд╡рд┐рдЪрд╛рд░ рдпрд╣ рд╣реИ рдХрд┐ рдЗрд╕реЗ рдХреИрд╕реЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдП рдПрдХ рд░рд╛рдЬреНрдп рд╕реЗ рджреВрд╕рд░реЗ рд░рд╛рдЬреНрдп рдореЗрдВ рд╕рдВрдХреНрд░рдордг рдХрд░рддреЗ рд╕рдордп рд╕рднреА рддреНрдпрд╛рдЧ рдирд┐рдпрдореЛрдВ рдХреЗ рдЦрд┐рд▓рд╛рдл рдЕрддрд┐рд░рд┐рдХреНрдд рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

-
рдЗрд╕ рдИрдореЗрд▓ рдХрд╛ рд╕реАрдзреЗ рдЙрддреНрддрд░ рджреЗрдВ рдпрд╛ рдЗрд╕реЗ GitHub рдкрд░ рджреЗрдЦреЗрдВред

рдареАрдХ рд╣реИ рддреЛ рдореИрдВрдиреЗ рдЖрдкрдХреЛ рдЧрд▓рдд рд╕рдордЭрд╛ред рд▓реЗрдХреНрд╕рд░ рд░рд╛рдЬреНрдпреЛрдВ рдХреЗ рдорд╛рдорд▓реЗ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдпрд╣ рдПрдХ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрд▓рдЧ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдФрд░ IMHO peg.js рдХреЗ рджрд╛рдпрд░реЗ рд╕реЗ рдмрд╛рд╣рд░ рд╣реИред

@waTeim @rioki рдореЗрд░реЗ рд╕реБрдЭрд╛рд╡ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдереЛрдбрд╝рд╛ рднреВрд▓ рдЬрд╛рдУред

рд╣рд╛рде, рдЗрд╕ рдирд┐рдпрдо рдХреЛ рд▓реЗ рд▓реЛред рдпрджрд┐ рдЖрдк *WS рдХреЛ рд╣рдЯрд╛рдХрд░ рдирд┐рдпрдо рдХреЗ рд╡реНрдпрд╛рдХрд░рдг рдХреЛ рд╕рд░рд▓ рдмрдирд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк PEGjs рдХреЛ field_name рдФрд░ : рдмреАрдЪ field_name *WS рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреЗрдиреЗ рдХрд╛ рдирд┐рд░реНрджреЗрд╢ рдХреИрд╕реЗ рджреЗрдВрдЧреЗ?

@andreineculau рдХреНрдпреЛрдВрдХрд┐ рдЖрдкрдХрд╛ рд╡реНрдпрд╛рдХрд░рдг рд╡реНрд╣рд╛рдЗрдЯрд╕реНрдкреЗрд╕ рд╕рдВрд╡реЗрджрдирд╢реАрд▓ рд╣реИ, рдпрд╣ рд▓рд╛рдЧреВ рдирд╣реАрдВ рд╣реИред рддреНрдпрд╛рдЧрдиреЗ рд╡рд╛рд▓реЗ рдЯреЛрдХрди рд╡реНрдпрд╛рдХрд░рдг рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реЛрдВрдЧреЗ, рд╕рдЯреАрдХ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рд▓реЗрдХреНрд╕рд┐рдВрдЧ рднрд╛рдЧред рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдпрд╣рд╛рдВ рдХреНрдпрд╛ рдмрдбрд╝рд╛ рдореБрджреНрджрд╛ рд╣реИ, рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА 70 рдХреЗ рджрд╢рдХ рдореЗрдВ рдкрд░реНрдпрд╛рдкреНрдд рд░реВрдк рд╕реЗ рд╣рд▓ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдкреНрд░рддреНрдпреЗрдХ рднрд╛рд╖рд╛ рдХреЗ рдЕрдкрдиреЗ рд╕реНрдХрд┐рдк рдХрд░рдиреЗ рдпреЛрдЧреНрдп рдЯреЛрдХрди рд╣реЛрддреЗ рд╣реИрдВ рдФрд░ рдЬрд╣рд╛рдВ рд╡реЗ рд▓рд╛рдЧреВ рд╣реЛрддреЗ рд╣реИрдВред рд░рд┐рдХреНрдд рд╕реНрдерд╛рди рдФрд░ рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдВ рднрд╛рд╖рд╛ рдкрд░рд┐рднрд╛рд╖рд╛ рдХрд╛ рдЙрддрдирд╛ рд╣реА рд╣рд┐рд╕реНрд╕рд╛ рд╣реИрдВ рдФрд░ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╡реНрдпрд╛рдХрд░рдг рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИрдВред рдпрд╣ рд╕рд┐рд░реНрдл рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ рдХрд┐ рдЕрдзрд┐рдХрд╛рдВрд╢ рднрд╛рд╖рд╛рдУрдВ рдХреЗ рд╕рд╛рде рд╕реНрдХрд┐рдк рдХрд░рдиреЗ рдпреЛрдЧреНрдп рдЯреЛрдХрди рдкреНрд░рддреНрдпреЗрдХ рджреВрд╕рд░реЗ рдЯреЛрдХрди рдХреЗ рдмреАрдЪ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдПрдХ рддреНрдпрд╛рдЧ рдирд┐рдпрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдкреНрд░рддреНрдпреЗрдХ рдирд┐рдпрдо рдХреЗ рд▓рд┐рдП expr = WS lit WS op WS expr WS ";" рд▓рд┐рдЦрдиреЗ рд╕реЗ рдЖрд╕рд╛рди рдмрдирд╛рддрд╛ рд╣реИред рд╡реНрд╣рд╛рдЗрдЯрд╕реНрдкреЗрд╕ рд╣реИрдВрдбрд▓рд┐рдВрдЧ рдХреЗ рд╕рд╛рде рд╕реА рдХреЗ рд▓рд┐рдП рдПрдХ рд╡реНрдпрд╛рдХрд░рдг рдХреА рдХрд▓реНрдкрдирд╛ рдХрд░реЗрдВ?

рдореИрдВ рд╕рдордЭрддрд╛ рд╣реВрдВ рдХрд┐ рдирд┐рдпрдореЛрдВ рдХреЛ pegjs рдореЗрдВ рдлрд┐рд░ рд╕реЗ рдЬреЛрдбрд╝рдирд╛ рдЖрд╕рд╛рди рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рдкреНрд░рд╢рдВрд╕рдиреАрдп рд▓рдХреНрд╖реНрдп рдирд╣реАрдВ рд╣реИред

рдЕрд░реЗ рдпрд╛рд░, рдлреНрд░реА рд░рд┐рд╕реНрдкрд╛рдВрд╕ рд╕реЗрдХреНрд╢рди! рдореЗрд░реЗ рдкрд╛рд╕ рдХрд╣рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдХреБрдЫ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд▓рдВрдмрд╛рдИ рдХреЗ рд▓рд┐рдП рдЦреЗрдж рд╣реИред

1) рдЯреАрдПрд▓; рдбреАрдЖрд░ рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП, рдЕрдЧрд░ рдореИрдВ рдХреЛрдИ рдЦреВрдВрдЯреА рддрддреНрд╡ рдЬреЛрдбрд╝ рд╕рдХрддрд╛ рд╣реВрдВ, рддреЛ рдореИрдВ рдЪрд╛рд╣рддрд╛ рдерд╛, рдореИрдВ рдЗрд╕реЗ рдЗрд╕ рддрд░рд╣ рд▓рд┐рдЦреВрдВрдЧрд╛

рд╣реЗрдбрд░_рдлрд╝реАрд▓реНрдб
= рдлрд╝реАрд▓реНрдб_рдирд╛рдо ":" рдлрд╝реАрд▓реНрдб_рд╡реИрд▓реНрдпреВ

рдЦрд╛рд▓реА рдЬрдЧрд╣ (рдЗрдЧреНрдиреЛрд░)
= [рдЯреА]+

рдореИрдВ рдЬреЛ рдЬреЛрдбрд╝реВрдВрдЧрд╛ рд╡рд╣ рдПрдХ рд╡рд┐рдХрд▓реНрдк рдЕрдиреБрднрд╛рдЧ рд╣реИ рдЬрд┐рд╕реЗ рдХрд┐рд╕реА рднреА рдЙрддреНрдкрд╛рджрди рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ

http-bis рднрд╛рд╖рд╛ рдЗрд╕ рдкреБрдирд░реНрд▓реЗрдЦрди рджреНрд╡рд╛рд░рд╛ рд╕реАрдорд┐рдд рдирд╣реАрдВ рд╣реЛрдЧреА (рджреЗрдЦреЗрдВ рдкрд░рд┐рд╢рд┐рд╖реНрдЯ a)ред

2) рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд # рдХреЗ рд╕рд╛рде рдореЗрд░реА рд╕рдорд╕реНрдпрд╛

рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдПрдХреНрд╕рдЪреЗрдВрдЬ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдЬрд┐рд╕рд╕реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдкрд╛рд░реНрд╕рд░ рдкрд░рд┐рднрд╛рд╖рд╛ рдХреЛ рдПрдХ рдЧреБрдЪреНрдЫрд╛ рд╕реЗ рднрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ
рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рднрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЗ рд╕рд╛рде рдЧреИрд░ рдЯрд░реНрдорд┐рдирд▓реЛрдВ (рдЖрдорддреМрд░ рдкрд░ рд╡реНрд╣рд╛рдЗрдЯрд╕реНрдкреЗрд╕/рд╕реАрдорд╛рдВрдХрдХ) рдХреЛ рддреНрдпрд╛рдЧреЗрдВ
"рдпрд╣рд╛рдВ рд╡рд░реНрдгреЛрдВ рдХреЛ рддреНрдпрд╛рдЧрд╛ рдирд╣реАрдВ рдЬрд╛рддрд╛" рдореЗрдЯрд╛-рд╡рд░реНрдгреЛрдВ рдХреЗ рд╕рдореВрд╣ рдХреЗ рд╕рд╛рде рдкрд╛рд░реНрд╕рд░ рдкрд░рд┐рднрд╛рд╖рд╛
рдЕрдирд╛рд╡рд╢реНрдпрдХ рд░реВрдк рд╕реЗред рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЗрд╕рдХреА рдШрдЯрдирд╛рдПрдВ рдХрдо рд╣реЛрдВрдЧреАред рдпрд╣ рджреБрд░реНрд▓рдн рдорд╛рдорд▓рд╛ рд╣реИ рдЬрдм
рд▓реЛрдЧ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕реАрдорд╛рдВрдХрдХ рдХрд╛ рдЙрдкрднреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЙрдирдХреЗ рд╕рд╛рде рдХреБрдЫ рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдЬреИрд╕реЗ рдореИрдВ рдЯрд┐рдкреНрдкрдгреА рдХрд░рддрд╛ рд╣реВрдВ

рдкрд░рд┐рд╢рд┐рд╖реНрдЯ рдП, HTTP-рдмреАрдЖрдИрдПрд╕ рдЙрди рдШрдЯрдирд╛рдУрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдирд╣реАрдВ рд╣реИ, рдмрд╕ рдмреБрд░реА рддрд░рд╣ рд╕реЗ рдкреНрд░рд▓реЗрдЦрд┐рдд рд╣реИред

3) рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдкрд╛рд░реНрд╕рд░ рд░рд╛рдЬреНрдп

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

рдЙрддреНрдкрд╛рджрди 1 (рд░рд╛рдЬреНрдп == 1)
= рд╕рд╛рдорд╛рди

рдЙрддреНрдкрд╛рджрди 2 (рд░рд╛рдЬреНрдп == 2)
= рд╕рд╛рдорд╛рди

рдЙрддреНрдкрд╛рджрди3
= рд╕рд╛рдорд╛рди {рд░рд╛рдЬреНрдп = 1}

рдЙрддреНрдкрд╛рджрди4
= рд╕рд╛рдорд╛рди {рд░рд╛рдЬреНрдп = 2}

рджреВрд╕рд░реЗ рд╢рдмреНрджреЛрдВ рдореЗрдВ, рд▓реЗрдХреНрд╕/рд╡рд╛рдИрдПрд╕реАрд╕реА рдХреА рддрд░рд╣ рд╣реА рдпрд╣ рд╕рдВрднрд╡ рд╣реИ рдХрд┐ рдкреНрд░реЛрдбрдХреНрд╢рдВрд╕ рдХреЗрд╡рд▓ рдЙрдкрд▓рдмреНрдз рд╣реЛрдВ

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

4) рдЕрдзрд┐рдХ рд╡рд┐рдХрд▓реНрдк

рдпрд╛ рдЖрдк рдЗрд╕реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд▓рд┐рдП рдЖрд╕рд╛рди рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рджреВрд╕рд░реЗ рдХреЗ рд╕рд╛рде рдкрд╛рдардХ рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рд╕реНрдкрд╖реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ
рд╡рд┐рдХрд▓реНрдк

рдЙрддреНрдкрд╛рджрди (рдбреЛрдВрдЯрд┐рдЧреНрдиреЛрд░)
= рд╕рд╛рдорд╛рди

рдЬреЛ рдкрд╛рд░реНрд╕рд░ рдХреЛ рдЪрд┐рд╣реНрдирд┐рдд рдХрд┐рдП рдЧрдП рдЯреЛрдХрди рдХреЛ рд╣рдЯрд╛рдиреЗ рдХреА рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛
рддреНрдпрд╛рдЧ рдХреЗ рд░реВрдк рдореЗрдВ рд▓реЗрдХрд┐рди рдХреЗрд╡рд▓ рдЙрд╕ рдПрдХ рдЙрддреНрдкрд╛рджрди рдХреЗ рд▓рд┐рдПред рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ 3 рдЬреИрд╕рд╛ рд╣реА рд╣реИ, рдмрд╕ рдПрдХ рдЖрд╕рд╛рди
рдкрдврд╝рдирд╛ред рдпрд╣ # рдкреНрд░рд╕реНрддрд╛рд╡ рд╕реЗ рдХрдо рд▓рдЪреАрд▓рд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╛ рддреЛ рдПрдХ рдЙрддреНрдкрд╛рджрди рд╕рднреА рдХреЛ рдЕрдирджреЗрдЦрд╛ рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ

рдпрд╛ рдХреЛрдИ рдЙрдкреЗрдХреНрд╖рд╛ рдирд╣реАрдВ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдЕрддрд┐рд░рд┐рдХреНрдд рд▓рдЪреАрд▓реЗрдкрди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

5) getNextToken рдореЗрдВ рдПрдХ рдкреИрд░рд╛рдореАрдЯрд░ рдЬреЛрдбрд╝рдирд╛ () рд╕рдВрджрд░реНрдн рд╕рдВрд╡реЗрджрдирд╢реАрд▓рддрд╛ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╕рдм рдиреАрдЪреЗ рдЖрддрд╛ рд╣реИ (рдореИрдВ рдпрд╣рд╛рдБ рдХреБрдЫ рдзрд╛рд░рдгрд╛рдПрдБ рдмрдирд╛ рд░рд╣рд╛ рд╣реВрдБ) рд╡рд░реНрддрдорд╛рди рдореЗрдВ,
рдкрд╛рд░реНрд╕рд░ рднрд╛рдЧ getNextToken (рдЗрдирдкреБрдЯ) рдХреЛ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рдЬреЛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рд╡рд╣ рд╣реИ a

рдЗрд╕рдХреЗ рд▓рд┐рдП рдкреИрд░рд╛рдореАрдЯрд░ getNextToken (рдЗрдирдкреБрдЯ, рд╡рд┐рдХрд▓реНрдк)ред

рдкрд░рд┐рд╢рд┐рд╖реНрдЯ a) рд╡рд╣ HTTP-bis spec

рдареАрдХ рд╣реИ рдореИрдВрдиреЗ рдХреБрдЫ рдкрдврд╝рд╛ рд╣реИ рд▓реЗрдХрд┐рди рдпрд╣ рд╕рдм рдирд╣реАрдВ рдкрдврд╝рд╛ рд╣реИ

рд╣рд╛рдЗрдкрд░рдЯреЗрдХреНрд╕реНрдЯ рдЯреНрд░рд╛рдВрд╕рдлрд░ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ (HTTP / 1.1): рд╕рдВрджреЗрд╢ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдФрд░ рд░реВрдЯрд┐рдВрдЧ
рдбреНрд░рд╛рдлреНрдЯ-рдЖрдИрдИрдЯреАрдПрдл-httpbis-p1-рдореИрд╕реЗрдЬрд┐рдВрдЧ-26

рдЬрд┐рд╕ рддрд░рд╣ рд╕реЗ рдЙрдиреНрд╣реЛрдВрдиреЗ рдЕрдкрдиреЗ рд╡реНрдпрд╛рдХрд░рдг рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рд╣реИ, рдореБрдЭреЗ рд╡рд╣ рдкрд╕рдВрдж рдирд╣реАрдВ рд╣реИред рдореИрдВ рдЗрдирдкреБрдЯ рдХреЛ рдмрджрд▓рдиреЗ рдХрд╛ рд╕реБрдЭрд╛рд╡ рдирд╣реАрдВ рджреЗрддрд╛ it
рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВрдиреЗ рдЗрд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реЛрдЧрд╛ рдЬреИрд╕рд╛ рдЙрдиреНрд╣реЛрдВрдиреЗ рдХрд┐рдпрд╛ рдерд╛ред рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рдореБрдЭреЗ рдкрд╕рдВрдж рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЙрдирдХреЗ рдкрд╛рд╕ рдХреНрдпреЛрдВ рд╣реИ
рдкрд░рд┐рднрд╛рд╖рд┐рдд OWS рдФрд░ RWS рдФрд░ BWS рдЬреЛ рд╕рднреА рдмрд┐рд▓реНрдХреБрд▓ рд╕рдорд╛рди рд╡рд░реНрдг рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рд╕рдорд╛рди рд╣реИрдВ
рд▓реЗрдХрд┐рди рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╕рдВрджрд░реНрднреЛрдВ рдореЗрдВред рдЙрдиреНрд╣реЛрдВрдиреЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рд╣реИ

рдУрдбрдмреНрд▓реНрдпреВрдПрд╕ ::== (рдПрд╕рдкреА | рдПрдЪрдЯреАрдПрдмреА)*
рдЖрд░рдбрдмреНрд▓реНрдпреВрдПрд╕ ::== (рдПрд╕рдкреА | рдПрдЪрдЯреАрдПрдмреА)+
рдмреАрдбрдмреНрд▓реНрдпреВрдПрд╕ ::== рдУрдбрдмреНрд▓реНрдпреВрдПрд╕

рдЬреЛ рд╕рд┐рд░реНрдл рдЯреИрдм рдФрд░ рд░рд┐рдХреНрдд рд╕реНрдерд╛рди рдХреА рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рд╣реИ

рдмрд┐рдирд╛ рдХрд┐рд╕реА рдЕрдЪреНрдЫреЗ рдХрд╛рд░рдг рдХреЗред рдЙрдиреНрд╣реЛрдВрдиреЗ рднрд╛рд╖рд╛ рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░рдирд╛ рдХрдард┐рди рдмрдирд╛ рджрд┐рдпрд╛ рд╣реИ - рд╢рд╛рдмреНрджрд┐рдХ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ
рдЗрд╕рдХреЗ рд╕рдВрджрд░реНрдн рдХреЛ рдЯреНрд░реИрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП тАФ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдРрд╕рд╛ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рдереАред

рдЙрдиреНрд╣реЛрдВрдиреЗ OWS рдХреЛ "рд╡реИрдХрд▓реНрдкрд┐рдХ рд╕рдлреЗрдж рд╕реНрдерд╛рди" рдХреЗ рд░реВрдк рдореЗрдВ BWS рдХреЛ "рдЦрд░рд╛рдм рдЦрд╛рд▓реА рд╕реНрдерд╛рди" рдпрд╛ рдЕрдиреНрдпрдерд╛ рд╡реИрдХрд▓реНрдкрд┐рдХ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рд╣реИ
рд╡реНрд╣рд╛рдЗрдЯрд╕реНрдкреЗрд╕ рд▓реЗрдХрд┐рди "рдЦрд░рд╛рдм" рд╕рдВрджрд░реНрдн рдореЗрдВ - рдЬрд╣рд╛рдВ рдпрд╣ рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ рд╣реИ - рдФрд░ рдЖрд░рдбрдмреНрд▓реНрдпреВрдПрд╕ рдХреЛ рд╡реНрд╣рд╛рдЗрдЯрд╕реНрдкреЗрд╕ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЬрд╣рд╛рдВ рдпрд╣ рд╣реИ
рдЯреЛрдХрди рдкрд░рд┐рд╕реАрдорди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реИред рдЗрд╕ рд╡реНрд╣рд╛рдЗрдЯрд╕реНрдкреЗрд╕ рдХрд╛ рдХрд╣реАрдВ рднреА рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рд╕рд┐рд╡рд╛рдп рдЗрд╕рдХреЗ рдХрд┐ рд╢рд╛рдпрдж рдПрдХ рдкрд╛рд░реНрд╕рд░ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ
рдЪреЗрддрд╛рд╡рдиреА рдЕрдЧрд░ рдпрд╣ рдмреАрдбрдмреНрд▓реНрдпреВрдПрд╕ рд╕реЗ рдореЗрд▓ рдЦрд╛рддреА рд╣реИ ("рдЕрдирд╛рд╡рд╢реНрдпрдХ рдЕрдиреБрдЧрд╛рдореА рд╡реНрд╣рд╛рдЗрдЯрд╕реНрдкреЗрд╕ рдХрд╛ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ" рдпрд╛ рдХреБрдЫ рдРрд╕реЗ) рдЬреЛ рд╕рднреА рд╣реИ
рд╕реАрдорд╛рдВрдХрдХ рд╡реИрд╕реЗ рднреА рдХрд░рддреЗ рд╣реИрдВред

рдЙрдирдХреА рдХрд▓реНрдкрдирд╛ рдореЗрдВ, рдХреЗрд╡рд▓ RWS рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдиреЗ рд╡рд╛рд▓рд╛ рд╕реНрдерд╛рди рдпрд╣рд╛рдБ рд╣реИ

рд╡рд╛рдпрд╛ = 1#(рдкреНрд░рд╛рдкреНрдд рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдЖрд░рдбрдмреНрд▓реНрдпреВрдПрд╕ рдкреНрд░рд╛рдкреНрдд-рджреНрд╡рд╛рд░рд╛ [рдЖрд░рдбрдмреНрд▓реНрдпреВрдПрд╕ рдЯрд┐рдкреНрдкрдгреА])

 received-protocol = [ protocol-name "/" ] protocol-version
                     ; see Section 6.7
 received-by       = ( uri-host [ ":" port ] ) / pseudonym
 pseudonym         = token

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

24 рдЕрдкреНрд░реИрд▓ 2014 рдХреЛ рджреЛрдкрд╣рд░ 1:23 рдмрдЬреЗ, рдЖрдВрджреНрд░реЗрдИ рдиреЗрдХреБрд▓рд╛рдК рдиреЛрдЯрд┐рдлрд┐рдХреЗрд╢рди @github.com рдиреЗ рд▓рд┐рдЦрд╛:

@waTeim @rioki рдореЗрд░реЗ рд╕реБрдЭрд╛рд╡ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдереЛрдбрд╝рд╛ рднреВрд▓ рдЬрд╛рдУред

рд╣рд╛рде, рдЗрд╕ рдирд┐рдпрдо рдХреЛ рд▓реЗ рд▓реЛред рдпрджрд┐ рдЖрдк OWS рдХреЛ рд╣рдЯрд╛рдХрд░ рдирд┐рдпрдо рдХреЗ рд╡реНрдпрд╛рдХрд░рдг рдХреЛ рд╕рд░рд▓ рдмрдирд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк PEGjs рдХреЛ рдлрд╝реАрд▓реНрдб_рдирд╛рдо рдФрд░ :? рдХреЗ рдмреАрдЪ OWS рдХреЛ рдЕрдиреБрдорддрд┐ рди рджреЗрдиреЗ рдХрд╛ рдирд┐рд░реНрджреЗрд╢ рдХреИрд╕реЗ рджреЗрдВрдЧреЗ?

-
рдЗрд╕ рдИрдореЗрд▓ рдХрд╛ рд╕реАрдзреЗ рдЙрддреНрддрд░ рджреЗрдВ рдпрд╛ рдЗрд╕реЗ GitHub рдкрд░ рджреЗрдЦреЗрдВред

@waTeim рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдЗрд╕рдХреЗ рд╕рд╛рде рдУрд╡рд░рдмреЛрд░реНрдб рдЬрд╛ рд░рд╣реЗ рд╣реИрдВред рдореИрдВрдиреЗ рдХрд╛рдлреА рдХрдо рдкрд╛рд░реНрд╕рд░реНрд╕ рд▓рд┐рдЦреЗ рд╣реИрдВ рдФрд░ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд▓реЗрдХреНрд╕рд░ рдХрд╣рддрд╛ рд╣реИ рдХрд┐ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХрднреА рднреА рдЗрд╕ рддрд░рд╣ рдЙрдкрдпреЛрдЧреА рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред рдЬреНрдпрд╛рджрд╛рддрд░ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдореИрдВрдиреЗ рдЙрдиреНрд╣реЗрдВ рджреЗрдЦрд╛ рдерд╛ рдЬрд╣рд╛рдВ рд▓реЗрдХреНрд╕рд░ рдиреЗ рдмреНрд▓реЙрдХ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХрд╛ рдЙрдкрднреЛрдЧ рдХрд┐рдпрд╛ рдерд╛ рдФрд░ рд▓реЗрдХреНрд╕рд░ рдХреЛ "рдмреНрд▓реЙрдХ рдХрдореЗрдВрдЯ рдореЛрдб" рдореЗрдВ рд░рдЦрдирд╛ "рд╕рд░рд▓" рдерд╛ рдФрд░ рдЯрд┐рдкреНрдкрдгреА (рдФрд░ рдЧрд┐рдирддреА рд▓рд╛рдЗрдиреЛрдВ) рдХрд╛ рдЙрдкрднреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП ├╝ber рдкреИрдЯрд░реНрди рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рд╕рд░рд▓ рдкреИрдЯрд░реНрди рд▓рд┐рдЦрдирд╛ рдерд╛ред

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

рд╡реНрдпрд╛рдХрд░рдг рд▓рд┐рдЦрддреЗ рд╕рдордп рдЖрдк рдореВрд▓ рд░реВрдк рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдХреМрди рд╕реА рдкреНрд░рд╕реНрддреБрддрд┐рдпреЛрдВ рдХреЛ рдкрд╛рд░реНрд╕ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдХреНрдпрд╛ рдЫреАрдирд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред @andreineculau рдХреЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рджреЛ рд╡рд┐рдХрд▓реНрдк рд╣реИрдВ, рдпрд╛ рддреЛ рдЖрдк рдкрд╛рд░реНрд╕рд░ рдореЗрдВ рд╕рдлреЗрдж рд░рд┐рдХреНрдд рд╕реНрдерд╛рди рдХреЛ рд╕рдВрднрд╛рд▓рддреЗ рд╣реИрдВ рдпрд╛ рдЖрдк рдЯреЛрдХрди рдХреЗ рдЕрдиреБрдЧрд╛рдореА ":" рднрд╛рдЧ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВред ( [a-zA-Z0-9!#$%&'+-.^_|~]+ ":" )ред

рдореИрдВ рдПрдХ рд╢реНрд╡реЗрддрд╕реВрдЪреА рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдореЗрдВ рд╕рдорд╕реНрдпрд╛ рдХреЛ рдмрджрд▓рдиреЗ рдХрд╛ рд╕реБрдЭрд╛рд╡ рджреЗ рд╕рдХрддрд╛ рд╣реВрдВ- рдореИрдВ рдмреНрд▓реИрдХрд▓рд┐рд╕реНрдЯ рдХреЗ рдмрдЬрд╛рдп рдХрд┐рди рд╣рд┐рд╕реНрд╕реЛрдВ рдХреЛ рдХреИрдкреНрдЪрд░ рдФрд░ рдмрджрд▓рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред рд╣рд╛рд▓рд╛рдВрдХрд┐ рд╡реНрд╣реЙрдЯреНрд╕рдПрдк рд╡рд░реНрддрдорд╛рди рдХреИрдкреНрдЪрд░ рд╕рд┐рд╕реНрдЯрдо рдХреЗ рд╕рд╛рде рдПрдХ рд╕рдорд╕реНрдпрд╛ рд╣реИ, рдирд┐рдпрдореЛрдВ рдХрд╛ рдиреЗрд╕реНрдЯрд┐рдВрдЧ рджреВрд╕рд░рд╛ рд╣реИред рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рдЕрдВрдХ #66 рдореЗрдВ

рдХреИрдкреНрдЪрд░ рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ LPeg рдмрдирд╛рдо PEG.js рдХреЗ рд╕рд░рд▓ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдЕрдВрдХ #66 рдореЗрдВ рдореЗрд░реА рдЯрд┐рдкреНрдкрдгреА рджреЗрдЦреЗрдВред рд╣рд╛рд▓рд╛рдВрдХрд┐ рдирд╛рдо рдереЛрдбрд╝реЗ рдЧреВрдврд╝ рд╣реИрдВ, рдПрд▓рдкреАрдИрдЬреА рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рдХреЗ рдХреИрдкреНрдЪрд░ рдЕрдиреБрднрд╛рдЧ рдХреЛ рдЙрди рд╡рд┐рднрд┐рдиреНрди рддрд░реАрдХреЛрдВ рдХреЗ рд▓рд┐рдП рджреЗрдЦреЗрдВ рдЬрд┐рдирд╕реЗ рдЖрдк рдХрд┐рд╕реА рджрд┐рдП рдЧрдП рдЙрддреНрдкрд╛рджрди (рдпрд╛ рдЙрд╕рдХреЗ рд╣рд┐рд╕реНрд╕реЗ) рдХреЛ рдХреИрдкреНрдЪрд░ рдпрд╛ рд░реВрдкрд╛рдВрддрд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

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

{
  var strip = require('./strip-ast');
}

рдЗрд╕реЗ рд╕реБрдзрд╛рд░рдиреЗ рдХреЗ рджреЛ рддрд░реАрдХреЗ:

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

@ Richb-hanover рдЖрдкрдХреА ASN.1 рдкрд░рд┐рднрд╛рд╖рд╛ рдкрд╛рд░реНрд╕рд░ рдкреНрд░рдпрд╛рд╕ рдХрд╣рд╛рдВ рд╕реЗ рдЖрдП?

@atesgoral - рдореИрдВ рдЬрдорд╛рдирдд рдкрд░ рдЫреВрдЯ рдЧрдпрд╛ред рдореБрдЭреЗ "рдЕрд╕рд▓реА рдкрд╛рд░реНрд╕рд░" рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рдереА - рдореБрдЭреЗ рдХреЗрд╡рд▓ рд▓рдХреНрд╖реНрдп рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдХреБрдЫ рдирд╛рдорд┐рдд рддрддреНрд╡реЛрдВ рдХреЛ рдЕрд▓рдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдереАред

рддреЛ рдореИрдВрдиреЗ рд╡рд╣реА рдХрд┐рдпрд╛ рдЬреЛ рдХреЛрдИ рднреА рдбрд░рдкреЛрдХ рдЖрджрдореА рдХрд░реЗрдЧрд╛ - рд░реЗрдЧреБрд▓рд░ рдПрдХреНрд╕рдкреНрд░реЗрд╢рди рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ред (рдФрд░ рдлрд┐рд░ рдореБрдЭреЗ рджреЛ рд╕рдорд╕реНрдпрд╛рдПрдВ рдереАрдВ :-)

рд▓реЗрдХрд┐рди рдЗрд╕рдиреЗ рдЪрд╛рд▓ рдЪрд▓реА, рдЗрд╕рд▓рд┐рдП рдореИрдВ рдЕрдЧрд▓реА рдЪреБрдиреМрддреА рдХреЗ рд▓рд┐рдП рдЖрдЧреЗ рдмрдврд╝рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдерд╛ред рдЖрдкрдХреА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рд╢реБрднрдХрд╛рдордирд╛рдПрдБ!

рд╢реЗрд╡рд░реЛрдЯреЗрди рдФрд░ рдЗрд╕рдХреЗ рд╕реНрдХрд┐рдк рд╡рд┐рдХрд▓реНрдк рдкрд░ рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓рдиреЗ рдХреЗ рдмрд╛рдж, рдРрд╕рд╛ рдХреБрдЫ рдмреЗрд╣рдж рд╡рд╛рдВрдЫрдиреАрдп рд╣реИред

рдЕрдХреНрд╕рд░ рд╣рдо рдЦреБрдж рдХреЛ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рд▓рд┐рдЦрддреЗ рд╣реБрдП рдкрд╛рддреЗ рд╣реИрдВ:

Pattern = head:PatternPart tail:( WS "," WS PatternPart )*
{
  return {
    type: 'pattern',
    elements: buildList( head, tail, 3 )
  };
}

рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ рдЕрдЧрд░ рд╣рдо рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рдЗрд╕реЗ рд▓рд┐рдЦ рд╕рдХреЗрдВ:

WS "whitespace" = [ \t\n\r] { return '@<strong i="11">@skipped</strong>' }

IgnoredComma = "," { return '@<strong i="12">@skipped</strong>' }

Pattern = head:PatternPart tail:( WS IgnoredComma WS PatternPart )*
{
  return {
    type: 'pattern',
    elements: [head].concat(tail)
  };
}

@ рд░рд┐рдЪрдм-рд╣рдиреЛрд╡рд░, рдФрд░ рдХреЛрдИ рднреА рдЬреЛ рд╕рдорд╛рди рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреА рддрд▓рд╛рд╢ рдореЗрдВ рдпрд╣рд╛рдВ рдЖрдпрд╛, рдореИрдВрдиреЗ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдкрд╛рд░реНрд╕рд░ рднреА рд▓рд┐рдЦрдирд╛ рд╕рдорд╛рдкреНрдд рдХрд░ рджрд┐рдпрд╛: https://www.npmjs.com/package/asn1exp рдФрд░ https://www.npmjsред рдХреЙрдо/рдкреИрдХреЗрдЬ/asn1-рдкреЗрдбрд╝

es6 symbol рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рд╕реНрдХрд┐рдк рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдЕрдкреЗрдХреНрд╖рд╛рдХреГрдд рдЖрд╕рд╛рди рд╣реЛрдЧрд╛, рдпрд╛ рд╢рд╛рдпрдж рдЕрдзрд┐рдХ рдЯрд┐рдХрд╛рдК рд░реВрдк рд╕реЗ рдкрд╛рд░реНрд╕рд░ рдХреЛ рдкрд╛рд░реНрд╕ рд╕рдордп рдкрд░ рдПрдХ рд╡рд┐рдзреЗрдп рдкрд╛рд░рд┐рдд рдХрд░рдХреЗ (рдореИрдВ рдмрд╛рдж рд╡рд╛рд▓рд╛ рд╡рд┐рдХрд▓реНрдк рдкрд╕рдВрдж рдХрд░рддрд╛ рд╣реВрдВ)

рдмрд╕ рдЗрд╕ рдкрд░ рднреА рдареЛрдХрд░ рдЦрд╛рдИред
рдкреАрдИрдЬреА.рдЬреЗрдПрд╕ рдХреЗ рдЕрдВрджрд░реВрдиреА рд╣рд┐рд╕реНрд╕реЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рднреА рдирд╣реАрдВ рдЬрд╛рдирддреЗ, рд▓реЗрдореЗ рдиреЗ рд╡рд╣рд╛рдВ рдПрдХ рд╣рдбреНрдбреА рдлреЗрдВрдХ рджреА ...

рдЬрдм рд╣рдо рдХреЛрдИ рдирд┐рдпрдо рд▓рд┐рдЦрддреЗ рд╣реИрдВ, рддреЛ рдЙрд╕рдХреЗ рдЕрдВрдд рдореЗрдВ рд╣рдо рд░рд┐рдЯрд░реНрди рдмреНрд▓реЙрдХ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред
рдЙрд╕ рдмреНрд▓реЙрдХ рдореЗрдВ, рд╣рдо text() рдФрд░ location() рдЬреИрд╕реА рдЪреАрдЬрд╝реЛрдВ рдХреЛ рдХреЙрд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпреЗ рдЖрдВрддрд░рд┐рдХ рдХрд╛рд░реНрдп рд╣реИрдВред

рдХреЛрдб рдореЗрдВ рдХрд╣реАрдВ рди рдХрд╣реАрдВ рдЙрд╕ рдмреНрд▓реЙрдХ рдХрд╛ рд░рд┐рдЯрд░реНрди рд╡реИрд▓реНрдпреВ рдЖрдЙрдЯрдкреБрдЯ рд╕реНрдЯреНрд░реАрдо рдореЗрдВ рдЪрд▓рд╛ рдЬрд╛рддрд╛ рд╣реИред

рддреЛ PEG.js рдореЗрдВ рдХреНрдпрд╛ рдмрджрд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА рдпрджрд┐ рдореИрдВ рдХрд┐рд╕реА рдирд┐рдпрдо рджреНрд╡рд╛рд░рд╛ рд▓реМрдЯрд╛рдП рдЧрдП рдорд╛рди рдХреЛ рдЫреЛрдбрд╝рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдпрджрд┐ рд╡рд╣ рдорд╛рди skip рд╕реНрдерд╛рдиреАрдп рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреА рд╡рд╛рдкрд╕реА рд╣реИ?

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП comment = "//" space ([^\n])* newline { return skip() }

рдЬреИрд╕рд╛ рдКрдкрд░ рдмрддрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЫреЛрдбрд╝реЗрдВ() рдПрдХ рдкреНрд░рддреАрдХ рд╡рд╛рдкрд╕ рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рдмрд╛рдж рдореЗрдВ рдХрд╣реАрдВ рдХреЛрдб рджреНрд╡рд╛рд░рд╛ рдЪреЗрдХ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдХреБрдЫ рдРрд╕рд╛ рдЬреЛ рд▓рдЬрд╝рд╛рдХреА рдиреЗ рдХрд╣рд╛, рд▓реЗрдХрд┐рди рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рд▓рд┐рдП рдЖрдВрддрд░рд┐рдХ

рдореИрдВ рдЖрдкрдХрд╛ рдкреНрд░рд╢реНрди рдирд╣реАрдВ рд╕рдордЭрддрд╛ред рдХреНрдпрд╛ рдЖрдк рдХреБрдЫ рдкрд░рд┐рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдореЗрдВ рдХрд┐рд╕реА рдирд┐рдпрдо рдХреЛ рд╡рд┐рдлрд▓ рдХрд░рдиреЗ рдХрд╛ рддрд░реАрдХрд╛ рдвреВрдВрдв рд░рд╣реЗ рд╣реИрдВ? &{...} рдпрд╛ !{...} ред рдЕрдиреНрдпрдерд╛ рдмрд╕ comment рдирд┐рдпрдо рдХреЗ рджрд┐рдП рдЧрдП рдорд╛рди рдХрд╛ рдЙрдкрдпреЛрдЧ рди рдХрд░реЗрдВ:

seq = comment r:another_rule { return r; };
choice = (comment / another_rule) { <you need to decide what to return instead of "comment" result> };

рдЕрдЧрд░ рдпрд╣ рдХрд┐рд╕реА рдХреА рдорджрдж рдХрд░рддрд╛ рд╣реИ, рддреЛ рдореИрдВ рдЕрдкрдиреЗ рд╢реАрд░реНрд╖-рд╕реНрддрд░реАрдп рдирд┐рдпрдо рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреА рд╕рд░рдгреА рдХреЛ рдлрд╝рд┐рд▓реНрдЯрд░ рдХрд░рдХреЗ рд╡реНрд╣рд╛рдЗрдЯрд╕реНрдкреЗрд╕ рдХреЛ рдЕрдирджреЗрдЦрд╛ рдХрд░рддрд╛ рд╣реВрдВред

рдЙрджрд╛рд╣рд░рдг:

    = prog:expression+ {return prog.filter(a => a)}

expression
    = float
    / number
    / whitespace

float
    = digits:(number"."number) {return parseFloat(digits.join(""),10)}

number 
    = digits:digit+ {return parseInt(digits.join(""),10)}

digit 
    = [0-9]

whitespace
    = [ \t\r\n] {return undefined}

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

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

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

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

pegjs рдХреЗ рд╡рд░реНрддрдорд╛рди HEAD рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдореБрдЭреЗ рдЬреЛ рдЪреАрдЬреЗрдВ рдкрд╕рдВрдж рд╣реИрдВ рдЙрдирдореЗрдВ рд╕реЗ рдПрдХ рд╣реИ рд▓реЗрдмрд▓ рдмрдирд╛рдиреЗ рдФрд░ рд░рд┐рдЯрд░реНрди рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рдХрд┐рдП рдмрд┐рдирд╛ рдлрд╝реАрд▓реНрдб рдЪреБрдирдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕рдХрд╛ (рдЕрдирд┐рдпрдВрддреНрд░рд┐рдд) рд╕рдорд░реНрдердиред рдпрд╣ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦ рд░рд╣рд╛ рд╣реИ:

foo = <strong i="6">@bar</strong> _ <strong i="7">@baz</strong>
bar = $"bar"i
baz = $"baz"i
_ = " "*
parse('barbaz') // returns [ 'bar', 'baz' ]

рдореБрдЭреЗ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЗрд╕ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЗ рдХреЗ рд╕рд╛рде-рд╕рд╛рде рджреВрд╕рд░реЛрдВ рдХрд╛ рдПрдХ рд╕рдореВрд╣ рдХреЗ рд▓рд┐рдП рдЕрдЪреНрдЫрд╛, рд╕рд╛рдл, рд╕реНрдкрд╖реНрдЯ рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рджреЗрддрд╛ рд╣реИред

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

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

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

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

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

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

StoneCypher picture StoneCypher  ┬╖  6рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ