Pegjs: ์บ์‹œ๊ฐ€ ํ™œ์„ฑํ™” / ๋น„ํ™œ์„ฑํ™” ๋  ๋•Œ ๋ฐ˜ํ™˜๋˜๋Š” ๋‹ค๋ฅธ ์˜ค๋ฅ˜

์— ๋งŒ๋“  2016๋…„ 08์›” 28์ผ  ยท  20์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: pegjs/pegjs

๋ฌธ๋ฒ•:

Statement
  = "{" __ !Statement Statement __ "}"
__
  = [ \t\r\n]*

์ž…๋ ฅ:

{x}

๊ฒฐ๊ณผ ์บ์‹œ๋ฅผ ๋น„ํ™œ์„ฑํ™”ํ•˜๋ฉด ์œ„์˜ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

"{"๋˜๋Š” [\ t \ r \ n]์ด ํ•„์š”ํ•˜์ง€๋งŒ "x"๊ฐ€ ๋ฐœ๊ฒฌ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

๊ฒฐ๊ณผ ์บ์‹œ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์˜ค๋ฅ˜๊ฐ€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋ณ€๊ฒฝ๋ฉ๋‹ˆ๋‹ค.

[\ t \ r \ n]์ด (๊ฐ€) ํ•„์š”ํ•˜์ง€๋งŒ "x"๊ฐ€ ๋ฐœ๊ฒฌ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

๋‘ ๊ฒฝ์šฐ ๋ชจ๋‘ ์˜ค๋ฅ˜๊ฐ€ ๋™์ผํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

์›๋ณธ ๋ณด๊ณ ์„œ

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

์—ฌ๊ธฐ ์—์„œ ์ˆ˜์ • ์‚ฌํ•ญ์„ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ชจ๋“  20 ๋Œ“๊ธ€

์ €๋Š” ์‚ฌ์šฉ์ž๋ฅผ์œ„ํ•œ ๊ตฌ๋ฌธ ์™„์„ฑ์„ ๊ตฌ์ถ•ํ•˜๊ธฐ ์œ„ํ•ด ๋งค์šฐ ํ‘œํ˜„์ ์ธ SyntaxError s pegjs ๋˜์ง€๊ธฐ์— ์˜์กดํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜์ด ๋ฌธ์ œ๋กœ ์ธํ•ด ๋” ๋ณต์žกํ•œ ๋ฌธ๋ฒ•์— ๋Œ€ํ•ด ๊ทธ๋ ‡๊ฒŒ ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

  • ์บ์‹œ๊ฐ€ ํ™œ์„ฑํ™”๋˜๋ฉด ๊ฐ€๋Šฅํ•œ ์ผ์น˜๋ฅผ ์–ต์ œํ•ฉ๋‹ˆ๋‹ค.
  • ์บ์‹œ๊ฐ€ ์—†์œผ๋ฉด ํŒŒ์‹ฑ ์†๋„๊ฐ€ ํฌ๊ฒŒ ๋Š๋ ค์ง€๋ฏ€๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๊ฒŒ๋ฉ๋‹ˆ๋‹ค.

์˜ค๋ฅ˜๊ฐ€ ์ ์šฉ๋˜๋Š” ๋˜ ๋‹ค๋ฅธ ๋ฌธ๋ฒ• :

Start
    = Char+ End

End
    = "e"

Char
    = (!End [a-z])+

์ž…๋ ฅ:

a

๊ฒฐ๊ณผ ์บ์‹œ๋ฅผ ๋น„ํ™œ์„ฑํ™”ํ•˜๋ฉด ์œ„์˜ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

"e", [az]๊ฐ€ ํ•„์š”ํ•˜๊ฑฐ๋‚˜ "e"๊ฐ€ ์•„๋‹ˆ์ง€๋งŒ ์ž…๋ ฅ์˜ ๋์ด ๋ฐœ๊ฒฌ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

๊ฒฐ๊ณผ ์บ์‹œ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์˜ค๋ฅ˜๊ฐ€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋ณ€๊ฒฝ๋ฉ๋‹ˆ๋‹ค.

