Pegjs: рдирдХрд▓реА рдЯрд╛рдЗрдкрдкреНрд░рддрд┐ рд╕рдорд░реНрдерди

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

рд╡рд┐рд╖рдп рд╡рд░реНрдЧ

  • [x] рдлрд╝реАрдЪрд░ рдЕрдиреБрд░реЛрдз

рд╡реБрддреЛ

рддреЛ, рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ #514 рд╕реЗ @pjmolina рдХреЗ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдкреНрд▓рдЧрдЗрди рдореЗрдВ рдмрд╣реБрдд рд╕реБрдВрджрд░ рд╣реВрдВред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЕрдВрдд рдореЗрдВ, рдпрд╣ all рд▓реМрдЯрд╛рддрд╛ рд╣реИред

рдореИрдВ рдЙрдореНрдореАрдж рдХрд░ рд░рд╣рд╛ рдерд╛ рдХрд┐ рдЖрдк рдореБрдЭреЗ рдзреЛрдЦрд╛ рджреЗрдиреЗ рдореЗрдВ рдорджрдж рдХрд░реЗрдВрдЧреЗред рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ parse/1 рдкрд░ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рд▓рд┐рдЦрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ, peg рд╕рд┐рдВрдЯреИрдХреНрд╕ рдореЗрдВ рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХреА рдЪреАрдЬрд╝ рдЬреЛрдбрд╝рдХрд░, рдЬреЛ рдХрд╣рддрд╛ рд╣реИ рдХрд┐ "рдЗрд╕реЗ parse/1 рдХрд╛ рд░рд┐рдЯрд░реНрди рдкреНрд░рдХрд╛рд░ рдмрдирд╛рдПрдВ," рдФрд░ рдпрджрд┐ рдХреЛрдИ рдЖрдЙрдЯ рдкреНрд░рдХрд╛рд░ рд╣реИ рддреЛ рддрд░реНрдХ рдореЗрдВ :string рдХреЛ рдЪрд┐рд╣реНрдирд┐рдд рдХрд░рдХреЗ рднреАред рдлрд┐рд░, рдЖрдкрдХреЛ рдЖрдЦрд┐рд░реА рд░рд┐рдЯрд░реНрди рд╡реИрд▓реНрдпреВ, рдФрд░ рд╡реЙрдпрд▓рд╛ рдХреЛ рдЕрдВрдзрд╛рдзреБрдВрдз рдЯрд╛рдЗрдк рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред

рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ (рдпрд╛ рдлреНрд▓реЛрдЯрд╛рдЗрдк) рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд▓рд┐рдП, рдпрд╣ рдирдХрд▓реА рд╣реЛрдиреЗ рдкрд░ рднреА рдЪреЗрдХрдмрд┐рд▓рд┐рдЯреА рдкрд░ рдЧрд╣рд░рд╛ рдкреНрд░рднрд╛рд╡ рдбрд╛рд▓реЗрдЧрд╛ред

рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдореБрдЭреЗ рдЖрдкрдХреЛ рдХрд┐рддрдиреЗ рдХреИрдкреБрдЪрд┐рдиреЛ рдореЗрд▓ рдХрд░рдиреЗ рд╣реЛрдВрдЧреЗ, рдФрд░ рдореИрдВ рдЙрдиреНрд╣реЗрдВ рдХрд┐рд╕ рдкрддреЗ рдкрд░ рднреЗрдЬреВрдВрдЧрд╛

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

рдирдорд╕реНрддреЗ! рдЗрд╕рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд, рдкреНрд▓рдЧрдЗрди ts-pegjs рдореЗрдВ рд╣рдордиреЗ рдЙрддреНрдкрд╛рджрди рдирд┐рдпрдореЛрдВ рдХреЗ рд▓рд┐рдП рд╡реИрдХрд▓реНрдкрд┐рдХ рдЖрдЙрдЯрдкреБрдЯ рдЯрд╛рдЗрдкрд┐рдВрдЧ рдХреЛ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рд╣реИред рдЕрдВрдХ 11 , рдкреАрдЖрд░ 16

рд╣рдордиреЗ рдЗрд╕реЗ returnTypes рд╡рд┐рдХрд▓реНрдк рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЬреЛрдбрд╝реЗ рдХреА рддрд╛рд▓рд┐рдХрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ "rule-name": "return-type" рдХрд┐рдпрд╛ред

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

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

рдореБрдЭреЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдХреА рддрд░рд╣ рд▓рд┐рдЦреЗ рдЬрд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ

function parse(input: string): MyType { ... }

(рдпрд╛ рдЬреЛ рдХреБрдЫ рднреА)

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

