한선씨 HanSeon-C

한글·숫자·띄어쓰기만으로 모든 것을 표현하는 프로그래밍 언어.
자연어 입력에서 4상균형3진 벡터 실행까지 6단계 파이프라인으로 완성됩니다.

핵심 특징

T O A U

4상균형3진법

T·O·A·U 4상 + 균형3진수. 90+ 연산 트릿 네이티브. 나눗셈=자연반올림.

가나다

한글 네이티브

변수·함수·만약·동안 — 한글 키워드 129+개. 번역 없이 실행.

225 + 24

배터리 포함

225 내장함수 · 24 표준 라이브러리. 문자열·수학·네트워크·FPGA까지.

즉시 번역

Python·JS·C·Rust·Verilog·VHDL ↔ 한선씨 양방향.

Hello World

; hello.한선 — 고수준 모드
변수 이름 = "세계"
함수 인사(대상) {
  반환 "안녕, " + 대상 + "!"
}
출력값(인사(이름))

3진법 논리 (Kleene)

상(Phase)의미한선씨 키워드
+1T참 / 데이터
0O모름 / 명령모르면
-1A거짓 / 체이닝거짓
U구분자 / 경계

나눗셈 규칙: 한선씨의 정수 나눗셈은 자연반올림(|r| ≤ |b|/2)입니다. 버림(truncation)이 아닙니다.

6단계 파이프라인

자연어 입력이 4상균형3진 벡터 실행까지 변환되는 컴파일 파이프라인.

자연어
Stage 1
KPS 구문
Stage 2
한선씨 IR
Stage 3
RPN
Stage 4
크라우니어
Stage 5
벡터3진
Stage 6
Stage 1

자연어 입력

한국어 텍스트를 형태소 분석 후 의도(Intent)를 추출합니다. 동사·명사·조사를 구분하여 실행 의도를 파악합니다.

형태소분석 의도추출 NLP
Stage 2

KPS 구문

문제(K)→해법(P)→상태(S) 3-tuple로 구조화합니다. 6561 verse 세계관의 의미 단위로 매핑합니다.

KPS 6561-verse 구조화
Stage 3

한선씨 IR

35가지 노드 타입과 14가지 기본 타입으로 구성된 중간 표현(AST)으로 변환합니다.

35 NodeType 14 Type AST
Stage 4

한선씨 RPN

역폴란드 표기법(후위). 한글·숫자·띄어쓰기만 허용. ISA729 opcode와 1:1 대응합니다.

역폴란드 한글+숫자 ISA729 1:1
Stage 5

크라우니어

한글 1글자 = 6 트릿 인코딩. 초성→섹터, 중성→그룹, 종성→명령으로 ISA729에 매핑됩니다.

6트릿=한글1자 초성/중성/종성 ISA729
Stage 6

벡터4상3진 실행

27 트릿 = 1 큐브 = 기본 실행 단위. TOAU 4상 균형 3진 VM에서 네이티브 실행됩니다.

27트릿 큐브 TOAU VM 3진 네이티브

IR 노드 타입 (35종)

분류노드 타입
리터럴INT_LIT FLOAT_LIT STR_LIT BOOL_LIT NULL_LIT
식별자VAR_DECL VAR_REF ASSIGN
연산BINOP UNOP COMPARE LOGIC
함수FUNC_DEF FUNC_CALL RETURN CLOSURE
제어IF ELIF ELSE WHILE BREAK CONTINUE
컬렉션ARRAY_LIT MAP_LIT INDEX SLICE
구조체STRUCT_DEF STRUCT_NEW FIELD_ACCESS
예외TRY CATCH THROW
모듈IMPORT EXPORT PROGRAM
3진TRIT_OP CUBE_OP

IR 기본 타입 (14종)

정수실수문자열논리모름 배열함수구조체 트릿큐브버퍼없음

고수준 한선씨 문법

hanseonc_high가 컴파일하는 C-like 구문. 모든 키워드는 한글입니다.

