Pegjs: 포럼 λ˜λŠ” μ±„νŒ…? 값을 μ•„λž˜λ‘œ μ „λ‹¬ν•˜κ±°λ‚˜ 값을 ν‘œμ‹œν•©λ‹ˆκΉŒ?

에 λ§Œλ“  2017λ…„ 03μ›” 23일  Β·  7μ½”λ©˜νŠΈ  Β·  좜처: pegjs/pegjs

pegjsλŠ” κ°„λ‹¨ν•˜κ³  κ°•λ ₯ν•©λ‹ˆλ‹€. λ‚˜λŠ” 그것을 μ’‹μ•„ν•œλ‹€! λ¬Έμ„œμ—μ„œ 닀루지 μ•Šμ€ λͺ‡ 가지 질문이 μžˆμŠ΅λ‹ˆλ‹€.

λ‚˜λŠ” 이것을 νŒŒμ‹±ν•˜κ³  μžˆμ§€λ§Œ μž‘λ™ν•˜μ§€λ§Œ κ·œμΉ™μ΄ 어색해 λ³΄μž…λ‹ˆλ‹€.

f = x => x * x

μ—°μ‚°μžλΌκ³  ν•˜λ„λ‘ μœ„μž„ν•˜λ©΄ 값을 전달할 방법이 μ—†μŠ΅λ‹ˆλ‹€. ValuesOperators 및 λ˜λŠ” = 및 =>λ₯Ό μƒμ„±ν•˜λ©΄ μ’€ 더 깔끔해 μ§€μ§€λ§Œ μ΅œμƒμœ„ μˆ˜μ€€μ—μ„œλŠ” μ—¬μ „νžˆ μ–΄λŠ κ²ƒμ΄μ—ˆλŠ”μ§€ 확인해야 ν•©λ‹ˆλ‹€. JavaScript μ˜ˆμ œμ—μ„œ { type: "Literal", value: ... } μ‚¬μš©μ„ λ΄…λ‹ˆλ‹€. 그것이 정보λ₯Ό λ°±μ—…ν•˜λŠ” κ°€μž₯ 쒋은 λ°©λ²•μž…λ‹ˆκΉŒ?

  = values:Values body:(_ "=>" _ Expression)? assign:(_ "=" _ Expression)? {
      if (body && body.length > 0) {
        return new Function(values, body[3]);
      } else if (assign) {
        return new Assignment(values, assign[3]);
      } else {
        return values;
      }
    }

감사 ν•΄μš”!
마이크

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

λ‚˜λŠ” μ—­μΆ”μ ν•˜μ§€ μ•Šκ³  μš•μ‹¬μ„ 뢀리지 μ•ŠλŠ”λ‹€λŠ” 것은 "ν˜„μž¬ 어디에 μžˆλ“ " μž‘μ—…ν•΄μ•Ό ν•œλ‹€λŠ” 것을 μ˜λ―Έν•œλ‹€κ³  κ°€μ •ν–ˆμ§€λ§Œ, 그렇지 μ•ŠμŠ΅λ‹ˆλ‹€. μ•Ό!

GreedyλŠ” μΌμΉ˜ν•˜λŠ” ν•­λͺ©μ„ 찾으면 κ°€μ Έκ°ˆ κ²ƒμ΄λΌλŠ” μ˜λ―Έμž…λ‹ˆλ‹€. λ§žμŠ΅λ‹ˆκΉŒ? κ·ΈλŸ¬λ‚˜ 전체 κ·œμΉ™μ΄ μΌμΉ˜ν•˜μ§€ μ•ŠμœΌλ©΄ λ‹€μŒ 경기의 μ²˜μŒλΆ€ν„° λ‹€μ‹œ μ‹œμž‘λ©λ‹ˆλ‹€. 이것은 λ‚΄κ°€ 처음 μ‹œλ„ν–ˆλ˜ 방법보닀 훨씬 μ‰½κ²Œ λ§Œλ“­λ‹ˆλ‹€.

x, y = 2 + 3.foo + "foo", 5 * 2

할당이 μ •κ·œμ‹ λ“±κ³Ό λ³„λ„λ‘œ μΌμΉ˜ν•  수 μžˆλŠ” 경우 μ΄λŠ” μƒλ‹Ήνžˆ μ‰½μŠ΅λ‹ˆλ‹€.

  = Assignment
  / Expression

