점으로 프로그래밍하는 난해 언어
유니코드 점 계열 문자 16종만으로 모든 코드를 작성합니다.
난해하지만, 함수 · 배열 · 딕셔너리 · 오류처리 · 파일시스템을 갖춘 완전한
언어입니다.
why jeom
점 16개로 시작해서, 실제로 동작하는 프로그램을 만들 수 있습니다.
유니코드 점 계열 문자 16종만으로 코드를 작성합니다. 공백은 토큰 구분자로만 사용됩니다.
스택 기반 가상 머신 위에서 동작합니다. 모든 연산은 스택에서 팝/푸시로 처리됩니다.
함수 정의, 호출, 재귀, 람다, 커링을 완전히 지원합니다. 클로저도 동작합니다.
동적 배열과 해시맵을 지원합니다. map, filter, reduce 고차 함수도 사용 가능합니다.
TRY / CATCH / FINALLY 구문으로 예외를 처리합니다. THROW로 직접 예외를 발생시킬 수도 있습니다.
다른 .jeom 파일을 임포트할 수 있습니다. 파일 읽기/쓰기, 디렉터리 조작도 지원합니다.
공용 JS 엔진(UMD)이 브라우저와 Node.js 양쪽에서 동작합니다.
서버 없이 브라우저에서 바로 실행되는 웹 IDE가 포함됩니다. 인코더, 디코더, 명령 참조도 내장됩니다.
characters
이 문자들의 조합만으로 모든 프로그램을 작성합니다. 숫자는 이진수로, 문자열은 UTF-8 바이트로 인코딩됩니다.
web ide
서버 없이 파일만 열면 됩니다. 인코더, 디코더, 명령 참조, 8가지 예제가 내장되어 있습니다.
download
필요한 파일만 골라 사용하세요. 모든 파일은 무료입니다.
reference
모든 명령은 점 문자 시퀀스로 표현됩니다.
| 토큰 | 명령 | 설명 |
|---|---|---|
| · | stdout 출력 (줄바꿈 없음) | |
| ·· | PRINTLN | stdout 출력 + 줄바꿈 |
| ·˙ | INPUT | stdin → 스택 (문자열) |
| ·˙˙ | INPUTN | stdin → 스택 (숫자) |
| ·∘ | ERR | stderr 출력 |
| 토큰 | 명령 | 설명 |
|---|---|---|
| ∘ | VAR | ∘ <이름> <값> — 변수 선언+할당 |
| ∘∘ | GET | 변수 읽기 → 스택 push |
| ∘⋅ | STORE ★ | 스택 팝 → 변수 저장 |
| ∘∘∘ | DEL | 변수 삭제 |
| ⦁ | PUSH | 값을 스택에 push |
| ⦁⦁ | POP | 스택 팝 (버림) |
| ⦁⦁⦁ | SWAP | 상위 2개 교환 |
| ⦁∘⦁ | DUP | 최상단 복제 |
| ⦁∘ | PEEK | 최상단 복사 (팝 없이) |
| 토큰 | 명령 | 설명 |
|---|---|---|
| ⋅ | ADD | a + b |
| ⋅⋅ | SUB | a - b |
| ⋅⋅⋅ | MUL | a × b |
| ⋅∘ | DIV | a ÷ b |
| ⋅∘∘ | MOD | a % b |
| ⋅∘∘∘ | POW | a ^ b |
| ⋅‧ | EQ | a == b → 1/0 |
| ⋅‧‧ | NEQ | a != b → 1/0 |
| ⋅‧‧‧ | LT | a < b → 1/0 |
| ⋅‧∘ | GT | a > b → 1/0 |
| ⋅‧∘∘ | LTE | a <= b → 1/0 |
| ⋅‧∘∘∘ | GTE | a >= b → 1/0 |
| ⋅⦁ | AND | a && b → 1/0 |
| ⋅⦁⦁ | OR | a || b → 1/0 |
| ⋅⦁⦁⦁ | NOT | !a → 1/0 |
| ⋅⦁∘ | XOR | a XOR b → 1/0 |
| 토큰 | 명령 | 설명 |
|---|---|---|
| … | IF | truthy면 then 블록 실행 |
| …· | ELSE | IF 거짓 분기 |
| …‥ | ELIF | 추가 조건 분기 |
| ‥ | LOOP | n회 반복 (스택 팝) |
| ‥‥ | WHILE | 조건+본문 반복 |
| ‥∘ | BREAK | 반복 탈출 |
| ‥∘∘ | CONT | 다음 반복으로 |
| ⋮ | BLOCK | 블록 시작 |
| ⋮⋮ | END | 블록 끝 |
| ⋯ | GOTO | 레이블로 점프 |
| ⋯· | LABEL | 레이블 정의 |
| 토큰 | 명령 | 설명 |
|---|---|---|
| ˙ | FUNC | 함수 정의 시작 |
| ˙∘ | ARG | 인자 이름 선언 |
| ˙˙ | RET | 반환 (스택 팝 → 반환값) |
| ˙˙˙ | CALL | 함수 호출 |
| ˙⦁ | LAMBDA | 익명 함수 |
| ˙⋅ | CURRY | 첫 인자 부분 적용 |
| 토큰 | 명령 | 설명 |
|---|---|---|
| ◦ | ARR | n개 팝 → 배열 생성 |
| ◦◦ | IDX | arr[idx] |
| ◦◦◦ | IDXS | arr[idx] = val |
| ◦∘ | APP | 배열에 값 추가 |
| ◦∘∘ | SLICE | 슬라이싱 [start:end] |
| ◦⋅ | MAP | 배열에 함수 적용 |
| ◦⋅⋅ | FILTER | 배열 필터 |
| ◦⋅⋅⋅ | REDUCE | 배열 리듀스 |
| ◦‧ | DICT | n쌍 → 딕셔너리 생성 |
| ◦‧‧ | DGET | dict[key] |
| ◦‧‧‧ | DSET | dict[key] = val |
| ◦⦁ | KEYS | 키 목록 |
| ◦⦁⦁ | VALS | 값 목록 |
| 토큰 | 명령 | 설명 |
|---|---|---|
| ⸳ | INT | 정수 변환 |
| ⸳⸳ | FLOAT | 실수 변환 |
| ⸳⸳⸳ | STR | 문자열 변환 |
| ⸳∘ | BOOL | 불리언 변환 |
| ⸳⦁ | TYPE | 타입 이름 |
| ⸳‧ | LEN | 길이 |
| ‥· | TRY | 예외 처리 시작 |
| ‥·· | CATCH | 예외 처리 (에러 메시지 스택 push) |
| ‥·˙ | FINALLY | 항상 실행 |
| ‥·∘ | THROW | 예외 발생 |
| ‥·⦁ | ASSERT | 조건 실패 시 예외 |
| 토큰 | 명령 | 설명 |
|---|---|---|
| ⋯⋯ | FOPEN | 파일 핸들 생성 |
| ⋯⋯⋯ | FREAD | 파일 읽기 |
| ⋯∘ | FWRITE | 파일 쓰기 |
| ⋯∘∘ | FCLOSE | 파일 닫기 |
| ⋯⦁ | FEXIST | 파일 존재 여부 (1/0) |
| ⋯⦁⦁ | FDELETE | 파일 삭제 |
| ⋯⋅ | FLIST | 디렉터리 목록 |
| ⋯‧ | MKDIR | 디렉터리 생성 |
| ⋯·⦁ | IMPORT | 모듈 임포트 |
| ⋯·˙ | EXPORT | 심볼 내보내기 |
| ⋮∘ | EXIT | 프로그램 종료 |
| ⋮⦁ | DEBUG | 스택 전체 stderr 출력 |
| ⋮‧ | RAND | 0.0~1.0 난수 |
| ⋮⋅ | TIME | 유닉스 타임스탬프 |
| ⋮‧‧ | HASH | djb2 해시 |
| ⋮‧‧‧ | REGEX | 정규식 매칭 |
| ⋮·⦁ | SLEEP | 대기 (밀리초) |
| ⋮· | EVAL | 문자열을 코드로 실행 |
| ⋮·· | EXEC | 시스템 명령 실행 |
| ⋮·∘ | ENV | 환경변수 읽기 |
| ⋮∘∘ | NOOP | 아무것도 안 함 |