Skip to content

Commit 3f73f8e

Browse files
authored
Add files via upload
1 parent 6b89d29 commit 3f73f8e

21 files changed

Lines changed: 10179 additions & 0 deletions

src/Kcode/kc_contract.han

Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
// kc_contract.han — Kcode 계약 시스템 검증 구현
2+
// version : v32.0.0
3+
4+
#포함 "kc_contract.hg"
5+
6+
// ── MCP 전용 파일 판별 ────────────────────────────────────
7+
함수 MCP전용파일인지(문자 소스코드):
8+
만약 소스코드 == 없음 또는 소스코드 == "":
9+
반환 거짓
10+
11+
// MCP 키워드가 하나라도 있는지
12+
논리 mcp있음 = 거짓
13+
각각 키워드 안에 MCP_키워드목록:
14+
만약 소스코드 포함(키워드):
15+
mcp있음 = 참
16+
멈춤
17+
18+
만약 mcp있음 == 거짓:
19+
반환 거짓
20+
21+
// 계약 키워드가 하나도 없어야 MCP 전용
22+
각각 키워드 안에 계약_키워드목록:
23+
만약 소스코드 포함(키워드):
24+
반환 거짓
25+
26+
반환 참
27+
28+
// ── 계약 오류 메시지 ──────────────────────────────────────
29+
함수 계약오류메시지(정수 결과코드):
30+
만약 결과코드 == 계약_빈소스:
31+
반환 "[계약 오류] 소스가 비어 있습니다.\n" +
32+
" 최소 요건: 헌법 / 법률 / 규정 / 법령 / 법위반 중 하나."
33+
34+
만약 결과코드 == 계약_없음:
35+
반환 "[계약 오류] 계약 시스템이 없습니다.\n\n" +
36+
" Kcode 파일에는 반드시 다음 중 하나 이상이 있어야 합니다:\n\n" +
37+
" 헌법 — 전역 최상위 계약\n" +
38+
" 법률 — 파일 전체 계약\n" +
39+
" 규정 — 객체 범위 계약\n" +
40+
" 법령 — 함수 사전조건\n" +
41+
" 법위반 — 함수 사후조건\n\n" +
42+
" 예시:\n" +
43+
" 헌법 안전정책, 경고\n\n" +
44+
" ※ MCP 전용 파일은 예외입니다."
45+
46+
반환 ""
47+
48+
// ── 계약 검사 메인 함수 ───────────────────────────────────
49+
함수 계약검사(문자 소스코드):
50+
51+
// 1단계: 빈 소스 확인
52+
만약 소스코드 == 없음 또는 소스코드 == "":
53+
반환 계약_빈소스
54+
55+
// 2단계: MCP 전용 파일 예외 확인
56+
만약 MCP전용파일인지(소스코드):
57+
반환 계약_MCP예외
58+
59+
// 3단계: 계약 키워드 순회 검사
60+
각각 키워드 안에 계약_키워드목록:
61+
만약 소스코드 포함(키워드):
62+
반환 계약_통과
63+
64+
// 4단계: 계약 없음
65+
반환 계약_없음

src/Kcode/kc_contract.hg

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
// kc_contract.hg — Kcode 계약 시스템 검증 헤더
2+
// version : v32.0.0
3+
//
4+
// 사용법:
5+
// #포함 "kc_contract.hg"
6+
// 결과 = 계약검사(소스코드)
7+
8+
// ── 검사 결과 상수 ──────────────────────────
9+
변수 계약_통과 = 0
10+
변수 계약_없음 = 1
11+
변수 계약_빈소스 = 2
12+
변수 계약_MCP예외 = 3
13+
14+
// ── 계약 키워드 목록 ─────────────────────────
15+
변수 계약_키워드목록 = [
16+
"헌법",
17+
"법률",
18+
"규정",
19+
"법령",
20+
"법위반"
21+
]
22+
23+
// ── MCP 키워드 목록 ──────────────────────────
24+
변수 MCP_키워드목록 = [
25+
"MCP서버",
26+
"MCP도구",
27+
"MCP자원",
28+
"MCP프롬프트"
29+
]
30+
31+
// ── 함수 선언 (kc_contract.han 에서 구현) ────
32+
// 함수 계약검사(문자 소스코드)
33+
// 함수 계약오류메시지(정수 결과코드)
34+
// 함수 MCP전용파일인지(문자 소스코드)