변수 선언

변수 정수값 = 42
변수 실수값 = 3.14
변수 문자열값 = "크라우니"
변수 참거짓 = 참          ; 참=+1, 거짓=-1, 모르면=0
변수 배열값 = [1, 2, 3, 4, 5]
변수 맵값 = 맵생성()

함수

함수 더하기(a, b) {
  반환 a + b
}

; 재귀
함수 팩토리얼(n) {
  만약 (n <= 1) { 반환 1 }
  반환 n * 팩토리얼(n - 1)
}

출력값(문자열변환(더하기(3, 7)))    ; 10
출력값(문자열변환(팩토리얼(10)))    ; 3628800

조건문

만약 (점수 >= 90) {
  출력값("A")
} 혹시 (점수 >= 80) {
  출력값("B")
} 혹시 (점수 >= 70) {
  출력값("C")
} 아니면 {
  출력값("F")
}

반복문

; while
변수 i = 0
동안 (i < 10) {
  출력값(문자열변환(i))
  i = i + 1
}

; 배열 순회
변수 목록 = ["사과", "배", "포도"]
변수 j = 0
동안 (j < 길이(목록)) {
  출력값(목록[j])
  j = j + 1
}

배열

변수 arr = [10, 20, 30]
arr = 추가(arr, 40)           ; 끝에 추가 (재대입 필수)
arr = 설정(arr, 0, 99)        ; 인덱스 0 → 99
arr = 정렬(arr)               ; 오름차순
출력값(문자열변환(길이(arr)))  ; 4

주의: 추가·설정·맵넣어는 새 값을 반환합니다. 반드시 재대입하세요. arr = 추가(arr, 값)

맵 (해시맵)

변수 m = 맵생성()
m = 맵넣어(m, "이름", "크라우니")
m = 맵넣어(m, "버전", 10)
출력값(맵꺼내(m, "이름"))     ; 크라우니
변수 키들 = 맵키목록(m)

예외 처리

시도 {
  변수 결과 = 위험한작업()
  출력값(결과)
} 잡아 (오류) {
  출력값("오류: " + 오류)
}

구조체

구조체 사람 {
  이름
  나이
  직업
}

변수 홍길동 = 사람새("홍길동", 30, "개발자")
출력값(홍길동.이름)
출력값(문자열변환(홍길동.나이))

가져오기 (import)

가져오기 "문자열.한선"
가져오기 "JSON.한선"
가져오기 "네트워크.한선"
가져오기 "셀코어"        ; CROWNY_STD 경로 자동 검색

논리 연산자

한선씨의미예제
그리고AND (&&)참 그리고 참 → 참
또는OR (||)거짓 또는 참 → 참
아닌NOT (!)아닌 참 → 거짓
모르면모름=0모르면 → 0 (Kleene 3값)

RPN 문법 (역폴란드)

한선씨의 저수준 표현. 스택 기반, 후위표기법. 한글·숫자·띄어쓰기만 사용합니다.

RPN = ISA729 1:1 대응. 2026-04-08 확정. C-like 고수준 문법은 편의 레이어이며, 진짜 한선씨의 본질은 이 RPN입니다.

기본 규칙

  • 연산자는 피연산자 에 옴 (후위)
  • 공백이 토큰 구분자
  • 숫자·한글 키워드만 — 특수문자 없음
  • 주석: ; 뒤 단어 하나만 (다중 단어 주석 = 컴파일 오류)

예제

; 덧셈
3 7 더해 보여줘 끝

; 조건 분기
10 5 크냐 이면 큰수 아니면 작은수 끝

; 반복
0 i 저장해
다시 i 10 작냐 이면 i 보여줘 i 1 더해 i 저장해 돌아가 끝

; 함수 정의
곱하기 함수야 불러서 ;a ;b
  가져와 가져와 곱해
끝

주요 RPN 키워드 (129+)

