Pegjs: * , + , рдФрд░ рдХреЗ рд▓рд┐рдП рдЧреИрд░ рд▓рд╛рд▓рдЪреА рдСрдкрд░реЗрдЯрд░реЛрдВ?

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

рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ рдРрд╕реА рднрд╛рд╖рд╛ рд╣реИ рдЬрд╣рд╛рдВ рдЙрд╕реА рдкреИрдЯрд░реНрди рдХреЗ рдмрд╛рд░-рдмрд╛рд░ рдЙрджрд╛рд╣рд░рдг рд╣реИрдВ рдЬрд╣рд╛рдВ рдореБрдЭреЗ рдХреЗрд╡рд▓ рдкрд╣рд▓реЗ рдкреНрд░рддреАрдХ рдХреА рдкрд░рд╡рд╛рд╣ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:

          system       OBJECT IDENTIFIER ::= { mib-2 1 }
          interfaces   OBJECT IDENTIFIER ::= { mib-2 2 }
          at           OBJECT IDENTIFIER ::= { mib-2 3 }
          ip           OBJECT IDENTIFIER ::= { mib-2 4 }
          icmp         OBJECT IDENTIFIER ::= { mib-2 5 }
          tcp          OBJECT IDENTIFIER ::= { mib-2 6 }
          udp          OBJECT IDENTIFIER ::= { mib-2 7 }
          egp          OBJECT IDENTIFIER ::= { mib-2 8 }

рдпрд╣ рд╕рд░рд▓ рдЙрджрд╛рд╣рд░рдг рдЗрд╕ рдкреИрдЯрд░реНрди рд╕реЗ рдореЗрд▓ рдЦрд╛ рд╕рдХрддрд╛ рд╣реИ (рдЬрд╣рд╛рдВ _ рд╡реНрд╣рд╛рдЗрдЯрд╕реНрдкреЗрд╕ рд╣реИ):

identifier _ "OBJECT IDENTIFIER" _ "::=" _ "{" _ identifier _ number _ "}"

рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдпрд╣ рдЗрддрдирд╛ рдмрдбрд╝рд╛ рд╕реМрджрд╛ рдирд╣реАрдВ рд╣реИ (рдореИрдВрдиреЗ рдкрд╣рд▓реЗ рд╣реА рдкреИрдЯрд░реНрди рдЯрд╛рдЗрдк рдХрд┐рдпрд╛ рд╣реИ :-) рд▓реЗрдХрд┐рди рднрд╛рд╖рд╛ рдореЗрдВ рдЕрдиреНрдп рдмрдбрд╝реЗ рдмрд╛рд▓реЛрдВ рд╡рд╛рд▓реА рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХрд╛ рдПрдХ рд╕реЗрдЯ рд╣реИ рдЬреЛ рдкреВрд░реНрдг рдкрд╛рд░реНрд╕рд┐рдВрдЧ рдХреА рдЧрд╛рд░рдВрдЯреА рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИ (рдореИрдВ рдХреЗрд╡рд▓ рдкреНрд░рддреНрдпреЗрдХ рдкрдВрдХреНрддрд┐ рдкрд░ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдореЗрд░реЗ рдорди рдореЗрдВ рдЬреЛ рдХрд╛рдо рд╣реИ рдХрд░реЛ)ред

рдореИрдВ рдЗрд╕ рдкреИрдЯрд░реНрди рдХреА рддрд░рд╣ рдХреБрдЫ рдЯрд╛рдЗрдк рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ:

identifier _ "OBJECT IDENTIFIER" .*? "}"

рдЬрд╣рд╛рдВ "ред*?" рдЧреИрд░ рд▓рд╛рд▓рдЪреА рд╣реИ - рдпрд╣ рдХреЗрд╡рд▓ рдЯрд░реНрдорд┐рдирд▓ рдХреА рдкрд╣рд▓реА рдШрдЯрдирд╛ рдХреЗ рд▓рд┐рдП рдЦрдкрдд рдХрд░рддрд╛ рд╣реИред рдХреНрдпрд╛ рдпрд╣ PEG.js рдХреА рд╕реВрдЪреА рдореЗрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ? рдмрд╣реБрдд рдзрдиреНрдпрд╡рд╛рджред

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

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

"OBJECT IDENTIFIER" (!"}" .)* "}"

рдХреНрдпрд╛ рдпрд╣ рдЖрдкрдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ?

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

рдЕрдкрдбреЗрдЯ рдХрд░реЗрдВ: рдпрд╣ рдПрдХ рджреЛрд╣рд░рд╛рд╡ рдЧрдгрдирд╛ (рдЬреЛ рдореЗрд░реЗ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рд╡рд┐рдЪрд╛рд░ рдХрд╛ рдПрдХ рд╕рд╛рдорд╛рдиреНрдпреАрдХрд░рдг рд╣реИ) рд╕реЗ рд╕рдВрддреБрд╖реНрдЯ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдЬреИрд╕рд╛ рдХрд┐ Google рд╕рдореВрд╣ рдореЗрдВ рд╕реБрдЭрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ: http://groups.google.com/group/pegjs/browse_thread/thread/2bea15581be45187

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

"OBJECT IDENTIFIER" (!"}" .)* "}"

рдХреНрдпрд╛ рдпрд╣ рдЖрдкрдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ?

