Reading Syntax Failures - kimjooyoon/meta-ontology-go GitHub Wiki

문법 였λ₯˜μ™€ UNKNOWN 읽기

Gooo의 μ‹€νŒ¨ λ©”μ‹œμ§€λ₯Ό 읽을 λ•Œ κ°€μž₯ λ¨Όμ € λ³Ό 것은 무엇을 ν™•μΈν–ˆκ³ , 무엇은 아직 ν™•μΈν•˜μ§€ λͺ»ν–ˆλŠ”κ°€μž…λ‹ˆλ‹€.

문법이 ν‹€λ Έλ‹€λŠ” κ΄€μΈ‘κ³Ό, 검증에 ν•„μš”ν•œ μž…λ ₯이 μ—†λ‹€λŠ” μƒνƒœλŠ” λ‹€λ¦…λ‹ˆλ‹€. λ‘˜ λ‹€ λ‹€μŒ λ‹¨κ³„λ‘œ μ§„ν–‰ν•˜μ§€ λͺ»ν•  수 μžˆμ§€λ§Œ ν•΄κ²° λ°©λ²•κΉŒμ§€ κ°™μ§€λŠ” μ•ŠμŠ΅λ‹ˆλ‹€. GoooλŠ” 이 차이λ₯Ό μ†ŒμŠ€ μœ„μΉ˜, 검증 λ²”μœ„, 보쑴된 증거둜 μ„€λͺ…ν•˜λŠ” λ°©ν–₯으둜 개발되고 μžˆμŠ΅λ‹ˆλ‹€.

1. λ¨Όμ € μž‘μ€ ν”„λ‘œκ·Έλž¨μ„ κ²€μ‚¬ν•˜κΈ°

μ„€μΉ˜ν•œ CLIμ—μ„œλŠ” λ‹€μŒμ²˜λŸΌ μ†ŒμŠ€λ₯Ό κ²€μ‚¬ν•©λ‹ˆλ‹€.

gooo check examples/billing/main.gooo

μ„€μΉ˜μ™€ 정상 μ˜ˆμ œλŠ” μ‹œμž‘ν•˜κΈ°μ—μ„œ μ΄μ–΄μ§‘λ‹ˆλ‹€. μ•„λž˜ μ˜ˆμ œλŠ” μ‚¬μš©λ²•μ„ λ³΄μ—¬μ£ΌλŠ” 정상 ν”„λ‘œκ·Έλž¨μ΄ μ•„λ‹ˆλΌ, 문법 였λ₯˜λ₯Ό 읽기 μœ„ν•œ μ˜λ„μ μΈ λ°˜λ‘€μž…λ‹ˆλ‹€.

package invalid
namespace invalid

unknown Thing

이 μž…λ ₯을 μž„μ‹œ ν”„λ‘œμ νŠΈμ˜ examples/billing/main.gooo에 넣은 μ‹€ν—˜μ—μ„œλŠ” λ‹€μŒ 진단이 λ‚¨μ•˜μŠ΅λ‹ˆλ‹€.

examples/billing/main.gooo:4:1-4:8: error parse.unexpected-token: expected entity, activity, policy, or binding

λ©”μ‹œμ§€λŠ” μ„Έ λΆ€λΆ„μœΌλ‘œ 읽으면 λ©λ‹ˆλ‹€.

λΆ€λΆ„ μ•Œλ €μ£ΌλŠ” 것 λ‹€μŒ 행동
파일과 4:1-4:8 λ¬Έμ œκ°€ κ΄€μΈ‘λœ μ†ŒμŠ€ λ²”μœ„ ν•΄λ‹Ή μž…λ ₯의 4행을 μ—°λ‹€
parse.unexpected-token νŒŒμ„œκ°€ μΈμ‹ν•œ 였λ₯˜ μ’…λ₯˜ μ„ μ–Έ 문법을 ν™•μΈν•œλ‹€
expected entity, activity, policy, or binding 이 μœ„μΉ˜μ—μ„œ ν—ˆμš©λ˜λŠ” μ„ μ–Έ μ’…λ₯˜ ν‘œν˜„ν•˜λ €λ˜ μ˜λ―Έμ— λ§žλŠ” 선언을 μ„ νƒν•œλ‹€