분류키워드
산술더해 곱해 나눠 나머지 거듭제곱해
비교같냐 다르냐 크냐 작냐 크거나같냐 작거나같냐
논리그리고해 또는해 부정해
스택저장해 가져와 복사해 버려 바꿔
제어이면 아니면 다시 돌아가 끝내
I/O보여줘 받아 줄바꿔
함수함수야 불러서 반환해
문자열연결해 글자수해 부분가져와
배열배열만들어 넣어 꺼내 길이가져와
3진삼진인코딩해 삼진디코딩해 트릿해

스택 동작 예시

; 3 + 7 * 2 = 17 (후위: 3 7 2 곱해 더해)
3 7 2 곱해 더해 보여줘 끝
; 스택: [3] → [3,7] → [3,7,2] → [3,14] → [17] → 출력

FPGA 회로방언

Verilog/VHDL을 한글로 기술하는 회로 방언. 가져오기 "하드웨어.한선" 으로 RPi5·GPIO까지 확장.

키워드 대응표

한선씨Verilog 대응설명
회로module회로 블록 시작
끝회로endmodule회로 블록 끝
입력input입력 포트 선언
출력output출력 포트 선언
신호wire와이어 선언
레지스터reg레지스터 선언
@상승posedge클럭 상승 엣지
@하강negedge클럭 하강 엣지
@조합always @(*)조합 논리 블록
항상alwaysalways 블록
초기화initialinitial 블록
비트폭[n:0]비트 폭 지정

예제 — 4비트 카운터

회로 카운터4비트 (
  입력 클럭
  입력 초기화신호
  출력 레지스터 [비트폭 4] 카운트
)

항상 @상승(클럭 또는 @상승(초기화신호)) {
  만약 (초기화신호 == 1) {
    카운트 = 0
  } 아니면 {
    카운트 = 카운트 + 1
  }
}

끝회로

예제 — 3진 ALU (27트릿)

회로 삼진ALU (
  입력 [비트폭 27] 피연산자가
  입력 [비트폭 27] 피연산자나
  입력 [비트폭 6]  연산코드
  출력 레지스터 [비트폭 27] 결과
  출력 레지스터 오버플로우
)

항상 @조합 {
  만약 (연산코드 == 0) { 결과 = 피연산자가 + 피연산자나 }
  혹시 (연산코드 == 1) { 결과 = 피연산자가 - 피연산자나 }
  혹시 (연산코드 == 2) { 결과 = 피연산자가 * 피연산자나 }
  아니면 { 결과 = 0 }
}

끝회로

내장함수 225개

가져오기 없이 즉시 사용 가능한 함수들. 분류별 목록.

I/O

출력 출력값 입력 체계 읽기 쓰기 덧쓰기 파일존재 현재경로

문자열

글자수 글자 부분 포함 문자열변환 숫자변환 대문자 소문자 공백제거 나누기 합치기 바꾸기

수학

거듭제곱 루트 사인 코사인 탄젠트 로그 무작위 절댓값 반올림 내림 올림 팩토리얼 최댓값 최솟값

배열

길이 추가 설정 정렬 역순 검색 필터 변환 합산 슬라이스

맵 (해시맵)

맵생성 맵넣어 맵꺼내 맵키목록 맵값목록 맵있냐 맵지워 맵크기

네트워크 (TCP)

TCP대기 TCP수락 TCP읽기 TCP쓰기 TCP닫기 소켓생성 소켓바인드 소켓보내기 소켓받기

3진 / 트릿

삼진인코딩 삼진디코딩 삼진덧셈 트릿생성 큐브생성 트릿읽기 트릿쓰기

바이트버퍼

버퍼생성 버퍼쓰기 버퍼읽기 버퍼잘라 버퍼합치기 버퍼크기

셀 (Cell)

셀생성 셀연결 셀읽기 셀설정 셀상태 셀링크

시스템 / 보안

현재시간 타임스탬프 해시_SHA256 추적시작 추적끝 종료

주요 함수 레퍼런스

