Pegjs: κ°€μ§œ Typescript 지원

에 λ§Œλ“  2018λ…„ 01μ›” 31일  Β·  8μ½”λ©˜νŠΈ  Β·  좜처: pegjs/pegjs

문제 μœ ν˜•

  • [x] κΈ°λŠ₯ μš”μ²­

우트

κ·Έλž˜μ„œ μ €λŠ” 사싀 #514의 @pjmolina 의 typescript ν”ŒλŸ¬κ·ΈμΈμ„ μ’‹μ•„ν•©λ‹ˆλ‹€. κ·ΈλŸ¬λ‚˜ κ²°κ΅­ all λ₯Ό λ°˜ν™˜ν•©λ‹ˆλ‹€.

λ‚˜λŠ” 당신이 λ‚΄κ°€ μ†μ΄λŠ” 데 λ„μ›€μ΄λ˜κΈ°λ₯Ό λ°”λžμŠ΅λ‹ˆλ‹€. μ‹€μ œλ‘œ peg ꡬ문에 "이λ₯Ό parse/1 의 λ°˜ν™˜ μœ ν˜•μœΌλ‘œ 지정"ν•˜λŠ” 것을 μΆ”κ°€ν•˜μ—¬ parse/1 μ„œλͺ…을 μ•½κ°„ λ‹€λ₯΄κ²Œ μž‘μ„±ν•˜κ³  μ‹ΆμŠ΅λ‹ˆλ‹€. λ˜ν•œ out μœ ν˜•μ΄ μžˆλŠ” 경우 in 인수 :string λ₯Ό ν‘œμ‹œν•©λ‹ˆλ‹€. 그런 λ‹€μŒ λ§ˆμ§€λ§‰ λ°˜ν™˜ 값을 λ§Ήλͺ©μ μœΌλ‘œ μœ ν˜• λ³€ν™˜ν•΄μ•Ό ν•©λ‹ˆλ‹€.

νƒ€μ΄ν”„μŠ€ν¬λ¦½νŠΈ(λ˜λŠ” ν”Œλ‘œμš°νƒ€μž…) μ‚¬μš©μžμ—κ²Œ 이것은 비둝 κ°€μ§œμΌμ§€λΌλ„ 확인 κ°€λŠ₯성에 μ€‘λŒ€ν•œ 영ν–₯을 λ―ΈμΉ  κ²ƒμž…λ‹ˆλ‹€.

μ΄λ ‡κ²Œ ν•˜λ €λ©΄ λͺ‡ 개의 μΉ΄ν‘ΈμΉ˜λ…Έλ₯Ό 우편으둜 보내야 ν•˜λ©° μ–΄λ–€ μ£Όμ†Œλ‘œ 보내야 ν•©λ‹ˆκΉŒ?

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

μ•ˆλ…•! 이와 κ΄€λ ¨ν•˜μ—¬ ν”ŒλŸ¬κ·ΈμΈ ts-pegjs μ—μ„œ ν”„λ‘œλ•μ…˜ κ·œμΉ™μ— λŒ€ν•œ 선택적 좜λ ₯ μž…λ ₯을 κ΅¬ν˜„ν–ˆμŠ΅λ‹ˆλ‹€. 11호 , 홍보 16

returnTypes μ˜΅μ…˜μ„ 톡해 "rule-name": "return-type" 쌍의 ν…Œμ΄λΈ”μ„ μ‚¬μš©ν•˜μ—¬ μˆ˜ν–‰ν–ˆμŠ΅λ‹ˆλ‹€.

DSL μˆ˜μ€€μ—μ„œ pegjs에 λŒ€ν•œ μœ ν˜• 정보λ₯Ό μ„ νƒμ μœΌλ‘œ μΆ”κ°€ν•˜μ—¬ ν”„λ‘œλ•μ…˜μ— 직접 μΆ”κ°€ν•˜κΈ°λ‘œ κ²°μ •ν•œ 경우λ₯Ό λŒ€λΉ„ν•˜μ—¬ μ €λŠ” 당신을 μ°Έμ‘°ν•©λ‹ˆλ‹€.
TypeScript 좜λ ₯, Flow λ˜λŠ” λ‹€λ₯Έ μœ ν˜•μ˜ JS λ³€ν˜•μ—λ„ 맀우 μœ μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

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