이 λ©”μ‹œμ§€κ°€ unknown Thing을 μžλ™μœΌλ‘œ entity Thing으둜 λ°”κΎΈλΌλŠ” λœ»μ€ μ•„λ‹™λ‹ˆλ‹€. νŒŒμ„œλŠ” ν—ˆμš©λœ 문법을 μ•Œμ§€λ§Œ, μ‚¬μš©μžκ°€ μ–΄λ–€ 의미λ₯Ό μ„ μ–Έν•˜λ € ν–ˆλŠ”μ§€κΉŒμ§€ 이 였λ₯˜λ§ŒμœΌλ‘œ κ²°μ •ν•  μˆ˜λŠ” μ—†μŠ΅λ‹ˆλ‹€.

2. ν‹€λ¦° μž…λ ₯κ³Ό λΆ€μ‘±ν•œ 증거λ₯Ό κ΅¬λΆ„ν•˜κΈ°

μ•„λž˜ ν‘œλŠ” 문법 왕볡 κ²€μ¦κΈ°μ˜ κ΅¬μ‘°ν™”λœ λ³΄κ³ μ„œλ₯Ό μ½λŠ” λ²•μž…λ‹ˆλ‹€. λͺ¨λ“  Gooo λͺ…령이 같은 JSON ν˜•μ‹μ„ λ°˜ν™˜ν•œλ‹€λŠ” λœ»μ€ μ•„λ‹™λ‹ˆλ‹€.

λ³΄κ³ μ„œμ—μ„œ κ΄€μΈ‘ν•œ μƒνƒœ 의미 ν•΄μ„œλŠ” μ•ˆ λ˜λŠ” 해석
PASS κ³ μ •λœ ν•΄λ‹Ή κ²€μ‚¬μ˜ 쑰건을 λ§Œμ‘±ν–ˆλ‹€ μ–Έμ–΄ μ „μ²΄λ‚˜ μ‹€μ œ μ„œλΉ„μŠ€κ°€ μ™„μ„±λ˜μ—ˆλ‹€
FAIL_CLOSED + EXACT + SYNTAX_ROUNDTRIP_MISMATCH 확인 κ°€λŠ₯ν•œ μž…λ ₯μ—μ„œ ꡬ체적인 뢈일치λ₯Ό μ°Ύμ•˜λ‹€ 증거가 μ—†μ–΄μ„œ λ§‰μ—°νžˆ κΈ°λ‹€λ¦¬λŠ” μƒνƒœλ‹€
FAIL_CLOSED + LOWER_RESOLUTION + SYNTAX_ROUNDTRIP_EVIDENCE_UNKNOWN ν•„μš”ν•œ μž…λ ₯μ΄λ‚˜ 연결을 μΆ©λΆ„νžˆ ν™•μΈν•˜μ§€ λͺ»ν–ˆλ‹€ μ›λž˜ ν”„λ‘œκ·Έλž¨μ˜ μ˜λ―Έκ°€ ν‹€λ Έλ‹€κ³  증λͺ…ν–ˆλ‹€

FAIL_CLOSEDλŠ” λ‹€μŒ 단계λ₯Ό ν—ˆμš©ν•˜μ§€ μ•ŠλŠ”λ‹€λŠ” λœ»μ΄μ§€, λͺ¨λ“  κ²½μš°μ— 같은 μ›μΈμ΄λΌλŠ” 뜻이 μ•„λ‹™λ‹ˆλ‹€.

ꡬ체적인 문법 λ°˜λ‘€λΌλ©΄ μ†ŒμŠ€μ™€ 진단을 λ”°λΌκ°‘λ‹ˆλ‹€. 증거 뢀쑱이라면 λ ˆμ§€μŠ€νŠΈλ¦¬, λŒ€μƒ μž…λ ₯, κ°œλ… μ‚°μΆœλ¬Όμ˜ μ—°κ²°λΆ€ν„° λ³΅μ›ν•©λ‹ˆλ‹€. 두 경우 λͺ¨λ‘ 였λ₯˜λ₯Ό μ„±κ³΅μœΌλ‘œ λ°”κΎΈκ±°λ‚˜ 검사 λŒ€μƒμ„ 쀄여 ν†΅κ³Όμ‹œν‚€λŠ” 것이 해결은 μ•„λ‹™λ‹ˆλ‹€.