함수인자반환예제
글자수(s)문자열정수글자수("안녕") → 2
부분(s,시작,끝)문자열,정수,정수문자열부분("한선씨",0,2) → "한선"
포함(s,검색)문자열,문자열+1 또는 -1포함("크라우니","라") → 1
거듭제곱(밑,지수)숫자,숫자숫자거듭제곱(2,10) → 1024
무작위(최소,최대)정수,정수정수무작위(1,6) → 1~6
삼진인코딩(n)정수문자열삼진인코딩(42) → "TTAO"

표준 라이브러리 24개

가져오기 "이름.한선"으로 불러옵니다. CROWNY_STD 환경변수로 경로 자동 설정.

가져오기 "문자열.한선"
가져오기 "JSON.한선"
가져오기 "네트워크.한선"
가져오기 "셀코어"          ; .한선 없이도 동작
#라이브러리용도주요 기능
1문자열문자열 처리 고급정규식, 템플릿, 인코딩
2JSONJSON 파싱/직렬화JSON파싱, JSON변환
3YAMLYAML 파싱YAML파싱, YAML변환
4네트워크HTTP/TCP 클라이언트HTTP요청, GET, POST
5라우터URL 라우팅경로등록, 매개변수추출
6미들웨어요청 처리 체인미들웨어등록, 다음
7인증JWT · 세션토큰생성, 토큰검증
8로깅로그 관리정보로그, 오류로그, 경고로그
9검증입력 유효성필수확인, 형식확인, 범위확인
10템플릿HTML 템플릿템플릿렌더, 변수치환
11설정설정 파일 (YAML/JSON)설정읽기, 설정쓰기
12환경환경변수환경읽기, 환경설정
13날짜날짜/시간 처리현재날짜, 날짜형식, 차이계산
14타이머타이머 · 스케줄링지연실행, 반복실행, 취소
15프로세스프로세스 관리실행, 종료, 환경변수
16바이트버퍼바이너리 데이터버퍼생성, 읽기, 쓰기
17TLS암호화 통신TLS연결, 인증서, 암호화
18메시지 큐큐생성, 넣기, 꺼내기
19셀저장소셀 기반 키-값 DB저장, 조회, 삭제, 트랜잭션
20네이티브OS 네이티브 API시스템호출, DLL로드
21GUI 뷰창생성, 버튼, 입력창
22셀DB셀 데이터베이스테이블, 쿼리, 인덱스
23스타일UI 스타일링색상, 폰트, 레이아웃
24하드웨어하드웨어 제어GPIO, PWM, I2C, SPI, UART

셀코어 (규칙기반 에이전트 프레임워크)

셀코어는 15모듈 팔란티어 대응 프레임워크(1414줄). 가져오기 "셀코어"로 어디서든 사용 가능. 규칙저장소: ~/Downloads/CrownyTVM/std/규칙저장소.dat

가져오기 "셀코어"

; 룰 생성
변수 룰 = 룰생성("온도경보", 10)
룰 = 룰조건추가(룰, "온도", ">=", 80)
룰 = 룰변경추가(룰, "상태", "경보")
룰저장(룰저장소, 룰)

; 추론 실행
변수 결과 = 추론실행(룰저장소, 입력데이터)

크라우니어 인코딩

한글 1글자 = 6 트릿. 초성→섹터, 중성→그룹, 종성→명령으로 ISA729 opcode에 매핑됩니다.

인코딩 구조

한글 1자 초성(19종) + 중성(21종) + 종성(28종)
6 트릿 섹터(3t) · 그룹(3t) · 명령(3t) — 6t = 두 필드 공유
opcode 0 ~ 728 (ISA729 범위)
예: 더 ㄷ(초성=3) + ㅓ(중성=4) + 없음(종성=0) → opcode 108 (ADD)
예: 줘 ㅈ(초성=9) + ㅝ(중성=15) + 없음 → opcode 307 (PRINT)

TOAU 4상 색상 체계