Assignment
  = vars:Variables _ "=" _ expr:Expression

Variables
  = head:Identifier tail:(_ "," _ Identifier)*

...

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

λ¬Έλ²•μ—μ„œλŠ” κ·œμΉ™μ„ μ΄ν•΄ν•˜λŠ” 것이 ν•„μˆ˜μ μž…λ‹ˆλ‹€. 그리고 당신은 μ„œλΈŒ 만 μ œκ³΅ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€ .. 이것은 λ‚˜μ—κ²Œ λͺ…ν™•ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. μ–΄λ–»κ²Œ 기계에 λͺ…ν™• ν•  수 μžˆμŠ΅λ‹ˆκΉŒ?
LALR 문법은 μ“°κΈ°κ°€ 맀우 μ–΄λ ΅μ§€λ§Œ LR보닀 쉽고 LL보닀 μ‰½μŠ΅λ‹ˆλ‹€.
PEG 문법은 μ“°κΈ° 쉽고 효율적으둜 μ“°κΈ°κ°€ κ°€μž₯ μ–΄λ ΅μŠ΅λ‹ˆλ‹€.
μ˜¬λ°”λ₯Έ μž₯λ‚œκ°μ„ μ‚¬μš©ν•˜κ³  μžˆμŠ΅λ‹ˆκΉŒ? ν›Œλ₯­ν•œ PEG 문법을 가지고 μžˆλ‹€λ©΄ 트랜슀파일러λ₯Ό λ§Œλ“€κ±°λ‚˜ κ·œμΉ™μ„ ν•΄μ„ν•˜λŠ” κ²ƒμ²˜λŸΌ μ‰½κ²Œ 해석할 수 μžˆμ–΄μ•Ό ν•©λ‹ˆλ‹€.

가상 λ¨Έμ‹ μ˜ boxing/unboxing을 μ•„μ‹­λ‹ˆκΉŒ?

μ–΄λ–»κ²Œ ν• λ‹Ήμ˜ μ™Όμͺ½μ— values λ₯Ό κ°€μ§ˆ 수 μžˆμŠ΅λ‹ˆκΉŒ? body:(_ "=>" _ Expression)? κ°€ ?둜 끝났기 λ•Œλ¬Έμž…λ‹ˆλ‹€

λ‹Ήμ‹ μ˜ λ¬Έλ²•μ—μ„œ values λŠ” 무엇을 μ˜λ―Έν•©λ‹ˆκΉŒ? Lκ°’ 이 무엇인지 μ•„μ‹­λ‹ˆκΉŒ?

문법을 μ˜λ―Έμƒ κ°€κΉκ²Œ μœ μ§€ν•΄μ•Ό ν•©λ‹ˆλ‹€. μ–΄λ–€ κ²½μš°μ—λŠ” PEGκ°€ μ–΄λ ΅μŠ΅λ‹ˆλ‹€. { type: "Literal", value: ... } λŠ” μ •ν™•νžˆ ASTμ—μ„œ ν•„μš”ν•œ κ²ƒμž…λ‹ˆλ‹€. http://astexplorer.net/μ—μ„œ μ–΄λ–»κ²Œ μƒκ²ΌλŠ”μ§€ μ‚΄νŽ΄λ³΄μ„Έμš”.

방금 μ‹€ν—˜μ„ μœ„ν•΄ 그것을 μ‚¬μš©ν•˜κΈ° μ‹œμž‘ν–ˆμŠ΅λ‹ˆλ‹€. κ·Έλž˜μ„œ λ„€, 일뢀 이름이 μ˜¬λ°”λ₯΄μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. :) κ°„λ‹¨ν•œ LL(1) νŒŒμ„œλ₯Ό λͺ‡ 개 μž‘μ„±ν–ˆμ§€λ§Œ μ˜€λžœλ§Œμž…λ‹ˆλ‹€. 결정을 λ‚΄λ¦¬λŠ” κ°€μž₯ 쒋은 방법이 무엇인지 κΆκΈˆν•©λ‹ˆλ‹€. 이 ꡬ문을 λ‹¨μˆœν™”ν•˜κ² μŠ΅λ‹ˆλ‹€.

에이 = γ„΄
λ˜λŠ”
x => x * x