μ‹€μ œλ‘œ ν•„μš”ν•œ 것은 ν•¨μˆ˜μ˜ μ„œλͺ…이 λ‹€μŒκ³Ό 같이 μž‘μ„±λ˜λŠ” κ²ƒμž…λ‹ˆλ‹€.

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

(λ˜λŠ” 무엇이든)

이것 μ—μ„œ 영감 을 얻을 수 μžˆμŠ΅λ‹ˆλ‹€ . 사전에 λͺ¨λ“  μ½”λ“œ λΈ”λ‘μ˜ μœ ν˜•μ— λ ˆμ΄λΈ”μ„ 지정해야 ν•˜λ©° μ΄λŠ” 주석 으둜 μˆ˜ν–‰ν•  수 μžˆμŠ΅λ‹ˆλ‹€. 이 μ€€λΉ„ μž‘μ—… 후에 μƒμ„±κΈ°μ˜ μœ ν˜•μ— λŒ€ν•œ 정보λ₯Ό μž…λ ₯ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

@Mingun - ν₯λ―Έλ‘­μ§€λ§Œ μ΄ν•΄ν•˜κΈ° 맀우 μ–΄λ ΅μŠ΅λ‹ˆλ‹€.

주석은 μ—¬κΈ°μ—μ„œ 거의 이상적인 경우인 것 κ°™μŠ΅λ‹ˆλ‹€. μœ ν˜•μ΄ μžˆλŠ” κ°œλ³„ ꡬ문 뢄석 κ·œμΉ™μ˜ 주석을 ν—ˆμš©ν•˜μ—¬ λ‘˜ μ΄μƒμ˜ μ‹€μ œ μœ ν˜•μ„ λ°˜ν™˜ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

( @Mingun 도 λŸ¬μ‹œμ•„μ–΄λΌκ³  μ΄ν•΄ν•œ μ΄μƒν•œ μˆœκ°„.)

사싀 TypeScriptλŠ” λͺ¨λ“  κ³³μ—μ„œ μœ ν˜•μ— 주석을 달아야 ν•˜κ³  μœ ν˜• μ‹œμŠ€ν…œμ΄ μ•½κ°„ κΉ¨μ Έ 있기 λ•Œλ¬Έμ— 문법 κ°œλ°œμ„ 더 μ‰½κ²Œ λ§Œλ“€μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. μ΅œκ·Όμ— μ €λŠ” PEG.tsλ₯Ό λ§Œλ“œλŠ” 것에 λŒ€ν•œ μž‘μ€ μ‹€ν—˜μ„ ν–ˆμŠ΅λ‹ˆλ‹€. TypeScript의 μœ ν˜• κ²€μ‚¬κΈ°λŠ” μž¬κ·€ μœ ν˜•μ„ μ œκ³΅ν•  λ•Œ 끝내지 λͺ»ν•  μ •λ„λ‘œ λ”μ°ν•œ 였λ₯˜ λ©”μ‹œμ§€λ₯Ό ν‘œμ‹œν–ˆμŠ΅λ‹ˆλ‹€.

Infernu 지원을 μ‚΄νŽ΄λ³΄λŠ” 것이 μ’‹μŠ΅λ‹ˆλ‹€.

@polkovnikov-ph - 예, κ·Έ 선택은 λ‚΄ 손에 μžˆμ§€ μ•ŠμœΌλ©° κ²Œλ‹€κ°€ 1990λ…„λŒ€ C++ ν…œν”Œλ¦Ώ κ°œλ°œμžλ‘œμ„œ typescript의 였λ₯˜ λ©”μ‹œμ§€λŠ” λ‚˜λ₯Ό λ‘λ ΅κ²Œ ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