3. μ‹€μ œ λ°˜λ‘€λŠ” 무엇을 λ³΄μ‘΄ν•˜λŠ”κ°€

μ†ŒμŠ€κ°€ μ—°κ²°λœ 문법 λ°˜λ‘€ μ‹€ν—˜μ—μ„œλŠ” μ •μƒμœΌλ‘œ λ“±λ‘λœ billing μž…λ ₯ ν•˜λ‚˜λ₯Ό μœ„μ˜ 잘λͺ»λœ λ¬Έλ²•μœΌλ‘œ λ°”κΏ¨μŠ΅λ‹ˆλ‹€. 변경은 원본 μ €μž₯μ†Œκ°€ μ•„λ‹ˆλΌ 별도 μž„μ‹œ μž…λ ₯μ—μ„œ μˆ˜ν–‰ν–ˆμŠ΅λ‹ˆλ‹€.

검증 흐름은 λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€.

정상 μž…λ ₯κ³Ό κ³ μ •λœ 검사 μ •μ˜
    β†’ μž„μ‹œ μž…λ ₯의 문법 ν•œ κ³³ λ³€κ²½
    β†’ λ³€κ²½λœ μž…λ ₯μ—μ„œ κ°œλ… μ‚°μΆœλ¬Ό λ‹€μ‹œ 생성
    β†’ 문법 검증 μƒμ‚°μžκ°€ μ‹€νŒ¨ λ³΄κ³ μ„œ μ €μž₯
    β†’ μž¬μ‹€ν–‰μ΄ 같은 μ‹€νŒ¨ λ°”μ΄νŠΈ 생성
    β†’ μ†ŒλΉ„μžκ°€ κ·Έ λ³΄κ³ μ„œλ₯Ό μ„±κ³΅μœΌλ‘œ μ±„νƒν•˜μ§€ μ•ŠμŒ

κΈ°μ‘΄ μ‹€ν—˜ μ›λ³Έμ—μ„œ ν™•μΈλœ 관츑은 λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€.

κ΄€μΈ‘ ν•­λͺ© μ •ν™•ν•œ λ²”μœ„
검사 μ •μ˜ κΈ°μ‘΄ 문법 μ½”νΌμŠ€ 60개λ₯Ό μœ μ§€
κ²°κ³Ό 만쑱 59개, 뢈만쑱 1개, λ―Έν•΄κ²° 0개
ꡬ체적인 뢈만쑱 billing의 4ν–‰ 문법 진단
μƒμ‚°μž / μž¬μ‹€ν–‰ / μ†ŒλΉ„μž μ’…λ£Œ μ½”λ“œ 1 / 1 / 1
첫 λ³΄κ³ μ„œμ™€ μž¬μ‹€ν–‰ λ³΄κ³ μ„œ 같은 λ°”μ΄νŠΈ
μž…λ ₯ μ—°κ²° λ³€κ²½λœ μž…λ ₯μ—μ„œ λ§Œλ“  κ°œλ… μ‚°μΆœλ¬Όκ³Ό λ³€κ²½ν•˜μ§€ μ•Šμ€ λ ˆμ§€μŠ€νŠΈλ¦¬ μ‚¬μš©

59/60은 Gooo의 μ™„μ„±λ₯ λ„, 이 λ³€κ²½μ˜ κ°œμ„  μ μˆ˜λ„ μ•„λ‹™λ‹ˆλ‹€. 정상 μž…λ ₯ ν•˜λ‚˜λ₯Ό μ˜λ„μ μœΌλ‘œ κΉ¨λœ¨λ Έμ„ λ•Œ κ·Έ ν•œ 곳을 λ†“μΉ˜μ§€ μ•Šμ•˜λ‹€λŠ” μ œν•œλœ κ΄€μΈ‘μž…λ‹ˆλ‹€. 같은 λ°”μ΄νŠΈκ°€ λ‹€μ‹œ λ‚˜μ™”λ‹€λŠ” 사싀은 μž¬ν˜„μ„±μ΄μ§€, 독립적인 의미 증λͺ…μ΄λ‚˜ μ‚¬μš©μž 효용의 μ¦κ±°λŠ” μ•„λ‹™λ‹ˆλ‹€.