[az]๊ฐ€ ํ•„์š”ํ•˜์ง€๋งŒ ์ž…๋ ฅ์˜ ๋์ด ๋ฐœ๊ฒฌ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

ae ๊ฐ€ ๋ฌธ๋ฒ•๊ณผ ์ผ์น˜ํ•˜๋ฏ€๋กœ ์บ์‹œ ๋น„ํ™œ์„ฑํ™” ์˜ค๋ฅ˜๊ฐ€ ์ •ํ™•ํ•ฉ๋‹ˆ๋‹ค.

# 555๋กœ ์ถ”๊ฐ€ ๋œ ์‹คํŒจํ•œ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค

์ด ๋ฌธ์ œ์˜ ์›์ธ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • ๊ทœ์น™์˜ ์ดˆ๊ธฐ ํ‰๊ฐ€ ์ค‘์— peg$expect ๊ฐ€ ํ˜ธ์ถœ ๋˜์–ด ์˜ˆ์ƒ ํ† ํฐ์„ ๊ธฐ๋กํ•ฉ๋‹ˆ๋‹ค. ํŠน์ • ๊ฒฝ์šฐ ( peg$silentFails > 0 ) ํ† ํฐ์€ ๋ฌด์‹œ๋ฉ๋‹ˆ๋‹ค.

  • ์บ์‹œ ๋œ ํ‰๊ฐ€ ์ค‘์— peg$expect ๊ด€๋ จ ํ˜ธ์ถœ๋„ ์žฌ์ƒํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ์˜ˆ์ƒ ํ† ํฐ์„ ๋†“์นฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ์œ„์— ํ‘œ์‹œ๋œ ๋ถˆ์™„์ „ํ•œ ์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€์— ๋‚˜ํƒ€๋‚ฉ๋‹ˆ๋‹ค.

๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์ง€์—ญ์˜ ํ”„๋กœํ†  ํƒ€์ž…์—์„œ [email protected] ๋‚˜๋Š” ๊ธฐ๋ก ๋ฐ ํ˜ธ์ถœ ์žฌ์ƒํ•˜์—ฌ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐ ํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค peg$expect . ๊ทธ๋Ÿฌ๋‚˜ https://github.com/pegjs/pegjs/commit/669f782a5f3928a2958147992eb07df5b0ecf54a์— ๋„์ž… ๋œ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์œผ๋กœ ์ธํ•ด์ด ํ•ญ๋ชฉ์€ ํ›จ์”ฌ ๋” ๋ณต์žกํ•ด์กŒ์Šต๋‹ˆ๋‹ค.

pegjs@dev ๋Œ€ํ•œ ์ˆ˜์ •์„ ์‹œ๋„ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‚ด๊ฐ€ ์˜ฌ๋ฐ”๋ฅธ ๋ฐฉํ–ฅ์œผ๋กœ ๊ฐ€๊ณ  ์žˆ๋Š”์ง€ ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค.

@Mingun , @futagoza์— ๋Œ€ํ•œ ์˜๊ฒฌ์ด

[email protected] ๊ธฐ๋ฐ˜์˜ ๋กœ์ปฌ ํ”„๋กœํ†  ํƒ€์ž…์„ ๋ณด์—ฌ์ค„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

์—ฌ๊ธฐ ์—์„œ ์ˆ˜์ • ์‚ฌํ•ญ์„ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ค‘์ฒฉ ๋œ ๋ฌด์Œ ์š”์†Œ์— ๋Œ€ํ•ด์„œ๋Š” ์•„์ง ์ œ๋Œ€๋กœ ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋ฌธ๋ฒ•:

Start
  = Char+ End
End "end"
  = "e"
Char
  = !End [a-z]'

์ž…๋ ฅ:

a

์˜ˆ์ƒ ๋ฉ”์‹œ์ง€ :

์˜ˆ์ƒ๋˜๋Š” ๋ ๋˜๋Š” [az]์ด์ง€๋งŒ ์ž…๋ ฅ์˜ ๋์ด ๋ฐœ๊ฒฌ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