μ΄λŸ°μ‹μœΌλ‘œ ν•˜λŠ”κ²Œ 더 λ§žλ‚˜μš”?

ν• λ‹Ή λ˜λŠ” κΈ°λŠ₯
= ident:μ‹λ³„μž μ—°μ‚°μž:IdentOperator {
if (operator.type === "ν•¨μˆ˜") {
...
}

μ‹λ³„μž μ—°μ‚°μž
= "=" !">" { return { μœ ν˜•: "ν• λ‹Ή"; } }
/ "=>" { ... }

참고둜, "κ°’"은 ν•­λͺ© λͺ©λ‘μ„ μ˜λ―Έν•˜λŠ” 데 μ‚¬μš©ν•œ μš©μ–΄μž…λ‹ˆλ‹€. νŠœν”Œλ‘œ μ‚¬μš©ν•˜λ©΄ κ°’μ΄μ§€λ§Œ ν•¨μˆ˜ 인수λ₯Ό μ •μ˜ν•˜λŠ” 데 μ‚¬μš©ν•˜λ©΄ λ³€μˆ˜μž…λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄ (2 + 3).

μ‹œκ°„ λ‚΄ μ€˜μ„œ κ³ λ§ˆμ›Œ!

@mikeaustin 그것은 λ‹Ήμ‹ μ˜ κ²ƒμž…λ‹ˆλ‹€ :-)

문법을 μ“°λŠ” 것은 λͺ¨λ‘ μΆ•μ†Œ 에 κ΄€ν•œ μ„±λͺ…μ„œ μž…λ‹ˆλ‹€. 그것은 λ¬Έμž₯κ³Ό κ°™μŠ΅λ‹ˆλ‹€. μ•Œλ‹€μ‹œν”Ό, 당신은 LL 문법을 가지고 μžˆμŠ΅λ‹ˆλ‹€ :-)

문법을 의미둜 μ •μ˜ν•˜λŠ” 것은 λ‹Ήμ‹ μ˜ μ±…μž„μž…λ‹ˆλ‹€ (λ•Œλ•Œλ‘œ μ˜μ–΄μ— λ¬Έμ œκ°€ μžˆμ–΄ μ£„μ†‘ν•©λ‹ˆλ‹€ :-D)

AssignmentOrFunction을 μ–΄λ–»κ²Œ μ²˜λ¦¬ν•˜μ‹œκ² μŠ΅λ‹ˆκΉŒ? 이것은 기본적으둜 λ§Žμ€ μ–Έμ–΄μ˜ λ¬Έκ³Ό λ™μΌν•˜μ§€λ§Œ R-κ°’ 도 될 수 μžˆμŠ΅λ‹ˆλ‹€.
λ°˜λŒ€νŽΈμ—μ„œ

    = "=" !">" { return { type: "Assignment"; } }
    / "=>" { ... }

λ‹€μŒκ³Ό 같이 더 잘 μ“Έ 수 μžˆμŠ΅λ‹ˆλ‹€.

    = "=>" { ... }
    / "=" { return { type: "Assignment"; } }

λ‚΄κ°€ 틀릴 μˆ˜λ„ μžˆμŠ΅λ‹ˆλ‹€. κ·ΈλŸ¬λ‚˜ 이것은 그닀지 μ€‘μš”ν•˜μ§€ μ•Šμ€ λΆ€λΆ„μ—μ„œ λ¬Έμž₯을 κΉ¨λŠ” 것 κ°™μŠ΅λ‹ˆλ‹€. λ§₯락이 μ—†μœΌλ©΄ 이것을 ν‰κ°€ν•˜λŠ” 것이 μ€‘μš”ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€..

