-
Kip은 터키어의 문법 격과 서법(mood) 을 타입 시스템에 통합한 실험적 프로그래밍 언어로, 자연어 형태론과 타입 이론의 결합을 탐구함
- 터키어의 명사 격 변화와 모음 조화를 코드 구조에 반영해, 함수 인자 관계를 격 접미사로 구분하고 인자 순서의 유연성을 지원함
-
패턴 매칭, 다형 타입, 귀납적 자료형, 입출력 효과 등 현대 함수형 언어의 주요 기능을 터키어 문법 형태로 표현함
-
Foma 형태소 분석기와 Haskell Stack을 이용해 빌드하며, WASM 기반 브라우저 실행 환경과 바이트코드 캐시(.iz) 기능을 제공함
- 언어학과 프로그래밍 언어 설계의 교차점을 보여주는 연구·교육용 프로젝트로, 자연어 기반 언어 설계 가능성을 실험하는 사례임
Kip 개요
- Kip은 터키어 단어 ‘kip’(서법) 에서 이름을 따온 언어로, 터키어 문법 격을 타입 시스템에 포함시킨 실험적 언어
- 터키어의 명사 격 변화(ismin halleri) 와 모음 조화(vowel harmony) 를 프로그래밍 언어 설계에 통합
-
연구 및 교육 목적의 프로젝트로, 실제 배포용 언어는 아님
-
터키어 및 영어 튜토리얼이 제공되어 Kip 프로그램 작성법을 학습 가능
- 문법과 동작은 실험적 단계로, 향후 변경 가능성이 있음
언어 특징
-
터키어 문법 격을 타입으로 사용
- 주격, 목적격, 여격, 처격, 탈격, 속격, 도구격, 소유격 등 8가지 격을 지원
- 각 격은 접미사로 표시되며, 함수 인자 간 관계를 명시적으로 구분
-
유연한 인자 순서
- 격 접미사가 인자 관계를 명확히 하므로, 인자 순서를 바꿔도 동일한 의미 유지
- 예: (5'le 3'ün farkını) yaz. 와 (3'ün 5'le farkını) yaz. 는 동일한 결과
-
귀납적 자료형 정의
- 터키어 구문으로 대수적 자료형을 정의
- 예:
Bir doğal-sayı
ya sıfır
ya da bir doğal-sayının ardılı
olabilir.
-
다형 타입 지원
- 제네릭 자료구조 정의 가능
- 예: (öğe listesi) 형태로 리스트 자료형 정의
-
패턴 매칭
- 조건 접미사 -sa/-se를 사용해 패턴 매칭 수행
- 중첩 패턴, 바인더, 와일드카드(değilse) 지원
-
상수 정의
-
diyelim 키워드로 명명된 상수 선언
- 예: sıfırın ardılına bir diyelim.
-
입출력 및 효과 처리
-
-ip/-ıp/-up/-üp 접미사로 순차 실행, olarak으로 바인딩
- 예:
selamlamak,
isim olarak okuyup,
("Merhaba "yla ismin birleşimini) yazmaktır.
-
기본 타입
- 정수(tam-sayı): toplamı, farkı, çarpımı 등 연산 지원
- 문자열(dizge): uzunluğu, birleşimi, tam-sayı-hali 제공
- 입출력: yazmak, okumak 명령 지원
-
주석 및 리터럴
- 주석: (* ... *)
- 리터럴: "merhaba"'yı yaz. 형태로 격 접미사 포함
설치 및 실행
-
필수 도구
-
Foma: 유한상태 형태소 분석 툴킷
-
Stack: Haskell 빌드 도구
-
빌드 방법
-
install.sh 스크립트 실행 또는 stack build 명령으로 수동 빌드
-
vendor/trmorph.fst에 TRmorph 변환기 포함
-
실행
- REPL: stack exec kip
- 파일 실행: stack exec kip -- --exec path/to/file.kip
- PATH 설치: stack install
WASM Playground
-
playground/ 디렉터리에 브라우저 실행용 빌드 포함
-
kip-playground를 wasm32-wasi로 컴파일
- HTML/JS 하니스로 브라우저 내 Kip 실행 가능
- 세부 빌드 절차는 playground/README.md 참고
바이트코드 캐시(.iz)
- 각 .kip 파일의 타입 검사 결과를 캐시하여 .iz 파일로 저장
- 소스나 의존성이 변경되지 않으면 캐시 재사용
-
.iz 파일 삭제 시 새로 파싱 및 타입 검사 수행
- 컴파일러 해시 포함으로, 버전 변경 시 자동 무효화
예제 프로그램
- 자연수 정의, 상수 선언, 덧셈 함수, 결과 출력 예시 포함
Bir doğal-sayı
ya sıfır
ya da bir doğal-sayının ardılı
olabilir.
sıfırın ardılına bir diyelim.
birin ardılına iki diyelim.
ikinin ardılına üç diyelim.
(bu doğal-sayıyla) (şu doğal-sayının) toplamı,
bu sıfırsa,
şu,
öncülün ardılıysa,
(öncülle) (şunun ardılının) toplamıdır.
(ikiyle üçün toplamını) yaz.
프로젝트 구조
-
app/ : CLI 진입점 (Main.hs)
-
src/Kip/ : AST, 캐시, 인터프리터, 파서, 렌더러, 타입 검사기 포함
-
lib/ : 기본 모듈(giriş.kip, temel.kip, temel-liste.kip 등)
-
tests/ : 성공(succeed/) 및 실패(fail/) 테스트 케이스
-
vendor/ : trmorph.fst 형태소 변환기
테스트
-
stack test 명령으로 실행
-
tests/succeed/: 통과해야 하는 테스트
-
tests/fail/: 실패해야 하는 테스트
형태소 분석
- Kip은 TRmorph를 사용해 터키어 형태소 분석 수행
- 다의적 단어(예: “takası”)는 가능한 모든 해석을 유지한 채 파싱
- 타입 검사 단계에서 의미를 결정
- 특정 해석을 강제하려면 아포스트로피(') 사용 (taka'sı, takas'ı)
라이선스