색상 코드트릿 값역할
T T-상 #00d4aa +1 데이터 / 참 / 트릿+1
O O-상 #0088ff 0 명령 / 모름 / 트릿0
A A-상 #ff6b35 -1 체이닝 / 거짓 / 트릿-1
U U-상 #8b5cf6 구분자 / 큐브 경계

큐브 구조 (27 트릿 = 3×3×3)

27 트릿 = 1 큐브 = 기본 메모리/연산 단위

T O A T T U O A T

일부 예시 — TOAU 시각화에서 전체 확인

컴파일 변환 예시

; 소스 (고수준)
변수 x = 10
출력값(x)

; Stage 4 — RPN
10 x 저장해 x 가져와 보여줘 끝

; Stage 5 — 크라우니어 (한글 opcode)
저 열 저장 가져 보여줘

; Stage 6 — TOAU 스트림
TOATTOA U TOAT U TOAOTO U ...

ISA729 명령어 세트

729 = 9 × 9 × 9 = 36. 9 섹터 × 9 그룹 × 9 명령. 현재 489개 opcode 구현 완료.

9 섹터 구조

섹터opcode 범위용도구현
섹터 0
0 – 80시스템 / 제어 / 분기72
섹터 1
81 – 161산술 / 논리 / 비교81
섹터 2
162 – 242메모리 / 스택 / 변수75
섹터 3
243 – 323문자열 / 배열 / 맵72
섹터 4
324 – 404I/O / 파일 / 출력63
섹터 5
405 – 485네트워크 / 소켓 / TCP54
섹터 6
486 – 5663진 / 셀 / 트릿 연산45
섹터 7
567 – 647확장 / FPGA / 하드웨어27
섹터 8
648 – 728예약 (미래 확장)0

주요 opcode 테이블

opcodeRPN 키워드고수준설명
0프로그램 종료
1이면만약조건 분기
2아니면아니면else 분기
10함수야함수함수 정의
81더해+정수 덧셈 (자연반올림)
82-정수 뺄셈
83곱해*정수 곱셈
84나눠/정수 나눗셈 (자연반올림)
85나머지%나머지 연산
90같냐==동등 비교
91다르냐!=불일치 비교
92크냐>크기 비교
162저장해변수 =변수 저장
163가져와변수 참조변수 로드
307보여줘출력값값 출력
486삼진인코딩해삼진인코딩균형 3진 인코딩

인코딩 공식

; opcode 계산
opcode = 섹터 × 81 + 그룹 × 9 + 명령

; 역산
섹터 = opcode ÷ 81            (몫)
그룹 = (opcode % 81) ÷ 9      (몫)
명령 = opcode % 9              (나머지)

다국어 코드 변환

Python·JS·C·Rust·Verilog·VHDL ↔ 한선씨 즉시 변환. 번역 도구 바로가기

Python → 한선씨

Python
def factorial(n):
    if n <= 1:
        return 1
    return n * factorial(n - 1)

print(factorial(10))
한선씨
함수 팩토리얼(n) {
  만약 (n <= 1) { 반환 1 }
  반환 n * 팩토리얼(n - 1)
}
출력값(문자열변환(팩토리얼(10)))

JavaScript → 한선씨

JavaScript
const nums = [3, 1, 4, 1, 5, 9];
const sorted = [...nums].sort(
  (a, b) => a - b
);
console.log(sorted.join(', '));
한선씨
변수 숫자들 = [3, 1, 4, 1, 5, 9]
변수 정렬됨 = 정렬(숫자들)
출력값(합치기(정렬됨, ", "))

C → 한선씨

C
int fibonacci(int n) {
    if (n <= 1) return n;
    return fibonacci(n-1)
         + fibonacci(n-2);
}
한선씨
함수 피보나치(n) {
  만약 (n <= 1) { 반환 n }
  반환 피보나치(n - 1)
       + 피보나치(n - 2)
}

Verilog → 한선씨 FPGA