์‹ค์ œ ๋ฉ”์‹œ์ง€ :

๋, "e"๋˜๋Š” [az]๊ฐ€ ์˜ˆ์ƒ๋˜์ง€๋งŒ ์ž…๋ ฅ ๋์ด ๋ฐœ๊ฒฌ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

Cf. ์‹คํŒจํ•œ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค .

@nikku ์ด๊ฒƒ์€ ์ง€๊ธˆ ํ•ด๊ฒฐ๋˜์–ด์•ผํ•ฉ๋‹ˆ๋‹ค (๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค ๐Ÿ™‡), 3 ๊ฐœ์˜ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๊ฐ€ ๋ชจ๋‘ ํ†ต๊ณผ (์ค‘์ฒฉ ๋œ ์นจ๋ฌต ์š”์†Œ์— ๋Œ€ํ•œ ์„ธ ๋ฒˆ์งธ ์ผ€์ด์Šค ํฌํ•จ).

์ตœ์‹  pegjs@dev ๋ฆด๋ฆฌ์Šค์—์žˆ๋Š” ์ˆ˜์ • ์‚ฌํ•ญ์€ NPM, [email protected] (https://github.com/pegjs/pegjs#latest)์— ํ‘ธ์‹œ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

๊ฐ์‚ฌ.

์˜ค๋Š˜ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ํ…Œ์ŠคํŠธํ–ˆ์Šต๋‹ˆ๋‹ค.

์—์„œ ๋‚ด๊ฐ€ ๋ฌด์—‡์„๋ณด๊ณ  https://github.com/pegjs/pegjs/commit/f5b323b40124e9ebe1336b509af0716d5a31ce55#diff -cd2c6b13fdcedf68a390c8bb6ea65cafR148 ์†Œ๊ฐœํ•˜๊ณ  ์ฃผ์š” ๋ณ€๊ฒฝ, ๊ทธ๊ฒƒ์€ ํšจ๊ณผ์ ์œผ๋กœ ์ œ๊ฑฐ๋กœ peg$silentFails === 0 ๊ฐ€๋“œ ์™€์— --no-cache ์ƒ์„ฑ ๋œ ํŒŒ์„œ .

๐Ÿ˜จ ์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๊ฑด ์–ด๋ฆฌ์„์€ ์‹ค์ˆ˜์˜€์Šต๋‹ˆ๋‹ค. ๊ณง ๊ณ ์น ๊ฑฐ์•ผ, ๊ณ ๋งˆ์›Œ

ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๋ฅผ ๋งŒ๋“ค๋ ค๊ณ ํ–ˆ์ง€๋งŒ ์‹คํŒจํ–ˆ์Šต๋‹ˆ๋‹ค : cry :. ๊ทธ๋ž˜๋„ ๋” ๋ณต์žกํ•œ ๋ฌธ๋ฒ• ์ค‘ ํ•˜๋‚˜์— ์˜ํ–ฅ์„ ๋ฏธ์น˜๋Š” ์ค„์„ ๋ด…๋‹ˆ๋‹ค.

https://github.com/pegjs/pegjs/commit/d06a5b52efcf0fa4b9e5bf21f97607786c1c7db5 ์—์„œ ๊ฐ€๋“œ๋ฅผ ๋ณต์›ํ•˜๊ณ  ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ pegjs@dev ํ‘ธ์‹œํ–ˆ์Šต๋‹ˆ๋‹ค. ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋˜๋Š”์ง€ ์•Œ๋ ค์ฃผ์„ธ์š”.

@nikku ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ ๋˜์—ˆ์Šต๋‹ˆ๊นŒ? ์•„๋‹ˆ๋ฉด ์—ฌ์ „ํžˆ ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ? ์ด ๋ฌธ์ œ๋ฅผ ๋‹ค์‹œ ์—ด์–ด์•ผํ•˜๋Š”์ง€ ์•Œ๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

๊ณ ์ •๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

@nikku- ์ˆ˜์ •๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ์•„๋ฌด๊ฒƒ๋„ ๊ณต๊ฐœ๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. npm ์—๋Š” ์—ฌ์ „ํžˆ 0.10.0 ์ด ์žˆ์œผ๋ฉฐ ๋ฅ˜์šฐ๊ฐ€ ์‹ค์ œ๋กœ๋Š” ์ถœ์‹œ๋˜์ง€ ์•Š์„ ๊ฒƒ์ด๋ผ๊ณ  ๋งํ•œ ๊ธฐ๋Šฅ 0.11.0 ๋ธŒ๋žœ์น˜์— ๋ณ‘ํ•ฉ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” pegjs์— ๋Œ€ํ•œ ๊ธฐ๋Œ€๋ฅผ ๊ทธ๋งŒ๋‘๊ณ  ์ •ํ™•ํžˆ ์ด๋Ÿฐ ์ด์œ ๋กœ ์˜ค๋ž˜ ์ „์— ๋‹ค๋ฅธ ๊ณณ์„ ๋ณด์•˜์Šต๋‹ˆ๋‹ค.

๋ฆด๋ฆฌ์Šค ์—†์Œ = ์•„๋ฌด๋„ ์‹ค์ œ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. Pegjs๋Š” ์—ญ์‚ฌ์ ์œผ๋กœ ๋ฆด๋ฆฌ์Šค๊ฐ€ ์ข‹์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.

๋‹ค์Œ๊ณผ ๊ฐ™์ด ํŽ˜๊ทธ ๋ฆด๋ฆฌ์Šค์ฃผ๊ธฐ๋ฅผ ๋ณ€๊ฒฝํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

  1. ์›๋ž˜ ์†Œ์œ ์ž์—๊ฒŒ 0.12.0 ์—์„œ 0.10.0 0.12.0 ์„ (๋ฅผ) ๋‹ค์‹œ์ž๋ฅผ ์ˆ˜ ์žˆ๋„๋ก ์š”์ฒญ
  2. ํ˜„์žฌ ์ฃฝ์€ 0.11.0 ๋ธŒ๋žœ์น˜์—์„œ ์ฒด๋ฆฌ๋ฅผ ์„ ํƒํ•˜๊ณ  ์ง€์†์ ์œผ๋กœ ๋น ๋ฅธ ๋ฆด๋ฆฌ์Šค ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
  3. ํ‘œ์ค€ ๊ฐœ๋ฐœ ์„ค์ •์„ ์œ„ํ•ด ์ผ๋ฐ˜์ ์ด์ง€ ์•Š์€ ๋„๊ตฌ ๋ฐ ๊ตฌ์„ฑ์„ ์ œ๊ฑฐํ•˜๊ณ 
  4. ์ปค๋ฎค๋‹ˆํ‹ฐ๊ฐ€ ๊ธฐ๋Šฅ์„ ์‰ฝ๊ฒŒ ์ถ”๊ฐ€ ํ•  ์ˆ˜์žˆ๋Š” ์žฅ์†Œ์— ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.

๊ทธ๋Ÿฐ ์ผ์ด ์ผ์–ด๋‚˜๊ณ  ์–ด๋–ค ์† ์œผ๋กœ๋“  ์‹ค์ œ๋กœ ์ถœ์‹œ๊ฐ€ ์‹œ์ž‘๋˜๋ฉด ๋˜ ๋‹ค๋ฅธ ๊ธฐํšŒ๋ฅผ ์ฃผ๊ฒ ์Šต๋‹ˆ๊นŒ?

๊ทธ๊ฒƒ์„ ๋‹ฌ์„ฑํ•˜๊ธฐ ์œ„ํ•ด ๋‹น์‹ ์—๊ฒŒ ํ–‰์šด์„ ๋น•๋‹ˆ๋‹ค.

๊ณ ๋งˆ์›Œ ๐Ÿ˜

์šฐ๋ฆฌ๋Š” ๋ณผ ๊ฒƒ์ด๋‹ค.

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