새김은 한글로만 프로그래밍 할 수 있는 한글 프로그래밍 언어입니다. 표준어와 충청도 방언 버전, 총 2가지 버전을 지원합니다.
'밑바닥부터 인터프리터 만들기 in go' 책을 기반으로 제작했습니다.
| 확장자 | 버전 | 설명 |
|---|---|---|
.sg |
표준어 | Saegim (새김) |
.hbg |
충청도 방언 | Haebolgyeo (해볼겨) |
git clone https://github.com/Jihyun3478/saegim-lang.gitgo run main.go examples/hello.sggo run main.go examples/hello.hbggo run main.go=============================================
한글 프로그래밍 언어를 직접 사용해 보세요!
=============================================
모드를 선택하세요.
1. 표준어 버전
2. 충청도 방언 버전
선택: 1
███████╗ █████╗ ███████╗ ██████╗ ██╗███╗ ███╗
██╔════╝██╔══██╗██╔════╝██╔════╝ ██║████╗ ████║
███████╗███████║█████╗ ██║ ███╗██║██╔████╔██║
╚════██║██╔══██║██╔══╝ ██║ ██║██║██║╚██╔╝██║
███████║██║ ██║███████╗╚██████╔╝██║██║ ╚═╝ ██║
╚══════╝╚═╝ ╚═╝╚══════╝ ╚═════╝ ╚═╝╚═╝ ╚═╝
표준어 버전 - '새김' 언어
코드를 입력하세요 (종료 - exit)
-------------------------------
>> 변수 이름 = "지현";
>> 출력(이름);
지현
>> exit
안녕히 가세요.
_._.mov
_._.mov
- REPL은 한 줄 단위로 파싱합니다.
- 중괄호(
{})가 포함된 조건문, 함수 등은 한 줄로 입력해야 합니다.
| 키워드 | 설명 |
|---|---|
| 변수 | 변수 선언 |
| 만약 | if 조건문 |
| 아니면 | else |
| 참 | true |
| 거짓 | false |
| 함수 | 함수 정의 |
| 반환 | return |
| 출력 | print (내장 함수) |
| 키워드 | 설명 |
|---|---|
| 변수 | 변수 선언 |
| 이쪽이에유 | if 조건문 |
| 저쪽이에유 | else |
| 맞어유 | true |
| 아녀유 | false |
| 함수 | 함수 정의 |
| 도루 | return |
| 출력해유 | print (내장 함수) |
- 정수:
42,-10 - 불리언:
참,거짓/맞어유,아녀유 - 문자열:
"안녕하세요" - 함수: 일급 객체
- Null: 값 없음
+덧셈-뺄셈*곱셈/나눗셈
<작음>큼<=작거나 같음>=크거나 같음==같음!=다름
표준어 (hello.sg)
변수 이름 = "홍길동";
출력("안녕하세요, " + 이름 + "!");
충청도 (hello.hbg)
변수 이름 = "홍길동";
출력해유("안녕하세유, " + 이름 + "!");
표준어
변수 점수 = 85;
만약 (점수 >= 90) {
출력("A학점");
} 아니면 {
만약 (점수 >= 80) {
출력("B학점");
} 아니면 {
출력("C학점");
}
}
충청도
변수 점수 = 85;
이쪽이에유 (점수 >= 90) {
출력해유("A학점");
} 저쪽이에유 {
이쪽이에유 (점수 >= 80) {
출력해유("B학점");
} 저쪽이에유 {
출력해유("C학점");
}
}
표준어
변수 더하기 = 함수(왼쪽, 오른쪽) {
반환 왼쪽 + 오른쪽;
};
변수 결과 = 더하기(10, 20);
출력(결과);
충청도
변수 더하기 = 함수(왼쪽, 오른쪽) {
도루 왼쪽 + 오른쪽;
};
변수 결과 = 더하기(10, 20);
출력해유(결과);
표준어
변수 피보나치 = 함수(숫자) {
만약 (숫자 < 2) {
반환 숫자;
}
반환 피보나치(숫자 - 1) + 피보나치(숫자 - 2);
};
출력(피보나치(10));
충청도
변수 피보나치 = 함수(숫자) {
이쪽이에유 (숫자 < 2) {
도루 숫자;
}
도루 피보나치(숫자 - 1) + 피보나치(숫자 - 2);
};
출력해유(피보나치(10));
saegim-lang/
├── main.go # 진입점
├── repl/ # REPL 모드
├── token/ # 토큰 정의
├── lexer/ # 렉서
├── parser/ # 파서
├── ast/ # AST 노드
├── evaluator/ # 평가기
├── object/ # 객체 타입
└── examples/ # 예제 파일
- GitHub: saegim-lang
- Blog
