Complete mk to py translate functions - #2
Open
yonghun8343 wants to merge 1 commit into
Open
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
머꼬 → Python 번역기 설계: 결정 사항 정리 (option.md)
mowkow -py 가.mk→가.py번역 기능을 설계하며, 판단이 필요했던 갈림길과 그에 대한 선택을 정리한 문서입니다.날짜: 2026-07-22
결정 1 — 번역의 목적 (생성된
가.py의 모습)python 가.py실행 시 인터프리터와 동일한 결과. 가독성보다 '동일 동작' 우선.선택: 교육용 읽기 좋은 코드.
→ 런타임 라이브러리로 감싸는 방식이 아니라, 각 머꼬 구문을 자연스러운 Python 구문으로 번역하는 코드 생성기.
결정 2 — 첫 버전(v1) 기능 범위
선택: 핵심 + 리스트/기본자료.
→ 매크로·quasiquote(특이인용/비인용)는 v1 제외.
결정 3 — 리스트/cons 계열의 Python 표현
xs[0], 꼬→xs[1:], 짝→[a]+xs, 공→[],'(이름이 뭐니?)→["이름이","뭐니?"](심볼=문자열). 가장 읽기 좋음. 점쌍/엄밀 cons 의미 일부 손실(교육용엔 드묾).선택: 네이티브 Python 리스트.
결정 4 — 구현 아키텍처
_parse.py의Data구조를_trans.py가 순회하며 Python 소스 생성. 파서 재사용, 출력 서식 완전 통제.ast+ast.unparse()선택: 접근 A.
참고 — 합의된 의미 주의사항(caveats)
교육용 가독성을 우선하면서 발생하는, 인터프리터와의 미세한 의미 차이(설계 문서에 상세 기록):
/→ Python//(정수 나눗셈).(읽기)→int(input())(정수 입력만 가정).["안녕"]형태로, 인터프리터의(안녕)과 다름.머꼬 → Python 번역 기능 (
mowkow -py) 매뉴얼1. 개요
머꼬로 작성한 프로그램(
.mk)을 교육용으로 읽기 좋은 Python 코드(.py)로 자동 번역합니다."이 머꼬 코드는 이런 Python과 같구나"를 눈으로 확인하며 배울 수 있도록, 각 머꼬 구문을
가장 자연스러운 Python 구문으로 옮깁니다.
예를 들어
가.mk를 번역하면가.py가 만들어집니다.2. 사용법
-py또는--python옵션을 붙이면 번역 모드로 동작합니다..py로 바꾼 파일이 같은 위치에 생성됩니다. (가.mk→가.py)mk -py 가.mk 나.mk-py를 붙이지 않으면 기존처럼 해석기(인터프리터)로 실행됩니다.동작 규칙
.py파일이 있으면 덮어쓰지 않고 경고만 출력합니다.library_kor.scm)를 불러오지 않습니다. 라이브러리 함수는아래 표에 따라 Python 관용구로 직접 번역됩니다.
생성된 파일 맨 위에는 다음과 같은 안내 주석이 붙습니다.
3. 번역 예제
3.1 덧셈 (
add.mk)머꼬:
Python (
add.py):3.2 최대공약수·최소공배수 (
gcd_lcm.mk)머꼬:
Python (
gcd_lcm.py):3.3 리스트와 인용 (
greet.mk)머꼬:
Python (
greet.py):4. 번역 규칙
4.1 특수형 (문장 문맥)
(정의 (f 가 나) 본문)def f(가, 나):+return 본문(정의 x 식)x = 식(람다 (가) 본문)lambda 가: 본문(만약 조건 참값 거짓값)if/else블록 · 식 문맥:참값 if 조건 else 거짓값(조건 (c1 v1) (c2 v2) (#참 v3))if c1: … elif c2: … else: …(#참절 →else)(잠시 ((x e1)(y e2)) 본문)x = e1/y = e2/ 본문 (식 문맥에선 중첩 IIFE)(해 e1 … en)(인용 x)/'x[...])4.2 연산자
+-*+-*///(정수 나눗셈)=<>==<>그리고&/또는|/부정~and/or/not4.3 리스트·기본 자료
공/#참[]/True(머 xs)/(꼬 xs)xs[0]/xs[1:](짝 a xs)[a] + xs(리스트 a b c)[a, b, c]'(가 나)/'심볼["가", "나"]/"심볼"4.4 표준 라이브러리 함수
(머리 x)/(꼬리 x)x[0]/x[1:](머머 x)/(꼬머 x)x[0][0]/x[1](절댓값 x)abs(x)(거꾸로 xs)xs[::-1](접합 a b)a + b(그대로 x)x(아톰? x)/(단? x)not isinstance(x, list)(리스트? x)/(열? x)isinstance(x, list)(공? x)x == [](짝? x)isinstance(x, list) and x != [](같다? a b)a == b(읽기)/(쓰기 x)int(input())/print(x)(한맵 f xs)/(맵 f xs)[f(e) for e in xs](맵 f xs ys …)list(map(f, xs, ys, …))(머리돌기 f 초기 xs)(foldl)functools.reduce(f, xs, 초기)(꼬리돌기 f 초기 xs)(foldr)functools.reduce(lambda a, b: f(b, a), reversed(xs), 초기)머리돌기/꼬리돌기가 쓰이면 생성 파일 맨 위에import functools한 줄이 자동으로 추가됩니다.4.5 식별자 변환
Python 식별자로 그대로 쓸 수 있는 한글 이름(
합,최대공약수)은 변경 없이 사용됩니다.특수 문자가 든 이름은 다음 규칙으로 안전하게 치환됩니다.
->/=>_로_조건->만약→조건_로_만약?_물음소수?→소수_물음!_느낌바꿔!→바꿔_느낌-_arg-lists→arg_lists_를 붙입니다._를 붙입니다._2,_3… 을 붙여 구분합니다.5. 주의사항 (인터프리터와의 차이)
교육용 가독성을 우선하기 때문에, 해석기로 실행한 결과와 미세하게 다를 수 있는 부분입니다.
/는 Python의 정수 나눗셈//로 번역됩니다.(읽기)는int(input())로 번역됩니다(정수 입력을 가정).0을 참으로 취급하지만 Python은 거짓으로 취급합니다.조건에 정수
0이 직접 오는 드문 경우 동작이 달라질 수 있습니다.(대부분의 조건은 비교식이라 영향이 없습니다.)
["안녕"]으로 나옵니다.해석기의
(안녕)표기와 다릅니다.(가 . 나))은 v1에서번역하지 않습니다. 이런 구문을 만나면 해당 파일 번역을 건너뛰고 한글 오류를 출력합니다.
6. 오류 처리
예:
가.mk:3: 번역 오류: 매크로는 v1에서 지원하지 않습니다.파일 하나가 잘못되어도 전체 번역이 중단되지 않습니다.