PEGλŠ” 도달할 수 μ—†λŠ” κ·œμΉ™μ„ μ‰½κ²Œ μž‘μ„±ν•  수 μžˆκ±°λ‚˜ λ¬Έμž₯을 λ„μš©ν•˜μ—¬ 잘λͺ» ν‰κ°€ν•˜λŠ” κ·œμΉ™μ„ μž‘μ„±ν•  수 있기 λ•Œλ¬Έμ— μ“°κΈ°κ°€ 정말 μ–΄λ ΅μŠ΅λ‹ˆλ‹€. λ”°λΌμ„œ 초보자라면 μ™Όμͺ½μ— λ¬Έμž₯이 μžˆμ–΄μ•Ό ν•˜κ³  였λ₯Έμͺ½μ— ν•„μˆ˜ ASTκ°€ 항상 μžˆμ–΄μ•Ό ν•©λ‹ˆλ‹€. 문법 κ·œμΉ™λ³΄λ‹€ μžλ™ν™”λœ ν…ŒμŠ€νŠΈκ°€ λͺ‡ λ°° 더 λ§ŽμŠ΅λ‹ˆλ‹€. μ €λ₯Ό λ―ΏμœΌμ„Έμš”. κ·œμΉ™ ν•˜λ‚˜λ₯Ό λ³€κ²½ν•˜λ©΄ 전체 νŒŒμ„œκ°€ κ³ μž₯λ‚  κ²ƒμž…λ‹ˆλ‹€.

그리고 λ¬Όλ‘  당신은 가지고 놀고, 무언가λ₯Ό μ“°κ³ , κ³„μ†ν•΄μ„œ λ°˜λ³΅ν•΄μ•Ό ν•©λ‹ˆλ‹€. PEG둜 효과적인 ν‘œν˜„μ‹ 계산기λ₯Ό μž‘μ„±ν•˜λŠ” 것은 μ‚¬μ†Œν•œ 일이 μ•„λ‹™λ‹ˆλ‹€. μ—¬λŸ¬ μˆ˜μ€€μ˜ μš°μ„  μˆœμœ„μ— μœ μ˜ν•˜μ‹­μ‹œμ˜€. PEGλŠ” 일반적인 ꡬ문 뢄석에 더 μ’‹μŠ΅λ‹ˆλ‹€.

당신은 λ‹Ήμ‹ μ˜ μ§ˆλ¬Έμ— 더 λ§Žμ€ λ§₯락을 μ œκ³΅ν•˜μ§€ μ•ŠμœΌλ―€λ‘œ 당신이 μ •λ§λ‘œ λ§Œλ“€κ³  싢은 것을 μΆ”μΈ‘ν•˜κΈ°κ°€ 맀우 μ–΄λ ΅μ§€λ§Œ 문법을 더 많이 닀루어야 ν•œλ‹€κ³  μΆ”μΈ‘ν•  수 μžˆμŠ΅λ‹ˆλ‹€. AntLR , ν•™μŠ΅μ„ μœ„ν•œ ν›Œλ₯­ν•œ 도ꡬ, GoldParser(LALR)(λ‚΄ 첫 번째 μž₯λ‚œκ° :-) ), 잘 ν…ŒμŠ€νŠΈλ˜κ³  κ°€μž₯ νš¨μœ¨μ μ΄μ§€λ§Œ ν† ν¬λ‚˜μ΄μ €/νŒŒμ„œ(이전 lex 및 yacc, μ΅œμ‹  flex 및 bison)둜 λΆ„ν• λœ 일뢀 ꡬ식 νŒŒμ„œ, λ§Žμ€ 포트 ..

PEGκ°€ κ°€μž₯ λ‹¨μˆœν•΄ λ³΄μž…λ‹ˆλ‹€. 정말이야. ν•˜μ§€λ§Œ 항상 κ°€μž₯ μœ„ν—˜ν•  κ²ƒμž…λ‹ˆλ‹€...

κ°μ‚¬ν•©λ‹ˆλ‹€! μ•„, pegjs용 Google 그룹을 μ°Ύμ•˜μ§€λ§Œ 개발 μ„Ήμ…˜μ— 있기 λ•Œλ¬Έμ— λˆˆμΉ˜μ±„μ§€ λͺ»ν–ˆμŠ΅λ‹ˆλ‹€. λ‹€λ₯Έ 질문이 있으면 λŒ€μ‹  거기에 κ°€κ² μŠ΅λ‹ˆλ‹€.