원본은 Actions μ‹€ν–‰κ³Ό 상세 μ‚°μΆœλ¬Όμ—μ„œ 좔적할 수 μžˆμŠ΅λ‹ˆλ‹€. 이 기둝은 μ‹€ν—˜ 컀밋 020bcaddabfb2199624b04d280369138c45b518f에 μ†ν•©λ‹ˆλ‹€. μž…λ ₯ λ³΄κ³ μ„œμ˜ 0으둜 μ±„μš΄ headλŠ” λͺ…μ‹œμ μœΌλ‘œ ν•©μ„±ν•œ μ‹λ³„μžμ΄λ©° μ‹€μ œ μ €μž₯μ†Œ μ»€λ°‹μ˜ λ‚΄μš©μ΄λΌκ³  μ£Όμž₯ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

ν•΄λ‹Ή μ‹€ν—˜μ˜ κΈ°λŠ₯ 검증 성곡과 PR의 전체 승인 μ—¬λΆ€λŠ” λ³„κ°œμž…λ‹ˆλ‹€. 이후 μ»€λ°‹μ˜ μƒνƒœλŠ” PRμ—μ„œ 확인해야 ν•˜λ©°, μ˜ˆμ „ 싀행을 μƒˆ μ»€λ°‹μ˜ 합격 증거둜 μž¬μ‚¬μš©ν•  μˆ˜λŠ” μ—†μŠ΅λ‹ˆλ‹€. Actions μ‚°μΆœλ¬Όμ€ 보쑴 κΈ°ν•œμ΄ μžˆμ„ 수 μžˆμŠ΅λ‹ˆλ‹€.

4. μ‹€νŒ¨ν•˜λ©΄ μ–΄λ””λΆ€ν„° ν™•μΈν•˜λŠ”κ°€

μ‹€νŒ¨κ°€ 생긴 κ³³ λ¨Όμ € 확인할 것 λ‹€μŒ μž‘μ—…
문법 뢄석 μ •ν™•ν•œ 파일, μœ„μΉ˜, 였λ₯˜ μ½”λ“œ μ†ŒμŠ€κ°€ ν‘œν˜„ν•˜λ €λŠ” μ„ μ–Έκ³Ό 문법을 λ§žμΆ˜λ‹€
μž…λ ₯κ³Ό 증거의 μ—°κ²° μž…λ ₯ μ‹λ³„μž, λ ˆμ§€μŠ€νŠΈλ¦¬, κ°œλ… μ‚°μΆœλ¬Ό λΉ μ§„ μž…λ ₯을 μ œκ³΅ν•˜κ±°λ‚˜ λ³€κ²½λœ μž…λ ₯μ—μ„œ λ‹€μ‹œ μƒμ„±ν•œλ‹€
λ³€ν™˜ 후보 생성 μ§€μ›ν•˜μ§€ λͺ»ν•œ λ³€ν™˜ 쑰건과 보쑴 의무 지원 λ²”μœ„λ₯Ό μ’ν˜€ μ„€λͺ…ν•˜κ±°λ‚˜ λ³€ν™˜κΈ°λ₯Ό ν™•μž₯ν•œλ‹€
μ†ŒλΉ„μž 검증 λ³΄κ³ μ„œκ°€ μ†ν•œ μž…λ ₯κ³Ό ν˜„μž¬ μž…λ ₯의 차이 μ‹€μ œ ν˜„μž¬ μž…λ ₯μ—μ„œ λ‹€μ‹œ κ²€μ¦ν•œλ‹€
CI 승인 경계 κΈ°λŠ₯ 검사와 λ³„λ„λ‘œ μ‹€νŒ¨ν•œ 승인 쑰건 승인 증거λ₯Ό ν™•μΈν•œλ‹€. κΈ°λŠ₯ 성곡을 승인으둜 λŒ€μ‹ ν•˜μ§€ μ•ŠλŠ”λ‹€