рд╣рд╛рдБ, рдпрд╣ рдПрдХрджрдо рд╕рд╣реА рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдзрдиреНрдпрд╡рд╛рдж!

@dmajda !"}" рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рджреНрд╡рд╛рд░рд╛ рд▓реМрдЯрд╛рдП рдЧрдП рдЦрд╛рд▓реА рдЪрд╛рд░ рдХреЛ рдЕрд▓рдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдиреБрд╢рдВрд╕рд┐рдд рдЕрднреНрдпрд╛рд╕ рдХреНрдпрд╛ рд╣реИ?

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

   = chars:(!"-suffix" .)+ "-suffix"

"foo-suffix" => [[ '', 'f' ], ['', 'o' ], ['', 'o' ]]  // result
"foo-suffix" => ['f', 'o', 'o' ] // desired result

рдореИрдВ !"-suffix" . рдХреЛ рдЕрдкрдиреЗ рдирд┐рдпрдо рдореЗрдВ рддреЛрдбрд╝рдХрд░ рдЗрд╕реЗ рд╣рд╛рд╕рд┐рд▓ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдерд╛ рдЬреЛ рд╕рд┐рд░реНрдл . рдкрд░рд┐рдгрд╛рдо рджреЗрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдХреЛрдИ рдмреЗрд╣рддрд░ рддрд░реАрдХрд╛ рд╣реИ рддреЛ рдореИрдВ рдЙрддреНрд╕реБрдХ рд╣реВрдВред

66 рдЗрд╕реЗ рдареАрдХ рдХрд░реЗрдЧрд╛ред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рдмреАрдЪ рдЖрдк рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

    = chars:(!"-suffix" c:. {return c})+ "-suffix"

@islandr рдХреГрдкрдпрд╛ рдореБрджреНрджреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ PEG.js рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкреНрд░рд╢реНрди рдкреВрдЫрдиреЗ рдХреЗ рд╕реНрдерд╛рди рдХреЗ рд░реВрдк рдореЗрдВ рди рдХрд░реЗрдВред рдЦрд╛рд╕рддреМрд░ рдкрд░ рддрдм рдЬрдм рд╡реЗ рдмрдВрдж рд╣реЛрдВ рдФрд░ рдЦрд╛рд╕рдХрд░ рдЬрдм рдЖрдк рдХреБрдЫ рдРрд╕рд╛ рдкреВрдЫ рд░рд╣реЗ рд╣реЛрдВ рдЬрд┐рд╕рдореЗрдВ рдореЗрд░реЗ рдмрдЧрд▓ рдХреЗ рдЕрдиреНрдп рд▓реЛрдЧ рдЖрдкрдХреА рдорджрдж рдХрд░ рд╕рдХреЗрдВред рдЙрдЪрд┐рдд рдЪреИрдирд▓ Google рд╕рдореВрд╣ рд╣реИ ред

рдХреНрд╖рдорд╛ рдХрд░реЗрдВ рдбреЗрд╡рд┐рдбред рд╕реЛрдЪрд╛ рдерд╛ рдХрд┐ рдпрд╣ рдПрдХ рдЕрдЪреНрдЫреА рдЬрдЧрд╣ рд╣реЛрдЧреА рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдерд╛
рд╕реАрдзреЗ рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рджрд┐рдП рдЧрдП рдЙрджрд╛рд╣рд░рдг рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИред

рдмреБрдзрд╡рд╛рд░, 9 рдЬрдирд╡рд░реА, 2013 рдХреЛ рд░рд╛рдд 9:51 рдмрдЬреЗ, рдбреЗрд╡рд┐рдб рдорд╛рдЬрджрд╛ рдиреЛрдЯрд┐рдлрд┐рдХреЗрд╢рди @github.comрд▓рд┐рдЦрд╛:

@islandr https://github.com/islandr рдХреГрдкрдпрд╛ рдореБрджреНрджреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдПрдХ рд╕реНрдерд╛рди рдХреЗ рд░реВрдк рдореЗрдВ рди рдХрд░реЗрдВ
PEG.js рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкреНрд░рд╢реНрди рдкреВрдЫрдиреЗ рдХреЗ рд▓рд┐рдПред рдЦрд╛рд╕рдХрд░ рдЬрдм рд╡реЗ рдмрдВрдж рд╣реЛрдВ рдФрд░
рдЦрд╛рд╕рдХрд░ рдЬрдм рдЖрдк рдХреБрдЫ рдРрд╕рд╛ рдкреВрдЫ рд░рд╣реЗ рд╣реЛрдВ рдЬреЛ рдореЗрд░реЗ рдЕрд▓рд╛рд╡рд╛ рдЕрдиреНрдп рд▓реЛрдЧ рдХрд░ рд╕рдХреЗрдВ
рддреБрдореНрд╣рд╛рд░реА рдорджрдж рдХрд░реЛред рдЙрдЪрд┐рдд рдЪреИрдирд▓ Google рд╕рдореВрд╣ рд╣реИhttp://groups.google.com/group/pegjs
.

-
рдЗрд╕ рдИрдореЗрд▓ рдХрд╛ рд╕реАрдзреЗ рдЙрддреНрддрд░ рджреЗрдВ рдпрд╛ рдЗрд╕реЗ Gi tHubhttps: //github.com/dmajda/pegjs/issues/57#issuecomment -12083927 рдкрд░ рджреЗрдЦреЗрдВред

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

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

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

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

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

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

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