Verilog
module adder(
  input [7:0] a, b,
  output [7:0] sum
);
  assign sum = a + b;
endmodule
한선씨 FPGA
회로 더하기회로 (
  입력 [비트폭 8] 가
  입력 [비트폭 8] 나
  출력 [비트폭 8] 합
)
  신호 합 = 가 + 나
끝회로

빌드 & 실행

macOS · Linux · RPi5 · Windows 멀티플랫폼 지원.

컴파일러 빌드

cd /Users/ef/CrownyOS/crownyc
# VM
cc -O2 -o crownyc crownyc.c
# 고수준 컴파일러
cc -O2 -o hanseonc_high hanseonc_high.c

고수준 실행 (기본 — 추천)

# 컴파일 + 실행
./hanseonc_high program.한선 > program.toau
./crownyc run program.toau

RPN 실행 (저수준)

echo '3 7 더해 보여줘 끝' | \
  ./crownyc run hanseonc_std.toau > /tmp/t.toau
./crownyc run /tmp/t.toau

WASM (브라우저)

./hanseonc_high gui.한선 > /tmp/gui.toau
./crowny-wasm /tmp/gui.toau crowny.wasm

서버 7종 실행

# 웹서버
./hanseonc_high 웹서버v2.한선 > /tmp/ws.toau
./crownyc run /tmp/ws.toau

# 블록체인 노드
./hanseonc_high 블록체인.한선 > /tmp/bc.toau
./crownyc run /tmp/bc.toau

플랫폼별 빌드 플래그

플랫폼빌드 플래그
macOS (Cocoa GUI)-DCROWNY_WINDOW -framework Cocoa -lpthread
Linux (X11)-DCROWNY_X11 -lX11 -lpthread
RPi5-DCROWNY_RPI5 -march=armv8-a+crc
Windows (Win32)-DCROWNY_WIN32 -luser32 -lgdi32
WASMemcc -o crowny.wasm crownyc.c

환경변수

변수설명기본값
CROWNY_STD표준 라이브러리 경로~/Downloads/CrownyTVM/std/
CROWNY_DEBUG디버그 출력 활성화0
CROWNY_TRACE실행 추적0

API 레퍼런스

hansunc.crowny.org (포트 9763) 서버 API — Express 기반.

POST /api/compile
한선씨 코드를 서버사이드 컴파일 후 실행 결과 반환.
Request: { "code": "출력값(\"안녕\")", "mode": "high" }
mode: high (기본, hanseonc_high) · rpn (저수준 RPN)
Response: { "success": true, "output": "안녕", "toau": "TOATTOA U..." }
POST /api/pipeline
6단계 파이프라인 전 단계의 중간 결과 반환.
Request: { "code": "...", "stage": 3 } — stage: 1~6
Response: 해당 stage의 중간 표현 JSON
POST /api/natural
자연어(한국어) 입력 → 한선씨 코드 변환 (Stage 1~3).
Request: { "text": "1부터 10까지 더해서 출력해줘" }
Response: { "hanseon": "변수 합 = 0\n...", "intent": "반복합산" }
POST /api/fpga
한선씨 FPGA 회로방언 → Verilog / VHDL 변환.
Request: { "code": "회로 ... 끝회로", "target": "verilog" }
target: verilog · vhdl
POST /api/translate
다국어 코드 ↔ 한선씨 양방향 번역.
Request: { "code": "...", "from": "python", "to": "hanseon" }
from/to: hanseon · python · javascript · c · rust · verilog · vhdl
GET /api/examples
내장 예제 목록 반환 (7개 카테고리).
GET /api/stats
사용 통계 — 내장함수 수, opcode 수, 라이브러리 수 등.
GET /health
서버 헬스체크. 응답: { "ok": true, "port": 9763 }

에러 응답 형식

{
  "success": false,
  "error": "컴파일 오류: 14번 줄 — 미정의 변수 'x'",
  "line": 14,
  "stage": 3
}