src/Kcode/kc_llvm.hg

Lines changed: 207 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,207 @@
1+
// kc_llvm.hg — Kcode LLVM IR 코드생성기 헤더
2+
// version : v0.1.0
3+
// §LLVM-SH Phase 1: 타입 상수 / 명령코드 상수 / 구조 정의
4+
// kparser.hg (AST 노드) 위에서 동작
5+
6+
#포함 "kparser.hg"
7+
8+
// ================================================================
9+
// LLVM IR 타입 코드 (kc_llvm_type.han 에서 사용)
10+
// ================================================================
11+
12+
변수 LLTY_VOID = 0 // void
13+
변수 LLTY_I1 = 1 // i1 (논리)
14+
변수 LLTY_I8 = 2 // i8 (바이트/글자)
15+
변수 LLTY_I16 = 3 // i16
16+
변수 LLTY_I32 = 4 // i32 (정수 기본)
17+
변수 LLTY_I64 = 5 // i64 (정수 확장)
18+
변수 LLTY_F32 = 6 // float
19+
변수 LLTY_F64 = 7 // double (실수 기본)
20+
변수 LLTY_PTR = 8 // ptr (불투명 포인터, LLVM 15+)
21+
변수 LLTY_ARRAY = 9 // [N x T]
22+
변수 LLTY_STRUCT = 10 // { T0, T1, ... }
23+
변수 LLTY_FUNC = 11 // T (T0, T1, ...) — 함수 타입
24+
변수 LLTY_LABEL = 12 // label (기본블록 타입)
25+
변수 LLTY_METADATA = 13 // metadata
26+
27+
// ================================================================
28+
// LLVM IR 값 종류 (Value Kind)
29+
// ================================================================
30+
31+
변수 LLVK_CONST_INT = 0 // 정수 상수
32+
변수 LLVK_CONST_FLOAT = 1 // 실수 상수
33+
변수 LLVK_CONST_STR = 2 // 문자열 전역 상수 (getelementptr)
34+
변수 LLVK_CONST_NULL = 3 // null / zeroinitializer
35+
변수 LLVK_CONST_BOOL = 4 // i1 상수 (0 / 1)
36+
변수 LLVK_GLOBAL = 5 // @전역변수
37+
변수 LLVK_LOCAL = 6 // %지역변수 (레지스터)
38+
변수 LLVK_FUNC = 7 // @함수명
39+
변수 LLVK_BLOCK = 8 // 기본블록 레이블
40+
변수 LLVK_UNDEF = 9 // undef
41+
변수 LLVK_POISON = 10 // poison
42+
43+
// ================================================================
44+
// LLVM IR 명령코드 (Instruction Opcode)
45+
// ── 산술/논리 ────────────────────────────────────────────────────
46+
// ================================================================
47+
48+
변수 LLOP_ADD = 0 // add
49+
변수 LLOP_SUB = 1 // sub
50+
변수 LLOP_MUL = 2 // mul
51+
변수 LLOP_SDIV = 3 // sdiv (부호 있는 나눗셈)
52+
변수 LLOP_UDIV = 4 // udiv (부호 없는 나눗셈)
53+
변수 LLOP_SREM = 5 // srem (부호 있는 나머지)
54+
변수 LLOP_UREM = 6 // urem
55+
변수 LLOP_FADD = 7 // fadd
56+
변수 LLOP_FSUB = 8 // fsub
57+
변수 LLOP_FMUL = 9 // fmul
58+
변수 LLOP_FDIV = 10 // fdiv
59+
변수 LLOP_FREM = 11 // frem
60+
변수 LLOP_AND = 12 // and
61+
변수 LLOP_OR = 13 // or
62+
변수 LLOP_XOR = 14 // xor
63+
변수 LLOP_SHL = 15 // shl
64+
변수 LLOP_LSHR = 16 // lshr
65+
변수 LLOP_ASHR = 17 // ashr
66+
변수 LLOP_NEG = 18 // neg (sub 0, x 로 생성)
67+
변수 LLOP_FNEG = 19 // fneg
68+
69+
// ── 메모리 ────────────────────────────────────────────────────────
70+
변수 LLOP_ALLOCA = 20 // alloca
71+
변수 LLOP_LOAD = 21 // load
72+
변수 LLOP_STORE = 22 // store
73+
변수 LLOP_GEP = 23 // getelementptr (inbounds)
74+
변수 LLOP_MEMCPY = 24 // call llvm.memcpy
75+
변수 LLOP_MEMSET = 25 // call llvm.memset
76+
77+
// ── 비교 ─────────────────────────────────────────────────────────
78+
변수 LLOP_ICMP = 30 // icmp
79+
변수 LLOP_FCMP = 31 // fcmp
80+
81+
// ── 흐름 제어 ────────────────────────────────────────────────────
82+
변수 LLOP_BR = 40 // br (무조건)
83+
변수 LLOP_BR_COND = 41 // br (조건)
84+
변수 LLOP_SWITCH = 42 // switch
85+
변수 LLOP_RET = 43 // ret
86+
변수 LLOP_RET_VOID = 44 // ret void
87+
변수 LLOP_UNREACHABLE= 45 // unreachable
88+
변수 LLOP_PHI = 46 // phi
89+
90+
// ── 함수 호출 ────────────────────────────────────────────────────
91+
변수 LLOP_CALL = 50 // call
92+
변수 LLOP_TAIL_CALL = 51 // tail call
93+
변수 LLOP_INVOKE = 52 // invoke (예외 처리용)
94+
95+
// ── 변환 ─────────────────────────────────────────────────────────
96+
변수 LLOP_TRUNC = 60 // trunc (정수 축소)
97+
변수 LLOP_ZEXT = 61 // zext (0 확장)
98+
변수 LLOP_SEXT = 62 // sext (부호 확장)
99+
변수 LLOP_FPEXT = 63 // fpext (실수 확장)
100+
변수 LLOP_FPTRUNC = 64 // fptrunc (실수 축소)
101+
변수 LLOP_FPTOSI = 65 // fptosi (실수 → 정수)
102+
변수 LLOP_SITOFP = 66 // sitofp (정수 → 실수)
103+
변수 LLOP_UITOFP = 67 // uitofp
104+
변수 LLOP_PTRTOINT = 68 // ptrtoint
105+
변수 LLOP_INTTOPTR = 69 // inttoptr
106+
변수 LLOP_BITCAST = 70 // bitcast
107+
변수 LLOP_SELECT = 71 // select
108+
109+
// ── 기타 ─────────────────────────────────────────────────────────
110+
변수 LLOP_EXTRACTVAL = 80 // extractvalue
111+
변수 LLOP_INSERTVAL = 81 // insertvalue
112+
변수 LLOP_LANDINGPAD = 82 // landingpad
113+
114+
// ================================================================
115+
// icmp / fcmp 조건 코드
116+
// ================================================================
117+
118+
// icmp (정수 비교)
119+
변수 LLCMP_EQ = 0 // eq — 같음
120+
변수 LLCMP_NE = 1 // ne — 다름
121+
변수 LLCMP_SGT = 2 // sgt — 부호 있는 >
122+
변수 LLCMP_SGE = 3 // sge — 부호 있는 >=
123+
변수 LLCMP_SLT = 4 // slt — 부호 있는 <
124+
변수 LLCMP_SLE = 5 // sle — 부호 있는 <=
125+
변수 LLCMP_UGT = 6 // ugt — 부호 없는 >
126+
변수 LLCMP_UGE = 7 // uge — 부호 없는 >=
127+
변수 LLCMP_ULT = 8 // ult
128+
변수 LLCMP_ULE = 9 // ule
129+
130+
// fcmp (실수 비교) — ordered (NaN 전파)
131+
변수 LLCMP_OEQ = 20 // oeq
132+
변수 LLCMP_ONE = 21 // one
133+
변수 LLCMP_OGT = 22 // ogt
134+
변수 LLCMP_OGE = 23 // oge
135+
변수 LLCMP_OLT = 24 // olt
136+
변수 LLCMP_OLE = 25 // ole
137+
변수 LLCMP_ORD = 26 // ord (neither is NaN)
138+
변수 LLCMP_UNO = 27 // uno (either is NaN)
139+
140+
// ================================================================
141+
// 링크 유형 (Linkage)
142+
// ================================================================
143+
144+
변수 LLLNK_PRIVATE = 0 // private
145+
변수 LLLNK_INTERNAL = 1 // internal
146+
변수 LLLNK_EXTERNAL = 2 // external (기본값 — 외부 선언)
147+
변수 LLLNK_WEAK = 3 // weak
148+
변수 LLLNK_LINKONCE = 4 // linkonce
149+
변수 LLLNK_COMMON = 5 // common
150+
151+
// ================================================================
152+
// 호출 규약 (Calling Convention)
153+
// ================================================================
154+
155+
변수 LLCC_C = 0 // ccc — 기본 C 호출 규약
156+
변수 LLCC_FAST = 8 // fastcc
157+
변수 LLCC_COLD = 9 // coldcc
158+
변수 LLCC_WEBKIT = 12 // webkit_jscc
159+
160+
// ================================================================
161+
// LLVM IR 컨텍스트 구조 (kc_llvm_ctx.han 에서 초기화)
162+
// ================================================================
163+
164+
// 컨텍스트 목록 키 (context["키"])
165+
// "모듈명" 문자 — .ll 파일 모듈 이름
166+
// "소스파일" 문자 — 원본 .han 파일 경로
167+
// "줄" [문자] — 출력 IR 행 버퍼 (배열)
168+
// "전역목록" [목록] — 전역 변수/상수 선언 목록
169+
// "함수목록" [목록] — 함수 정의/선언 목록
170+
// "문자열상수맵" 목록 — 문자열 리터럴 → 전역 이름 맵
171+
// "임시번호" 정수 — %tmp0, %tmp1 ... 자동 증가
172+
// "블록번호" 정수 — label 자동 증가
173+
// "문자열번호" 정수 — @.str.0, @.str.1 ... 자동 증가
174+
// "오류있음" 논리
175+
// "오류메시지" 문자
176+
177+
// 함수 구조 목록 키 (func["키"])
178+
// "이름" 문자 — 함수명 (@이름)
179+
// "반환타입" 정수 — LLTY_* 상수
180+
// "매개변수" [목록] — [{이름, 타입}]
181+
// "블록목록" [목록] — 기본블록 목록
182+
// "현재블록" 정수 — 현재 기본블록 인덱스
183+
// "링크" 정수 — LLLNK_*
184+
// "호출규약" 정수 — LLCC_*
185+
// "선언만" 논리 — declare (extern) 여부
186+
187+
// 기본블록 구조 목록 키 (bb["키"])
188+
// "레이블" 문자 — 기본블록 이름
189+
// "명령목록" [문자] — IR 명령어 문자열 목록
190+
// "종료됨" 논리 — 종료 명령어(br/ret) 삽입 여부
191+
192+
// LLVM IR 값 구조 목록 키 (val["키"])
193+
// "종류" 정수 — LLVK_*
194+
// "타입코드" 정수 — LLTY_*
195+
// "이름" 문자 — %이름 / @이름 (% @ 포함)
196+
// "정수값" 정수 — 정수 상수일 때
197+
// "실수값" 실수 — 실수 상수일 때
198+
// "문자값" 문자 — 문자열 / 이름 문자열
199+
200+
// ================================================================
201+
// 편의 상수
202+
// ================================================================
203+
204+
변수 LLVM_타겟_기본 = "x86_64-pc-linux-gnu" // 기본 타겟 트리플
205+
변수 LLVM_데이터레이아웃 = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128"
206+
207+
변수 LLVM_KV_태그 = "; [Kcode LLVM IR §LLVM-SH]" // 파일 헤더 태그

0 commit comments

Comments
 (0)