λ³€ν™˜κΈ°κ°€ μ§€μ›ν•˜μ§€ λͺ»ν•˜λŠ” μ½”λ“œλΌκ³  ν•΄μ„œ μ›λž˜ ν”„λ‘œκ·Έλž¨μ΄ 잘λͺ»λœ 것은 μ•„λ‹™λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄ 호좜의 λΆ€μˆ˜ 효과λ₯Ό 보쑴할 수 μžˆλŠ”μ§€ 증λͺ…ν•˜μ§€ λͺ»ν–ˆλ‹€λ©΄, κ·Έ 사싀을 μ„€λͺ…ν•˜κ³  λ³€ν™˜μ„ 보λ₯˜ν•΄μ•Ό ν•©λ‹ˆλ‹€. 이 κ²½κ³„λŠ” μ†ŒμŠ€ λ³€ν™˜κ³Ό νš¨κ³Όμ—μ„œ 더 μžμ„Ένžˆ μ„€λͺ…ν•©λ‹ˆλ‹€.

5. 증거가 생기면 μ£Όμž₯은 μ‚¬λΌμ§€λŠ”κ°€

μ£Όμž₯의 기둝을 μ§€μš°λŠ” λŒ€μ‹ , μ–΄λ–€ μž…λ ₯κ³Ό μ‘°κ±΄μ—μ„œ μ§€μ§€λ˜μ—ˆκ±°λ‚˜ λ°˜λ°•λ˜μ—ˆλŠ”μ§€λ₯Ό μ—°κ²°ν•˜λŠ” 것이 μ€‘μš”ν•©λ‹ˆλ‹€.

  • μ†ŒμŠ€κ°€ λ°”λ€Œλ©΄ μ˜ˆμ „ νŒμ •μ΄ μƒˆ μ†ŒμŠ€κΉŒμ§€ μžλ™μœΌλ‘œ μ„€λͺ…ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.
  • λ³΄κ³ μ„œλ₯Ό μ €μž₯ν–ˆλ‹€κ³  ν•΄μ„œ μ‹€νŒ¨κ°€ μ„±κ³΅μœΌλ‘œ λ°”λ€Œμ§€ μ•ŠμŠ΅λ‹ˆλ‹€.
  • UNKNOWN을 ν•΄μ†Œν•˜λ €λ©΄ λΆ€μ‘±ν–ˆλ˜ κ·Όκ±°λ₯Ό μ±„μ›Œ 같은 쑰건으둜 λ‹€μ‹œ νŒλ‹¨ν•΄μ•Ό ν•©λ‹ˆλ‹€.
  • λ°˜λ‘€λ₯Ό λ°œκ²¬ν–ˆλ‹€λ©΄ λˆ„λ½ 증거와 μ„žμ–΄ 감좔지 μ•Šκ³ , ꡬ체적인 λ°˜λ‘€λ₯Ό 보쑴해야 ν•©λ‹ˆλ‹€.

이 연결이 개발 κ³Όμ •μ˜ provenanceμž…λ‹ˆλ‹€. μ‚¬λžŒμ΄ 문제λ₯Ό κ³ μΉ˜λŠ” 일, μ—μ΄μ „νŠΈκ°€ 후보λ₯Ό μƒμ„±ν•˜λŠ” 일, μ‹œμŠ€ν…œμ΄ 후보λ₯Ό κΈ°κ°ν•˜λŠ” 일 λͺ¨λ‘ 무엇을 근거둜 λ‹€μŒ μƒνƒœλ‘œ μ΄λ™ν–ˆλŠ”μ§€ 남겨야 ν•©λ‹ˆλ‹€. λ‹€λ§Œ λͺ¨λ“  도ꡬ가 이미 ν•˜λ‚˜μ˜ ν†΅μΌλœ 였λ₯˜Β·μ›μΈ APIλ₯Ό μ œκ³΅ν•˜λŠ” 것은 μ•„λ‹™λ‹ˆλ‹€. μ‹€μ œ 지원 λ²”μœ„μ™€ μ‹€ν—˜ 쀑인 섀계λ₯Ό κ΅¬λΆ„ν•΄μ„œ 읽어 μ£Όμ„Έμš”.

더 깊이 읽기