예, ν• λ‹Ή "x = y"λŠ” _statement_μ΄μ§€λ§Œ "x => x * x"λŠ” _expression_의 일뢀일 수 있으며 "x == y" λ“±μž…λ‹ˆλ‹€. "="λŠ” νŠΉλ³„ν•œ κ²½μš°μ΄λ―€λ‘œ μ •κ·œ μ—°μ‚°μžκ°€ μ•„λ‹ˆλΌλŠ” μ μ—μ„œ "=>"μž…λ‹ˆλ‹€. 더 많이 μ—°μŠ΅ν•˜κ³  예제λ₯Ό 더 μžμ„Ένžˆ μ‚΄νŽ΄λ³΄κ² μŠ΅λ‹ˆλ‹€. 계산기보닀 ν¬μ§€λ§Œ λ‹€λ₯Έ μ˜ˆλ³΄λ‹€ μž‘μ€ μ˜ˆκ°€ 있으면 μ’‹κ² μŠ΅λ‹ˆλ‹€. μ–΄μ©Œλ©΄ λ‚΄κ°€ λ°œμ „ν•œλ‹€λ©΄ 그것은 μ˜ˆκ°€ 될 수 μžˆμŠ΅λ‹ˆλ‹€ :)

λ‚΄ ν”„λ‘œμ νŠΈμ˜ 경우 JS둜 λ³€ν™˜ν•  κ°„λ‹¨ν•œ μ–Έμ–΄λ₯Ό μž‘μ„±ν•˜κ³  μ‹ΆμŠ΅λ‹ˆλ‹€. 기본은 μ™ΈλΆ€μ˜ μ–΄νœ˜ λ²”μœ„ λ©”μ„œλ“œ(Dylan λ˜λŠ” CLOS와 같이 μ›μˆ­μ΄ νŒ¨μΉ˜λŠ” μ—†μ§€λ§Œ 닀쀑 λ©”μ„œλ“œ μ—†μŒ), ν‚€μ›Œλ“œ 인수, ADT, μ–΄μ©Œλ©΄ 선택적 정적 μž…λ ₯일 μˆ˜λ„ μžˆμŠ΅λ‹ˆλ‹€. "λ‹¨μˆœ"은 λͺ¨λ“  것이 ν•¨κ»˜ μž‘λ™ν•œλ‹€λŠ” 것을 μ˜λ―Έν•˜λ©° 무언가λ₯Ό μˆ˜ν–‰ν•˜λŠ” 방법은 단 ν•œ κ°€μ§€λΏμž…λ‹ˆλ‹€. κ°„λ‹¨ν•œ 것을 λ§Œλ“œλŠ” 것은 _μ–΄λ €μš΄_ 수 μžˆμŠ΅λ‹ˆλ‹€.

λ˜ν•œ λ„€μ΄ν‹°λΈŒ ꡬ문의 이점을 얻을 수 μžˆλŠ” adt 및 multimethods 와 같은 λΌμ΄λΈŒλŸ¬λ¦¬κ°€ μžˆμŠ΅λ‹ˆλ‹€. 그것듀은 μ‹€μ œλ‘œ sweet 으둜 달성할 수 μžˆμ§€λ§Œ sweet λŠ” JSλ₯Ό ν™•μž₯ν•  수 μžˆμ„ 뿐 더 κ°„λ‹¨ν•˜κ²Œ λ§Œλ“€ μˆ˜λŠ” μ—†μŠ΅λ‹ˆλ‹€. TypeScript μ—λŠ” "--strictNullChecks"와 같은 μ˜΅μ…˜μ΄ 있고 인라인 곡용체 μœ ν˜•μ„ μ§€μ›ν•˜μ§€λ§Œ JSλ₯Ό ν™•μž₯ν•˜μ—¬ λͺ¨λ“  λ‚˜μœ 것을 κ·ΈλŒ€λ‘œ λ‘‘λ‹ˆλ‹€(μ•”μ‹œμ  κ°•μ œ λ³€ν™˜, λ¬Έμžμ—΄ 연결에 λŒ€ν•œ "+", λ²”μœ„ ν˜Έμ΄μŠ€νŒ… λ“±).

λ‹€μ‹œ ν•œ 번, λͺ¨λ“  도움에 κ°μ‚¬λ“œλ¦½λ‹ˆλ‹€!
마이크

λ‚˜λŠ” μ—­μΆ”μ ν•˜μ§€ μ•Šκ³  μš•μ‹¬μ„ 뢀리지 μ•ŠλŠ”λ‹€λŠ” 것은 "ν˜„μž¬ 어디에 μžˆλ“ " μž‘μ—…ν•΄μ•Ό ν•œλ‹€λŠ” 것을 μ˜λ―Έν•œλ‹€κ³  κ°€μ •ν–ˆμ§€λ§Œ, 그렇지 μ•ŠμŠ΅λ‹ˆλ‹€. μ•Ό!