@ рдорд┐рдВрдЧреБрди - рдпрд╣ рджрд┐рд▓рдЪрд╕реНрдк рд╣реИ, рд▓реЗрдХрд┐рди рд╕рдордЭрдирд╛ рднреА рдмрд╣реБрдд рдореБрд╢реНрдХрд┐рд▓ рд╣реИ

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

(рдЕрдЬреАрдм рдХреНрд╖рдг рдЬрдм рдореБрдЭреЗ рд╕рдордЭ рдореЗрдВ рдЖрдпрд╛ рдХрд┐ @Mingun рд░реВрд╕реА рднреА рд╣реИред)

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

рдореИрдВ рдЗрдиреНрдлрд░реНрдиреВ рд╕рдорд░реНрдерди рдХреЗ рдмрдЬрд╛рдп рджреЗрдЦрдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреВрдВрдЧрд╛ред

@ polkovnikov-ph - рд╣рд╛рдБ, рд╡рд╣ рд╡рд┐рдХрд▓реНрдк рдореЗрд░реЗ рд╣рд╛рде рдореЗрдВ рдирд╣реАрдВ рд╣реИ, рдФрд░ рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, 1990 рдХреЗ рджрд╢рдХ рдХреЗ c++ рдЯреЗрдореНрдкрд▓реЗрдЯ рджреЗрд╡ рдХреЗ рд░реВрдк рдореЗрдВ, рдЯрд╛рдЗрдкрдкреНрд░рддрд┐ рдХреЗ рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢ рдореБрдЭреЗ рдбрд░рд╛рддреЗ рдирд╣реАрдВ рд╣реИрдВ

рд╡реИрд╕реЗ рднреА, рдореБрдЭреЗ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рдкрд╛рд░реНрд╕рд░реНрд╕ рдЬреЛрдбрд╝рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП, parse/1 рд╕реЗ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдПрдиреЛрдЯреЗрд╢рди рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдореЗрд░реЗ рд▓рд┐рдП рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ

рдЕрднреА рдореИрдВ рдЗрд╕реЗ рд╕рдХрд▓ рдорд╛рд╕реНрдЯрд░ рдкреНрд░рдХрд╛рд░ рдФрд░ рдХрд╛рд╕реНрдЯрд┐рдВрдЧ рдХреЗ рд╕рд╛рде рдХрд░ рд░рд╣рд╛ рд╣реВрдВред рдХрд╛рд╢ рдореИрдВ рдмреЗрд╣рддрд░ рдХрд░ рдкрд╛рддрд╛

image

рдирдорд╕реНрддреЗ! рдЗрд╕рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд, рдкреНрд▓рдЧрдЗрди ts-pegjs рдореЗрдВ рд╣рдордиреЗ рдЙрддреНрдкрд╛рджрди рдирд┐рдпрдореЛрдВ рдХреЗ рд▓рд┐рдП рд╡реИрдХрд▓реНрдкрд┐рдХ рдЖрдЙрдЯрдкреБрдЯ рдЯрд╛рдЗрдкрд┐рдВрдЧ рдХреЛ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рд╣реИред рдЕрдВрдХ 11 , рдкреАрдЖрд░ 16

рд╣рдордиреЗ рдЗрд╕реЗ returnTypes рд╡рд┐рдХрд▓реНрдк рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЬреЛрдбрд╝реЗ рдХреА рддрд╛рд▓рд┐рдХрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ "rule-name": "return-type" рдХрд┐рдпрд╛ред

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

#597 . рдореЗрдВ рд▓реЛрдЧ рдЕрднреА рднреА рдЗрд╕рдХреЗ рд▓рд┐рдП рдкреВрдЫ рд░рд╣реЗ рд╣реИрдВ

рдирдП рдЕрдиреБрд░рдХреНрд╖рдХ рдиреЗ .d.ts рдмрдирд╛рдпрд╛ рдФрд░ рд░рдЦрд╛, рдЗрд╕рд▓рд┐рдП рд╡рд╣ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЯрд╛рдЗрдкрдкреНрд░рддрд┐ рдХреЗ рд▓рд┐рдП рдЦреБрд▓рд╛ рд╣реИ

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

рдореЗрд░реЗ рдкрд╛рд╕ 0.11 рдХреЗ рдЦрд┐рд▓рд╛рдл рдПрдХ рдкреИрдЪ рддреИрдпрд╛рд░ рд╣реИ рд▓реЗрдХрд┐рди 0.11 рдХрд╛ рд╡рд┐рд▓рдп рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ, рдФрд░ 0.12 рдХреЗ рдЦрд┐рд▓рд╛рдл рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрд▓рдмреНрдз рдирд╣реАрдВ рд╣реИ

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

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

marek-baranowski picture marek-baranowski  ┬╖  6рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

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

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

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

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