Pegjs: * , + 및 ?에 λŒ€ν•œ μš•μ‹¬ μ—†λŠ” μ—°μ‚°μž

에 λ§Œλ“  2011λ…„ 10μ›” 07일  Β·  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" .*? "}"

".*?" non-greedy - 터미널이 처음 λ‚˜νƒ€λ‚  λ•Œλ§Œ μ†ŒλΉ„ν•©λ‹ˆλ‹€. 이것이 PEG.js의 λͺ©λ‘μ— μžˆμ„ 수 μžˆμŠ΅λ‹ˆκΉŒ? κ°μ‚¬ν•©λ‹ˆλ‹€.

κ°€μž₯ μœ μš©ν•œ λŒ“κΈ€

PEG ν˜•μ‹μ—μ„œλŠ” . 메타 λ¬Έμžμ™€ ν•¨κ»˜ μˆ μ–΄λ₯Ό μ‚¬μš©ν•˜μ—¬ μ’…κ²°μžκΉŒμ§€ μ‰½κ²Œ μΌμΉ˜μ‹œν‚¬ 수 μžˆμŠ΅λ‹ˆλ‹€. λ‹€μŒκ³Ό 같은 것:

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

κ·Έκ²ƒμœΌλ‘œ μΆ©λΆ„ν•©λ‹ˆκΉŒ?

λͺ¨λ“  7 λŒ“κΈ€

μ—…λ°μ΄νŠΈ: Google 그룹슀( http://groups.google.com/group/pegjs/browse_thread/thread/2bea15581be45187 )μ—μ„œ μ œμ•ˆν•œ 반볡 횟수(λ‚΄ 초기 μƒκ°μ˜ μΌλ°˜ν™”)둜 λ§Œμ‘±ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

PEG ν˜•μ‹μ—μ„œλŠ” . 메타 λ¬Έμžμ™€ ν•¨κ»˜ μˆ μ–΄λ₯Ό μ‚¬μš©ν•˜μ—¬ μ’…κ²°μžκΉŒμ§€ μ‰½κ²Œ μΌμΉ˜μ‹œν‚¬ 수 μžˆμŠ΅λ‹ˆλ‹€. λ‹€μŒκ³Ό 같은 것:

"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 κ·Έλ£Ή μž…λ‹ˆλ‹€.

λ―Έμ•ˆν•΄ 데이빗. μ˜ˆμ „λΆ€ν„° 쒋은 κ³³μ΄μ˜€μ„ 거라 μƒκ°ν–ˆλŠ”λ°
κ·€ν•˜κ°€ 제곡 ν•œ μ˜ˆμ™€ 직접 관련이 μžˆμŠ΅λ‹ˆλ‹€.

2013λ…„ 1μ›” 9일 μˆ˜μš”μΌ μ˜€ν›„ 9μ‹œ 51뢄에 David Majda [email protected]이 μž‘μ„±ν–ˆμŠ΅λ‹ˆλ‹€ .

@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 λ“±κΈ‰