한글 키워드로 작성하는 프로그래밍 언어
A programming language written entirely in Korean keywords.
Kcode는 모든 키워드를 한글로 작성하는 프로그래밍 언어입니다.
인터프리터·C 코드 생성·LLVM IR 세 가지 실행 방식을 지원하며,
임베디드부터 AI 연동, GPU 가속까지 단일 언어로 다룰 수 있도록 설계되었습니다.
// hello.han — 첫 번째 Kcode 프로그램
헌법 안전:
법령: 참
법위반: 오류발생("계약 위반")
헌법끝
정의 인사(문자 이름 = "세상"):
출력("안녕하세요, " + 이름 + "!")
인사()
인사("Kcode")
모든 예약어가 한글입니다. if 대신 만약, while 대신 동안, class 대신 객체.
| 방식 | 설명 | 용도 |
|---|---|---|
| 인터프리터 | AST 직접 실행 | 빠른 개발·스크립팅 |
| C 코드 생성 | .han → C → 네이티브 |
임베디드·크로스 컴파일 |
| LLVM IR 생성 | .han → LLVM IR → 실행파일 |
고성능·최적화 |
IEC 61508 / ISO 26262 수준의 안전 계약을 언어 차원에서 강제합니다.
계약 없는 파일은 컴파일이 거부됩니다.
헌법 안전정책:
법령: 전류 < 10.0
법위반: 긴급정지()
헌법끝
가속기 블록으로 행렬 연산을 GPU/NPU에 자동 위임합니다.
가속기:
행렬곱(A, B) => 결과
가속기끝
Claude, OpenAI, Gemini, 로컬 LLM을 한 줄로 연결합니다.
AI 모델 = AI연결("claude", "api키")
글자 답변 = 모델.질문("안녕하세요")
글자 설명 = 모델.사진분석(사진원본, "이 사진을 설명해줘")
GPIO / I2C / SPI / UART / MODBUS / CAN / MQTT / ROS2를 내장 키워드로 제어합니다.
GPIO 핀 = GPIO연결(13)
핀.출력(참)
I2C 센서 = I2C연결(0x48)
실수 온도 = 센서.읽기()
| 키워드 | 설명 | 예시 |
|---|---|---|
정수 |
정수 (integer) | 42, -7 |
실수 |
실수 (float) | 3.14 |
문자 |
문자열 (string) | "안녕" |
글자 |
단일 문자 (char) | '가' |
논리 |
불리언 | 참, 거짓 |
없음 |
null | |
배열 |
동적 배열 | [1, 2, 3] |
사전 |
키-값 쌍 | {"키": "값"} |
행렬 |
2D 배열 (AI용) | [[0.1, 0.2], [0.3, 0.4]] |
사진 |
이미지 파일 | 사진열기("photo.jpg") |
그림 |
캔버스 | 그림만들기(800, 600) |
함수형 |
람다 변수 | (x) => x * x |
// 조건문
만약 점수 >= 90:
출력("A 등급")
아니면 만약 점수 >= 80:
출력("B 등급")
아니면:
출력("C 이하")
// 반복문
반복 i 부터 1 까지 10:
출력(i)
각각 값 안에 배열:
출력(값)
// 반환값 있는 함수
함수 더하기(정수 가, 정수 나):
반환 가 + 나
// 반환값 없는 함수
정의 인사(문자 이름 = "손님"):
출력("안녕하세요, " + 이름)
// 람다
함수형 제곱 = (정수 x) => x * x
객체 사람:
문자 이름
정수 나이
함수 생성(자신, 문자 이름, 정수 나이):
자신.이름 = 이름
자신.나이 = 나이
정의 소개(자신):
출력(자신.이름 + " / " + 자신.나이 + "살")
객체 학생 이어받기 사람:
문자 학교
홍길동 = 사람("홍길동", 20)
홍길동.소개()
시도:
실수 결과 = 10.0 / 입력("나눌 수: ")
출력(결과)
실패시:
출력("오류 발생")
항상:
출력("계산 완료")
사진 원본 = 사진열기("photo.jpg")
원본.크기조절(640, 480)
원본.흑백()
원본.경계선()
원본.저장("결과.jpg")
배열 얼굴들 = 원본.얼굴찾기()
출력("얼굴 수: " + 얼굴들.길이())
// 헌법 — 전역 최상위 계약
헌법 안전정책:
법령: 온도 < 85.0 그리고 전류 < 10.0
법위반: 긴급정지()
헌법끝
// 법령/법위반 — 함수 단위 계약
함수 나누기(실수 가, 실수 나):
법령: 나 != 0.0
법위반: 오류발생("0으로 나눌 수 없습니다")
반환 가 / 나
#GPU사용
행렬 A = [[1.0, 2.0], [3.0, 4.0]]
행렬 B = [[5.0, 6.0], [7.0, 8.0]]
가속기:
행렬곱(A, B) => 결과
활성화(결과) => 출력값
가속기끝
출력(출력값)
헌법 IoT안전:
법령: 온도 < 80.0
법위반: 긴급정지()
헌법끝
I2C 온도센서 = I2C연결(0x48)
MQTT 브로커 = MQTT연결("192.168.1.1", 1883)
브로커.구독("센서/온도", 처리()
출력("수신 완료")
처리끝)
타이머 1000ms:
실수 온도 = 온도센서.읽기()
브로커.발행("센서/온도", 글자(온도))
타이머끝
- GCC 또는 Clang (C11 이상)
- CMake 3.16 이상
- LLVM 14+ (LLVM 백엔드 사용 시)
git clone https://github.com/your-username/KoreanCode.git
cd KoreanCode
cmake -B build
cmake --build buildmake # 인터프리터 빌드
make codegen # C 코드 생성기 빌드
make llvm # LLVM IR 생성기 빌드 (LLVM 필요)# 인터프리터 (바로 실행)
./kcode hello.han
# REPL (대화형 모드)
./kcode
# C 코드 생성
./kcode_gen hello.han
# LLVM IR 생성
./kcode_llvm hello.han| 확장자 | 용도 |
|---|---|
.han |
Kcode 소스 파일 |
.hg |
Kcode 헤더 파일 |
절대 올림 내림 반올림 최대 최소
제곱 제곱근 로그 사인 코사인 탄젠트
난수 난정수 파이 자연e 무한대
길이 찾기 포함 시작 끝 자르기
바꾸기 분리 합치기 뒤집기 되풀이
대문자 소문자 다듬기 정수 실수 문자
파일열기 파일닫기 파일읽기 파일쓰기
파일줄읽기 파일줄쓰기 파일전체읽기 파일전체쓰기
파일있음 파일크기 파일목록 파일지우기
파일복사 파일이동 폴더만들기
행렬곱 전치 역행렬 평균 분산 표준편차
시그모이드 렐루 소프트맥스 탄에이치
.han 소스파일
│
▼
[렉서] 한글 키워드 → 토큰
│
▼
[파서] 토큰 → AST
│
▼
[계약 검증] 계약 없으면 컴파일 거부
│
├──────────────┬──────────────┐
▼ ▼ ▼
[인터프리터] [C 코드 생성] [LLVM IR 생성]
즉시 실행 → gcc 연동 → 최적화 실행파일
| 항목 | 결정 | 이유 |
|---|---|---|
| 포인터 | 없음 | GC 자동 관리 |
| 메모리 | GC 내장 (참조카운트 + 마크스윕) | 사용 편의성 |
| 들여쓰기 | Python 방식 | 가독성 |
| 계약 | 강제 (없으면 컴파일 거부) | 안전성 |
| 외부 의존성 | 0 (순수 C 구현) | 이식성 |
| 키워드 길이 | 3자 이내 권장 | 타이핑 편의성 |
| 단계 | 내용 | 상태 |
|---|---|---|
| 렉서 / 파서 | 한글 토큰 + AST | ✅ |
| 인터프리터 | 트리 워킹 실행 | ✅ |
| C 코드 생성 | AST → C | ✅ |
| LLVM IR 생성 | AST → LLVM IR | ✅ |
| 바이트코드 VM | AST → VM 바이트코드 | ✅ |
| 계약 시스템 | 헌법/법률/규정/법령/법위반 | ✅ |
| GPU 가속 | TPU/NPU/GPU/CPU 폴백 | ✅ |
| 임베디드 | GPIO/I2C/SPI/UART/CAN/MODBUS | ✅ |
| AI 연동 | LLM API + 온톨로지 | ✅ |
| REPL | 대화형 셸 | ✅ |
| WebAssembly | 브라우저 실행 | ✅ |
| MCP 서버 | AI 도구 프로토콜 | ✅ |
| Web IDE | Monaco 편집기 + WASM | 🔲 예정 |
| 패키지 생태계 | 레지스트리 + FFI | 🔲 예정 |
MIT License — 자유롭게 사용, 수정, 배포 가능합니다.
계약 없는 코드는 Kcode가 아니다.