GreedyλŠ” μΌμΉ˜ν•˜λŠ” ν•­λͺ©μ„ 찾으면 κ°€μ Έκ°ˆ κ²ƒμ΄λΌλŠ” μ˜λ―Έμž…λ‹ˆλ‹€. λ§žμŠ΅λ‹ˆκΉŒ? κ·ΈλŸ¬λ‚˜ 전체 κ·œμΉ™μ΄ μΌμΉ˜ν•˜μ§€ μ•ŠμœΌλ©΄ λ‹€μŒ 경기의 μ²˜μŒλΆ€ν„° λ‹€μ‹œ μ‹œμž‘λ©λ‹ˆλ‹€. 이것은 λ‚΄κ°€ 처음 μ‹œλ„ν–ˆλ˜ 방법보닀 훨씬 μ‰½κ²Œ λ§Œλ“­λ‹ˆλ‹€.

x, y = 2 + 3.foo + "foo", 5 * 2

할당이 μ •κ·œμ‹ λ“±κ³Ό λ³„λ„λ‘œ μΌμΉ˜ν•  수 μžˆλŠ” 경우 μ΄λŠ” μƒλ‹Ήνžˆ μ‰½μŠ΅λ‹ˆλ‹€.

  = Assignment
  / Expression

Assignment
  = vars:Variables _ "=" _ expr:Expression

Variables
  = head:Identifier tail:(_ "," _ Identifier)*

...

@mikeaustin PEGλŠ” ν‘œν˜„μ‹μ—μ„œ μΌμΉ˜ν•˜λŠ” 첫 번째 νŒ¨ν„΄μ΄ μžλ™μœΌλ‘œ μΌμΉ˜ν•œλ‹€λŠ” 것을 μ˜λ―Έν•˜λŠ” 선택 을 @langpavel 의 μ˜ˆλŠ” => 보닀 = => λŒ€ν•œ μ„ ν˜Έλ„λ₯Ό ν‘œν˜„ν•˜λŠ” 쒋은 λ°©λ²•μž…λ‹ˆλ‹€. "ν‘œν˜„μ΄ 될 수 μžˆλŠ” 이 λͺ¨λ“  ν…μŠ€νŠΈλ₯Ό 가져와 λ‚˜μ€‘μ— μ•Œμ•„λ‚΄κΈ°" λŒ€μ‹  "이것 쀑 ν•˜λ‚˜"λΌλŠ” μš©μ–΄λ‘œ ν‘œν˜„μ΄ 무엇인지 더 μƒκ°ν•˜κ³  싢을 μˆ˜λ„ μžˆμŠ΅λ‹ˆλ‹€.

  = FunctionExpression
  / Assignment
  / Value

μ‹œμ—°ν•˜κΈ° μœ„ν•΄ μ €λŠ” μ—¬λŸ¬λΆ„μ΄ 가지고 놀 수 μžˆλŠ” ν…ŒμŠ€νŠΈ 문법 을 λ§Œλ“€μ—ˆμŠ΅λ‹ˆλ‹€. μ•½κ°„ μ‹œλ„λŸ½μ§€λ§Œ μ—¬λΆ„μ˜ 곡백 및 μ—°μ‚°μžλ₯Ό ν—ˆμš©ν•˜λŠ” 것과 같은 λͺ‡ 가지 사항을 λ¬΄μ‹œν•˜κ³  κ½€ λ‹¨μˆœν•˜κ²Œ μœ μ§€ν•˜λ €κ³  λ…Έλ ₯ν–ˆμŠ΅λ‹ˆλ‹€. λ§ˆλ²•μ΄ μΌμ–΄λ‚˜λŠ” Expression 블둝에 μ£Όλͺ©ν•˜μ‹­μ‹œμ˜€. λ˜ν•œ SubExpression 및 ExpressionList 와 같은 것을 "이 쀑 λ§Žμ€" 상황을 μ²˜λ¦¬ν•˜λŠ” λ°©λ²•μœΌλ‘œ μ‚¬μš©ν–ˆμŠ΅λ‹ˆλ‹€. 이 νŒ¨ν„΄μ€ λͺ©λ‘ ꡬ뢄 κΈ°ν˜Έμ™€ ν•­λͺ©μ„ λΆ„λ¦¬ν•˜λŠ” 데 μ ν•©ν•©λ‹ˆλ‹€.