μ–΄μ¨Œλ“  λ‚΄κ°€ ν•„μš”ν•œ 것은 νƒ€μž…μŠ€ν¬λ¦½νŠΈ μ‹œμŠ€ν…œμ— νŒŒμ„œλ₯Ό μΆ”κ°€ν•  수 μžˆλŠ” κ²ƒμ΄λ―€λ‘œ parse/1 μ—μ„œ νƒ€μž…μŠ€ν¬λ¦½νŠΈ 주석을 μ–»λŠ” 것이 λ‚˜μ—κ²Œ κ°€μΉ˜κ°€ μžˆμŠ΅λ‹ˆλ‹€.

μ§€κΈˆμ€ 그둜슀 λ§ˆμŠ€ν„° νƒ€μž…κ³Ό μΊμŠ€νŒ…μœΌλ‘œ ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€. λ‚΄κ°€ 더 μž˜ν•  수 있으면 μ’‹κ² μ–΄

image

μ•ˆλ…•! 이와 κ΄€λ ¨ν•˜μ—¬ ν”ŒλŸ¬κ·ΈμΈ ts-pegjs μ—μ„œ ν”„λ‘œλ•μ…˜ κ·œμΉ™μ— λŒ€ν•œ 선택적 좜λ ₯ μž…λ ₯을 κ΅¬ν˜„ν–ˆμŠ΅λ‹ˆλ‹€. 11호 , 홍보 16

returnTypes μ˜΅μ…˜μ„ 톡해 "rule-name": "return-type" 쌍의 ν…Œμ΄λΈ”μ„ μ‚¬μš©ν•˜μ—¬ μˆ˜ν–‰ν–ˆμŠ΅λ‹ˆλ‹€.

DSL μˆ˜μ€€μ—μ„œ pegjs에 λŒ€ν•œ μœ ν˜• 정보λ₯Ό μ„ νƒμ μœΌλ‘œ μΆ”κ°€ν•˜μ—¬ ν”„λ‘œλ•μ…˜μ— 직접 μΆ”κ°€ν•˜κΈ°λ‘œ κ²°μ •ν•œ 경우λ₯Ό λŒ€λΉ„ν•˜μ—¬ μ €λŠ” 당신을 μ°Έμ‘°ν•©λ‹ˆλ‹€.
TypeScript 좜λ ₯, Flow λ˜λŠ” λ‹€λ₯Έ μœ ν˜•μ˜ JS λ³€ν˜•μ—λ„ 맀우 μœ μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

μ‚¬λžŒλ“€μ€ #597μ—μ„œ μ—¬μ „νžˆ 이것을 μš”κ΅¬ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€.

μƒˆλ‘œμš΄ κ΄€λ¦¬μžκ°€ .d.ts λ₯Ό λ§Œλ“€κ³  λ³΄κ΄€ν–ˆμœΌλ―€λ‘œ κ·ΈλŠ” λΆ„λͺ…νžˆ typescript에 μ—΄λ € μžˆμŠ΅λ‹ˆλ‹€.

이것은 5μ€„μ˜ μ½”λ“œμ™€ ꡐ체 es6 λͺ¨λ“ˆ λ°”λ‹₯κΈ€λ‘œ μˆ˜ν–‰ν•  수 μžˆλŠ” μ£Όμš” λ³€κ²½ 사항이 μ—†λŠ” 당일 "νƒ€μž…μŠ€ν¬λ¦½νŠΈκ°€ μžˆμŠ΅λ‹ˆλ‹€"μž…λ‹ˆλ‹€. λ‚˜λŠ” μ™œ 그것이 이루어지지 μ•ŠλŠ”μ§€ μ΄ν•΄ν•˜μ§€ λͺ»ν•œλ‹€.

0.11 에 λŒ€ν•œ νŒ¨μΉ˜κ°€ μ€€λΉ„λ˜μ–΄ μžˆμ§€λ§Œ 0.11 κ°€ λ³‘ν•©λ˜μ§€ μ•Šκ³  0.12 에 λŒ€ν•΄ μž‘μ—…ν•  수 μ—†μŠ΅λ‹ˆλ‹€.

이 νŽ˜μ΄μ§€κ°€ 도움이 λ˜μ—ˆλ‚˜μš”?
0 / 5 - 0 λ“±κΈ‰