PEG.js ๋ฌธ๋ฒ์ด POSIX ๊ธฐ๋ณธ ์ ๊ท ํํ์์ ๋ฒ์ ํํ์๊ณผ ๊ฐ์ ๊ฒ์ ์ฌ์ฉํ ์ ์๋๋ก ํ์ฉํ๋ค๋ฉด ๋์์ด ๋ ๊ฒ์ ๋๋ค. ์:
"a"\{1,7\}
a
, aa
, ..., aaaaaaa
์ผ์น
"a"\{0,1\}
๋น ๋ฌธ์์ด ๋ฐ a
์ ์ผ์น
"a"\{,6\}
์ต๋ 6๊ฐ์ a
๊ฐ ์๋ ๋ฌธ์์ด๊ณผ ์ผ์นํฉ๋๋ค.
"a"\{6,\}
6๊ฐ ์ด์์ a
๋ฌธ์์ด๊ณผ ์ผ์น
"a"\{3\}
aaa
๋ง ์ผ์นํ๋ฉฐ $#$ "a"\{3,3\}
์ ๋์ผํฉ๋๋ค.
์ด ๊ธฐ๋ฅ์ ๊ตฌํํ์ง ์์ต๋๋ค.
์ฃผ๋ ์ด์ ๋ PEG.js ๋ฌธ๋ฒ์ {m,n}
๊ตฌ๋ฌธ์ ์ํ ๊ณต๊ฐ์ด ์๊ธฐ ๋๋ฌธ์
๋๋ค. ์ค๊ดํธ๋ ์ด๋ฏธ ์์
์ ์ฌ์ฉ๋์์ผ๋ฉฐ ์ ์ํ ๋๋ก ๋ฐฑ์ฌ๋์๋ฅผ ์ฌ์ฉํ๊ณ ์ถ์ง ์์ต๋๋ค(๊ทธ๋ค์ ์ถ์
ํ๊ณ ํธํ๋์ง ์์ต๋๋ค ํ์ฌ ๊ฐ์ฅ ๋ง์ด ์ฌ์ฉ๋๋ Perl ์ ๊ท ํํ์๊ณผ ๋ค๋ฅธ PEG.js ๊ตฌ๋ฌธ์ ์์ค) ๋๋ ๊ธฐํ ๊ตฌ๋ถ ๊ธฐํธ(ํผ๋์ค๋ฌ์ธ ์ ์์)๋ฅผ ์ฌ์ฉํฉ๋๋ค.
๋ด ๊ฒฝํ์ ์ด๋ฐ ์ข
๋ฅ์ ์ ํ๋ ๋ฐ๋ณต์ ์ฃผ๋ก ๋ฌธ๋ฒ์ "์ดํ" ๋ถ๋ถ( color = "#" hexdigit hexdigit hexdigit hexdigit hexdigit hexdigit
์ ๊ฐ์ ๊ท์น)์์ ๋ฐ์ํ๋ฉฐ ์์ฃผ ๋ฐ์ํ์ง๋ ์์ต๋๋ค. ๊ฑฐ๊ธฐ์ ํํ์์ ์ํ์ค์ ๊ธฐ์กด ๋ฐ๋ณต ์ฐ์ฐ์( *
, +
, ?
)๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ๊ด์ฐฎ๋ค๊ณ ์๊ฐํฉ๋๋ค.
๋ค์ ์๊ฐํด ๋ณด์๊ณ ์ด ๋ฌธ์ ๋ฅผ ๋ค์ ์์ํฉ๋๋ค. ์์์ ๋ฐ๋ณต ํ์๋ฅผ ์ง์ ํ๋ ๊ธฐ๋ฅ์ ์ฌ์ฉ์๊ฐ ๋ง์ด ์ํ๋ ๊ฒ ๊ฐ์ต๋๋ค.
{
๋ฐ }
๊ฐ ์ด๋ฏธ ์์
์ ์ฌ์ฉ๋์์ผ๋ฉฐ ์ฌ์ฌ์ฉํ๋ฉด ๋ชจํธ์ฑ์ด ์๊ธฐ๊ธฐ ๋๋ฌธ์ ์ ๊ท ํํ์๊ณผ ๊ฐ์ {m,n}
๊ตฌ๋ฌธ์ ํผํ๊ณ ์ถ์ต๋๋ค. ๋๋ ํ์ฌ ๋ค์๊ณผ ๊ฐ์ ๊ฒ์ ๋ํด ์๊ฐํ๊ณ ์์ต๋๋ค.
"foo" @ 1..10 // repeat 1 to 10 times
"foo" @ 1.. // repeat at least once
"foo" @ ..10 // repeat at most 10 times
๊ฐ์ฅ ํฐ ์ง๋ฌธ์ ๊ตฌ๋ถ ๋ฌธ์๊ฐ ๋ฌด์์ด๊ณ ๋ฒ์๋ฅผ ํ์ํ๋ ๋ฐฉ๋ฒ์ ๋๋ค.
๋ถ๋ฆฌ ๋ฌธ์์ ๊ดํด์๋ @
๊ฐ ์ข์ ๊ฒ ๊ฐ์ต๋๋ค. %
๋ฐ #
์ ๊ณ ๋ คํ๊ณ ์์์ง๋ง ์ฒซ ๋ฒ์งธ ๊ฒ์ ์ด๋ฏธ ๋ฌธ์์ด ๋ณด๊ฐ(์: Python)๊ณผ ์ฐ๊ด๋์ด ์๊ณ ๋ ๋ฒ์งธ ๊ฒ์ ์ฃผ์(๋ค์ํ ์ธ์ด)๊ณผ ์ฐ๊ด๋์ด ์์ต๋๋ค. ๋๋ ๋ํ ๊ตฌ๋ถ ๊ธฐํธ๋ฅผ ์์ ํ ๊ฑด๋ ๋ฐ๋ ๊ฒ์ ๋ํด ์๊ฐํ๊ณ ์์ต๋๋ค.
"foo" 1..10 // repeat 1 to 10 times
"foo" 1.. // repeat at least once
"foo" ..10 // repeat at most 10 times
๋ฒ์ ๋งํฌ์
์ Ruby์์ ์๊ฐ์ ์ป์์ต๋๋ค. ์ ๋ -
์ ๋ํด ์๊ฐํ๊ณ ์์๋๋ฐ, ๋๋ฌด ๋นผ๊ธฐ ๊ธฐํธ์ฒ๋ผ ๋ณด์
๋๋ค. ๋ฐ๋ฉด์ ํ์ด์ฌ ๊ฐ์ :
๋ ์ข์ ๋ณด์
๋๋ค.
๋ฐ๊ฐ๋ฐฉ ๋ฒ์์ ๋ํด์๋ ์ ๋ชจ๋ฅด๊ฒ ์ต๋๋ค. ๋ค์๊ณผ ๊ฐ์ด +
๋ฐ -
๋ฅผ ์ฌ์ฉํ์ฌ ๋งํฌ์
ํ๋ ๊ฒ์ด ๋ ๋์ ์ ์์ต๋๋ค.
"foo" @ 1+ // repeat at least once
"foo" @ 10- // repeat at most 10 times
์์ด๋์ด๋ ์๊ฒฌ์ด ์์ผ์ญ๋๊น?
์ด ๊ธฐ๋ฅ์ ์ง์ํ ๊ณํ์ด๋ผ๋ ์ ๋ง ๋๋จํฉ๋๋ค!
๋๋ ๋น์ ์ (๊ธฐ๋ณธ) ์ ์์ ์ข์ํฉ๋๋ค:
"foo" @ 1..10 // 1~10ํ ๋ฐ๋ณต
"foo" @ 1.. // ์ ์ด๋ ํ ๋ฒ ๋ฐ๋ณต
"foo" @ ..10 // ์ต๋ 10๋ฒ ๋ฐ๋ณต
๋ฐ๊ฐ๋ฐฉ ๋ฒ์์ ๋ํ +/- ๊ตฌ๋ฌธ์ด ๋ง์์ ๋ค์ง ์์ต๋๋ค. ์ด์ค ์ ๊ตฌ๋ฌธ์ ํจ์ฌ ๋ ์ง๊ด์ ์ด๊ณ ์ฝ๊ธฐ ์ฌ์ด IMO์ ๋๋ค.
IMO "#"๋ ์์ฐ์ค๋ฝ๊ฒ ์ซ์/์ธ๋ ๊ฒ์ ์๋ฏธํ๋ ๋ฐ๋ฉด "@"๋ ์์ฐ์ค๋ฝ๊ฒ ์ฐธ์กฐ๋ฅผ ์๋ฏธํ๋ฏ๋ก "#"์ ์กฐ๊ธ ๋ ์ง๊ด์ ์ด๊ณ ์ฝ๊ธฐ ์ฝ์ต๋๋ค. (๊ทธ๋ฆฌ๊ณ ์๋ง๋ ๋ฏธ๋์ "@"๋ฅผ ๋ฌด์ธ๊ฐ์ ์ฌ์ฉํ ์ ์์๊น์?). ๊ทธ๋ฌ๋ ๊ทธ๊ฒ์ ์ ๋ง ์ฌ์ํ ๋ฌธ์ ์ด๋ฉฐ "@" ๊ตฌ๋ฌธ์ ๋ง์กฑํ ๊ฒ์ ๋๋ค.
๊ฑด๋ฐฐ!
๊ฐ๋จํ ์๊ฒฌ: @
๋ฐ %
๊ฐ #
๋ณด๋ค ๋ ๋์ ์ ํ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค. PEG.js ๋ฌธ๋ฒ์ ์ง์ํ์ง ์๋ ๊ตฌ๋ฌธ ํ๊ดํ, ํนํ ์ถ์ธก์ ์๋ํ๋ ๊ตฌ๋ฌธ ํ๊ดํ ๋๋ฌธ์
๋๋ค. ๊ตฌ๋ฌธ(์: ์คํ ์ค๋ฒํ๋ก์ ์ฝ๋ ํ๊ดํ)์ #
๋ฅผ ์ฃผ์์ ์์์ผ๋ก ํด์ํ์ฌ ํด๋น ์ง์ ๋ถํฐ "์ฃผ์ ์์"์ EOL๊น์ง ํ์๋๋๋ก ํฉ๋๋ค. ์ด๊ฒ์ ๋ฌผ๋ก ๋
ผ๋ฆฌ์ ์ถ๋ก ์ ๊ธฐ๋ฐํ ์ ํธ๊ฐ ์๋๋ผ ์ค์ฉ์ฃผ์์ ๊ธฐ๋ฐํฉ๋๋ค.
{num, num}
์ ๋ํ ํน๋ณํ ๊ฒฝ์ฐ๋ ์ด๋ป์ต๋๊น? { , num}
๋ฐ { num, }
๋ ์ ํจํ js ์ฝ๋๊ฐ ์๋๋ฉฐ {num, num}
๋ฐ { num }
๋ ๋ฌด์๋ฏธํ๋ฏ๋ก ๋ฐ๋ณต์ ์๋ฏธํฉ๋๋ค.
์์ ์ด ๋ค๋ฅธ ์ธ์ด๋ก ๋ ๊ฒฝ์ฐ์๋ ์๋ฏธ๊ฐ ์์ ์ ์์ต๋๋ค.
๋๋ ์ ์๋ ๊ฒ ์ค์์ ์ด๋ฌํ ๋ณํ์ ์ข์ํฉ๋๋ค(๊ทธ๋ฌ๋ ์ด๊ฒ์ ๋น์ ์ด ์ ์์ด๊ธฐ ๋๋ฌธ์ ์ ํํ๋ ๊ฒ์ ๋น์ ์๊ฒ ๋ฌ๋ ค ์์ต๋๋ค :))
// why we need separator, anyway? for me it looks very cool and simple to understand
"foo" 1..10 // repeat 1 to 10 times
"foo" 1.. // repeat at least once
"foo" ..10 // repeat at most 10 times
๋๋
"foo"@1..10 // repeat 1 to 10 times
"foo"@1.. // repeat at least once
"foo"@..10 // repeat at most 10 times
๊ทธ๋ฌ๋ ๋ ๋ฒ์งธ๋ ๋ ๋ฐ๋์งํ๋ค
x..y
/ ..y
/ x..
์์ด๋์ด๋ ..
๋๋ถ์ ์ผ๊ด๋ ์ฐ์ฐ์๋ก ๋ณด์ด๊ธฐ ๋๋ฌธ์ ๋งค์ฐ ๋ฉ์ ธ ๋ณด์
๋๋ค.
+/-
๋ ํผ๋์ ์ผ์ผํค๊ณ ..
์์ ์ถ๊ฐ ์ฐ์ฐ์๊ฐ ๋๊ธฐ ๋๋ฌธ์ ๊ด์ฐฎ์ง ์์ต๋๋ค( +
๋ ์ด๋ฏธ ์ฌ์ฉ๋จ).
๊ทธ๊ฒ์ ๋ํด ๋ค์ ์๊ฐํฉ๋๋ค. ์๋ํ ๊น์?
'foo'<1,5>
'foo'< ,3>
'foo'<2, >
<
๋ฐ >
๋ ํ์ฌ ๋ฌธ๋ฒ์์ ์ฌ์ฉ๋์ง ์๊ธฐ ๋๋ฌธ์
:+1: ์ ๊ฐ ๋ณด๊ธฐ์๋ ์ข์ ๋ณด์ ๋๋ค.
๋ฌผ๋ก <,3>
๋ <0,3>
์ ๋์ผํ๋ฏ๋ก ์ต์ ์ซ์๋ง ์๊ตฌํ ์๋ ์์ต๋๋ค. ์ด๋ ECMA๊ฐ JavaScript ์ ๊ท์์ ๋ํด ์ํํ ์์
๊ณผ ์ผ์นํฉ๋๋ค.
<,>
์ข์์. ๊ทธ๋ฌ๋ <3>
์ <3,3>
์ ๋์ผํ๊ฒ ์ฌ์ฉํ๋ ๊ฒ๋ ์ ์ํฉ๋๋ค.
๋์ํฉ๋๋ค. <>
๊ตฌ๋ฌธ์ ๊ฐ๋ฅํ ํ RegExp์์ {}
์ ๋์์ ์ง์ ๋งคํ๋์ด์ผ ํฉ๋๋ค.
๋ด๊ฐ ํ๋ฆฌ์ง ์์๋ค๋ฉด ๋ฒ์์ ๋ณ์ ์ด๋ฆ์ ํ์ฉํ์ง ์๋ ํ ๊ตฌ๋ถ ๊ธฐํธ๋ฅผ ์ถ๊ฐํ ํ์๊ฐ ์์ต๋๋ค.
foo 1,2 fighter
bar ,3 tender
baz 4, lurhmann
qux 5 quux
๋ชจ๋ ๋ช ํํฉ๋๋ค.
@pygy , ๊ตฌ๋ถ ๊ธฐํธ๋ฅผ ์ฌ์ฉํ์ง ์๋ ๋ฌธ์ ๋ ์ ์ฌ์ ์ผ๋ก ์ธ์ด ๊ตฌ๋ฌธ์ ์งํ๋ฅผ ์ต์ ํ๋ค๋ ๊ฒ์ ๋๋ค.
์๋ฅผ ๋ค์ด ๋์ค์ ๋ค๋ฅธ ์ฉ๋๋ก ์ผํ๋ฅผ ์ฌ์ฉํ๋ ค๋ ๊ฒฝ์ฐ ์ด์ ๋ชจ๋ ๊ณณ์์ ๊ตฌ๋ฌธ ์ถฉ๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํฉ๋๋ค. <>
๋๊ดํธ ๋ด๋ก ์ ํํ๋ฉด ์ผํ์ ์ซ์์ ํ๋ฉด์ ์ด ํฌ๊ฒ ์ค์ด๋ญ๋๋ค.
๋ํ ์ฌ๋๋ค์ ์ด์จ๋ RegExps์์ {1,6}
์คํ์ผ์ ์ฌ์ฉํ๋ ๋ฐ ์ต์ํฉ๋๋ค.
๋๋ ๊ตฌ๋ฌธ์ ๋ํด ๊ฐํ๊ฒ ๋๋ผ์ง ์์ง๋ง ์ด ๊ธฐ๋ฅ์ ์ํ๊ณ ํํ์์ ๋ฒ์ ๊ฐ์ผ๋ก ์ฌ์ฉํ ์ ์๋ค๋ฉด ์ข์ ๊ฒ์ ๋๋ค.
๋ด ์ฌ์ฉ ์ฌ๋ก: {42}\r\n...
์ฒ๋ผ ๋ณด์ด๋ IMAP ์๋ฒ ์๋ต์์ ๋ฆฌํฐ๋ด์ ๊ตฌ๋ฌธ ๋ถ์ํฉ๋๋ค. ์ฌ๊ธฐ์ 42
๋ ๋ฌธ์์ด์ ๋ํ๋ด๋ ์ค ๋ฐ๊ฟ ๋ค์ ๋ฌธ์ ์์
๋๋ค(์ฌ๊ธฐ์์๋ ์ค์ํ๋ก ํ์๋จ). IMAP ๋ฆฌํฐ๋ด์๋ ๋ ๊ตฌ๋ถ ๊ธฐํธ๊ฐ ์์ผ๋ฏ๋ก ๋ฌธ์ ๊ณ์ฐ์ ์ด ์๋ต์ ๊ตฌ๋ฌธ ๋ถ์ํ๋ ์ ์ผํ ๋ฐฉ๋ฒ์
๋๋ค.
์ ํ ์ฌํญ์ ๋ณ์๋ ์ด๋ป์ต๋๊น? ๊ธธ์ด๊ฐ ํฌํจ๋ ํค๋๊ฐ ์๋ ๋ฉ์์ง์ ๋งค์ฐ ์ ์ฉํฉ๋๋ค. ์๋ฅผ ๋ค์ด ๋ฌธ๋ฒ
= len:number message:.<len,len> .* {return message;}
number
= n:[0-9] {return parseInt(n);}
๊ตฌ๋ฌธ ๋ถ์ํด์ผ
4[__] -> ['[', '_', '_', ']']
4[___] -> ['[', '_', '_', '_']
4[_] -> Error: expected 4 chars, got 3
์ด๊ฒ์ ๋ง์ ํ๋กํ ์ฝ์ ์ ์ฉํฉ๋๋ค.
ํด๋น ๊ตฌ๋ฌธ์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
expression |min,max|
, ํ
ํ๋ฆฟ ๊ท์น์ ๊บพ์ ๊ดํธ๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค.
๋น์ ์ ์์ง๋ ์ด๊ฒ์ ๊ตฌํํ๋ ๊ฒ์ ๊ณ ๋ คํ๊ณ ์์ต๋๊น?
ABNF ๋ฒ์์ ์ ์ฌํ ๊ฒ์ ์ด๋ป์ต๋๊น?
exp * // 0 or more times
exp 1* // at least once
exp *10 // up to 10 times
exp 1*10 // 1 to 10 times
์ฌ๋ณด์ธ์. ๊ตฌ๋ฌธ ๋ถ์ํ ๋ณต์กํ ํ์ผ ํ์์ด ์์ต๋๋ค. ๋ฐ์ ๋ฐ์ด๋๋ฆฌ, ๋ฐ์ ASCII์ ๋๋ค.
๋ค์์ ๋ฌธ์ ์ ๋จ์ํ๋ ๋ฒ์ ์ ๋๋ค.
KK4TesRandom
๋๋ KK10TestATestBRandom
๋ ผ๋ฆฌ:
<StringIndicator><StringLength><String><otherStuff>
KK
๋ ๋ฌธ์์ด์ ํ์ํ๋ ํ์๊ธฐ์
๋๋ค. ๋ค์ ์ซ์(์ฌ๊ธฐ์๋ 4
๋ฐ 10
)๋ ๋ฌธ์์ด์ ๊ธธ์ด์
๋๋ค. ๊ทธ๋ฐ ๋ค์ ๋ฌธ์์ด ์์ฒด(์ฌ๊ธฐ์๋ Test
๋ฐ TestATestB
). ๋ฌธ์์ด์ ์์ธก ๊ฐ๋ฅํ ํจํด์ผ๋ก ๋๋์ง ์์ต๋๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก ๊ธธ์ด ์ ๋ณด๋ฅผ ์ฌ์ฉํด์ผ ํฉ๋๋ค. ์ด๊ฒ์ด ๋ฐ์ด๋๋ฆฌ ํ์ผ ํ์์ ์ผ๋ฐ์ ์ธ ํจํด์ด๋ผ๊ณ ๋งํ๊ณ ์ถ์ง๋ง ํ์ฌ ๋ฌธ๋ฒ์ผ๋ก ๊ตฌ๋ฌธ ๋ถ์์ด ๊ฐ๋ฅํฉ๋๊น?
๊ฐ์ฌํฉ๋๋ค.
๋ด ๋ธ๋์น range-dynamic-boundary ์์ ๊ทธ๋ฐ ๊ฒ์ ๊ตฌํํฉ๋๋ค. ๋ฌธ๋ฒ์ ๋ค์๊ณผ ๊ฐ์ด ๋ณด์ผ ๊ฒ์ ๋๋ค:
start = len:nx data:.|len| { return data; };
nx = n:$[0-9]+ { return parseInt(n, 10); };
@๋ฏผ๊ฑด ์ ! ๊ทธ๊ฒ์ ๋งค๋ ฅ์ฒ๋ผ ์๋ํฉ๋๋ค! ๊ตฌํ๊ณผ ์งง์ ์์ ์ ๊ฐ์ฌ๋๋ฆฝ๋๋ค. ๋๋ ๋ช ๊ฐ์ง ํ ์คํธ๋ฅผํ๊ณ ๊ทธ๊ฒ์ ํ๋ฅญํ๊ฒ ์๋ํฉ๋๋ค. ํ ์์ฒญ์ด ๋ง์คํฐ์๊ฒ ์๋ฝ๋๊ธฐ๋ฅผ ๋ฐ๋๋๋ค.
๋๋ ๋ฐ๋ณต ํ์๋ ์ข์ํ ๊ฒ์ ๋๋ค. ๊ทธ๋ฌ๋ ์ฝ๊ฐ ๋ค๋ฅธ ๊ตฌ๋ฌธ์ ์ ์ํฉ๋๋ค. Pegasus ๋ C#์ ๊ฒฝ์ฐ์๋ง pegjs์ ๊ฑฐ์ ๋์ผํฉ๋๋ค. ์ฌ๊ธฐ๋ฅผ ์ฐธ์กฐํ์ญ์์ค: https://github.com/otac0n/Pegasus/wiki/Syntax-Guide#expressions
๊ทธ๋ฆฌ๊ณ d<3> e<2,> f<1,5>
๋ฅผ ์ฌ์ฉํ์ฌ ์ด ๊ธฐ๋ฅ์ ๊ตฌํํ์ต๋๋ค.
์ด๋ฅผ ์ํด ์ฌ๋๋ค์ ๋ฌด์์ ํด๊ฒฐํฉ๋๊น? ์ง๊ธ ๋ง PEGjs์ ์ ๋ฌธํ๊ณ ์์ด์ ๋ง์น๋ก ๋์ฌ๋ฅผ ๋๋ฆฌ๋ ค๊ณ ํ๊ณ ์๋๋ฐ 1~6์๋ฆฌ ์ซ์๋ง ๋ง์ถ๋ ค๊ณ ํฉ๋๋ค. :)
๋๋ ๋ด ์์ ์ ๊ตฌํ์ ์ฌ์ฉํ๊ณ ์์ต๋๋ค(๊ตฌ๋ฌธ์ #267 ์ฐธ์กฐ, ์ต์ข ์๋ฃจ์ ์ ์ซ์, ๋ณ์ ๋ฐ ์ฝ๋ ๋ธ๋ก์ ๊ฒฝ๊ณ๋ก ์ง์ํจ). ๊ณง Peggy ๋ฅผ ์ํ PR์ ์ค๋นํ ๊ฒ์ ๋๋ค(์ ์ง๋๋ PEG.js ํฌํฌ์ ๋ธ๋๋ ๋ณ๊ฒฝ)
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
๋๋ ๋ฐ๋ณต ํ์๋ ์ข์ํ ๊ฒ์ ๋๋ค. ๊ทธ๋ฌ๋ ์ฝ๊ฐ ๋ค๋ฅธ ๊ตฌ๋ฌธ์ ์ ์ํฉ๋๋ค. Pegasus ๋ C#์ ๊ฒฝ์ฐ์๋ง pegjs์ ๊ฑฐ์ ๋์ผํฉ๋๋ค. ์ฌ๊ธฐ๋ฅผ ์ฐธ์กฐํ์ญ์์ค: https://github.com/otac0n/Pegasus/wiki/Syntax-Guide#expressions
๊ทธ๋ฆฌ๊ณ
d<3> e<2,> f<1,5>
๋ฅผ ์ฌ์ฉํ์ฌ ์ด ๊ธฐ๋ฅ์ ๊ตฌํํ์ต๋๋ค.