각각의 κ²½μš°μ— μ €λŠ” 각 μ’…λ₯˜μ˜ 일치 ν•­λͺ©μ— λŒ€ν•΄ ν•˜λ‚˜μ˜ ν•­λͺ©μ„ μ‚¬μš©ν•˜μ—¬ 문법을 λ‹¨μˆœν•˜κ²Œ μœ μ§€ν•˜λ €κ³  λ…Έλ ₯ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€. κ°€λŠ₯ν•œ λͺ¨λ“  쑰합이 ν¬ν•¨λœ ν•˜λ‚˜μ˜ 큰 일치 μ‹œν€€μŠ€λ₯Ό 갖도둝 λ‹€μ‹œ μž‘μ„±ν•  수 있기 λ•Œλ¬Έμ— μ•½κ°„μ˜ 쀑볡성이 μžˆμŠ΅λ‹ˆλ‹€. 도움이 되기λ₯Ό λ°”λžλ‹ˆλ‹€.

μ‹œν—˜ 문법 ν•œλ²ˆ λ³Όκ²Œμš” κ°μ‚¬ν•©λ‹ˆλ‹€! JavaScript 문법이 κ½€ 크기 λ•Œλ¬Έμ— μ–Έμ–΄μ˜ μ΅œμ†Œν•œμ˜ ν•˜μœ„ 집합을 λ³΄λŠ” 데 도움이 λ©λ‹ˆλ‹€.

: @dmsnell λ‚΄κ°€ κ·œμΉ™μ„ μ œκ±°ν•˜κ³  μžλ°” 슀크립트 문법에 λͺ‡ 가지 μƒˆλ‘œμš΄ 것듀을 μΆ”κ°€ν•˜μ—¬ μ΅œκ·Όμ— λ§Žμ€ 것을 λ°°μ› , 당신은 여기에 μ΅œμ‹  λ³Ό 수 μžˆμŠ΅λ‹ˆλ‹€ impulse.pegjs을 . μƒλž΅ ꡬ문 [,,], 일뢀 μ—°μ‚°μž, μ‹œν€€μŠ€ ν‘œν˜„μ‹ 등을 μ œκ±°ν•˜κ³  νŠœν”Œ ꡬ문(1, 2) 및 λ²”μœ„ ꡬ문 1..5λ₯Ό μΆ”κ°€ν–ˆμŠ΅λ‹ˆλ‹€. 뢀동 μ†Œμˆ˜μ  μˆ«μžλŠ” λ¦¬ν„°λŸ΄ λ²”μœ„λ₯Ό 더 μ‰½κ²Œ ꡬ문 뢄석할 수 μžˆλ„λ‘ μ–‘μͺ½μ— μ†Œμˆ˜κ°€ ν•„μš”ν•©λ‹ˆλ‹€.

μ €λŠ” μ΅œκ·Όμ— λ§Žμ€ λŸ°νƒ€μž„ μž‘μ—…μ„ ν•˜κ³  μžˆμ§€λ§Œ μ‹€μ œλ‘œ JavaScriptλ₯Ό 내보내렀면 νŒŒμ„œλ‘œ λŒμ•„κ°€κ³  μ‹ΆμŠ΅λ‹ˆλ‹€. μ €λŠ” μž‘μ—… 사이에 μžˆμœΌλ―€λ‘œ μ‹œκ°„μ΄ 쑰금 μžˆμŠ΅λ‹ˆλ‹€. :) ν™•μž₯ λ©”μ„œλ“œ, λͺ…λͺ…λœ λ§€κ°œλ³€μˆ˜, νŠΉμ„± 및 믹슀인, μ—°μ‚°μž μ˜€λ²„λ‘œλ”© 및 λ¦¬ν„°λŸ΄ νŠœν”Œ 및 λ²”μœ„ ꡬ문을 μ‚¬μš©ν•˜μ—¬ JavaScript의 κΉ”λ”ν•œ 방언에 λŒ€ν•œ λͺ‡ 가지 아이디어 .

λ‹€μ‹œ ν•œλ²ˆ κ°μ‚¬ν•©λ‹ˆλ‹€!
마이크

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