터키어 문법 격(case)에 기반한 프로그래밍 언어 Kip

3 weeks ago 11

  • 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'ı)

라이선스

  • LICENSE 파일 참조

Read Entire Article