umjunsik 2.0.2
어떻게 엄준식이 언어이름이냐🤣

# 엄랭

엄랭은 세계 최초의 인물이름으로 만들어진 난해한 프로그래밍 언어입니다. 엄준식이 어떻게 인물 이름이냐고요? 그러게요ㅋㅋ 어떻게 엄준식이 어떻게 사람 이름이지ㅋㅋ "엄준식 사람이름인데요"

> 어디선가 유입이 자꾸 들어오고 있는것같은데.. 혹시 시간 되신다면 어디쪽 링크 통해서 들어오셨는지 기재 부탁드리겠습니다. [어떻게 엄랭을 발견하셨나요..!](https://github.com/rycont/umjunsik-lang/issues/1)

![](https://hits.seeyoufarm.com/api/count/incr/badge.svg?url=https://github.com/rycont/umjunsik-lang)


```
어떻게

엄식?
어엄식?

동탄어?준... ....

엄어,
어엄어어.

준.. ...
식어어!

이 사람이름이냐ㅋㅋ
```

[cjaewon/umlang](https://github.com/cjaewon/umlang)에 영감을 받아 제작되었습니다

**주의: Umlang 표기는 위의 프로젝트와 겹치기 때문에, 꼭 한글로만 표기해주세요.**
영문표기를 해야할때는 "umjunsik-lang"이라고 표기해주세요.

## 엄 on Live!
- 코딩애플: [엄준식 프로그래밍 언어 (어떤 놈이 만들었냐)](https://www.youtube.com/watch?v=G0psQ54f5zE)
- 컴공선배: [엄랭 어떤 놈이 만들었냐? 어떤 놈 만났습니다.](https://youtu.be/NS56sb6EYIw)
- 코딩애플: [chatGPT는 엄준식 프로그래밍 언어도 잘할까?](https://www.youtube.com/watch?v=SdDs0ScOFSU)
# 구현체
+ [류갓 WebIDE에서 엄랭을 실행할 수 있습니다](https://www.ryugod.com/)

- [디노 (v2)](https://github.com/rycont/umjunsik-lang/tree/master/umjunsik-lang-deno) : 레퍼런스 런타임입니다
- [노드JS (v2)](https://github.com/rycont/umjunsik-lang/tree/master/umjunsik-lang-node) : Deno 구현체의 NodeJS 포트버전입니다.
- [파이썬 (v2)](https://github.com/rycont/umjunsik-lang/tree/master/umjunsik-lang-python)
- [웹-엄 (v2)](https://github.com/rycont/umjunsik-lang/tree/master/umjunsik-lang-web) : [kms0219kms](https://github.com/kms0219kms)님이 [호스팅해주시고 있습니다🎉](https://umjunsik-lang.sskate.me/)
- [C (v2)](https://github.com/rycont/umjunsik-lang/tree/master/umjunsik-lang-cc)
- [C# (v2)](https://github.com/rycont/umjunsik-lang/tree/master/umjunsik-lang-csharp)
- [코틀린 (v2)](https://github.com/rycont/umjunsik-lang/tree/master/umjunsik-lang-kotlin)
- [Go (v2)](https://github.com/rycont/umjunsik-lang/tree/master/umjunsik-lang-go) : 실제 인터프리터 구조를 차용하여 개발한 고급 런타임입니다
- [러스트 (v2)](https://github.com/rycont/umjunsik-lang/tree/master/umjunsik-lang-rust)


# Contributors ✨
<!-- ALL-CONTRIBUTORS-BADGE:START - Do not remove or modify this section -->
[![All Contributors](https://img.shields.io/badge/all_contributors-26-orange.svg?style=flat-square)](#contributors-)
<!-- ALL-CONTRIBUTORS-BADGE:END -->

<!-- ALL-CONTRIBUTORS-LIST:START - Do not remove or modify this section -->
<!-- prettier-ignore-start -->
<!-- markdownlint-disable -->
<table>
  <tbody>
    <tr>
      <td align="center" valign="top" width="14.28%"><a href="https://github.com/cstria0106"><img src="https://avatars1.githubusercontent.com/u/11474150?v=4?s=100" width="100px;" alt="goorm"/><br /><sub><b>goorm</b></sub></a><br /><a href="#platform-cstria0106" title="Packaging/porting to new platform">📦</a></td>
      <td align="center" valign="top" width="14.28%"><a href="https://github.com/pl-Steve28-lq"><img src="https://avatars2.githubusercontent.com/u/64412954?v=4?s=100" width="100px;" alt="Steve28"/><br /><sub><b>Steve28</b></sub></a><br /><a href="#platform-pl-Steve28-lq" title="Packaging/porting to new platform">📦</a></td>
      <td align="center" valign="top" width="14.28%"><a href="https://trinets.xyz"><img src="https://avatars2.githubusercontent.com/u/39158228?v=4?s=100" width="100px;" alt="PMH"/><br /><sub><b>PMH</b></sub></a><br /><a href="#platform-pmh-only" title="Packaging/porting to new platform">📦</a></td>
      <td align="center" valign="top" width="14.28%"><a href="https://github.com/AkiaCode"><img src="https://avatars0.githubusercontent.com/u/71239005?v=4?s=100" width="100px;" alt="Aki"/><br /><sub><b>Aki</b></sub></a><br /><a href="https://github.com/rycont/umjunsik-lang/commits?author=AkiaCode" title="Code">💻</a></td>
      <td align="center" valign="top" width="14.28%"><a href="https://info.tim23.me"><img src="https://avatars1.githubusercontent.com/u/64291996?v=4?s=100" width="100px;" alt="Tim232"/><br /><sub><b>Tim232</b></sub></a><br /><a href="https://github.com/rycont/umjunsik-lang/commits?author=Tim232" title="Code">💻</a></td>
      <td align="center" valign="top" width="14.28%"><a href="https://github.com/Ign0reLee"><img src="https://avatars.githubusercontent.com/u/46403849?v=4?s=100" width="100px;" alt="JeYoung"/><br /><sub><b>JeYoung</b></sub></a><br /><a href="https://github.com/rycont/umjunsik-lang/commits?author=Ign0reLee" title="Code">💻</a></td>
      <td align="center" valign="top" width="14.28%"><a href="http://rokr0k.tk"><img src="https://avatars.githubusercontent.com/u/35794170?v=4?s=100" width="100px;" alt="Rok"/><br /><sub><b>Rok</b></sub></a><br /><a href="#platform-Rokr0k" title="Packaging/porting to new platform">📦</a></td>
    </tr>
    <tr>
      <td align="center" valign="top" width="14.28%"><a href="https://github.com/adp-study"><img src="https://avatars.githubusercontent.com/u/59760424?v=4?s=100" width="100px;" alt="adp-study"/><br /><sub><b>adp-study</b></sub></a><br /><a href="#infra-adp-study" title="Infrastructure (Hosting, Build-Tools, etc)">🚇</a> <a href="https://github.com/rycont/umjunsik-lang/issues?q=author%3Aadp-study" title="Bug reports">🐛</a></td>
      <td align="center" valign="top" width="14.28%"><a href="https://www.youtube.com/c/noname0310"><img src="https://avatars.githubusercontent.com/u/48761044?v=4?s=100" width="100px;" alt="noname"/><br /><sub><b>noname</b></sub></a><br /><a href="https://github.com/rycont/umjunsik-lang/commits?author=noname0310" title="Code">💻</a></td>
      <td align="center" valign="top" width="14.28%"><a href="https://github.com/TralocDheckoa"><img src="https://avatars.githubusercontent.com/u/42158095?v=4?s=100" width="100px;" alt="TralocDheckoa"/><br /><sub><b>TralocDheckoa</b></sub></a><br /><a href="https://github.com/rycont/umjunsik-lang/commits?author=TralocDheckoa" title="Code">💻</a></td>
      <td align="center" valign="top" width="14.28%"><a href="https://github.com/sangchoo1201"><img src="https://avatars.githubusercontent.com/u/75765800?v=4?s=100" width="100px;" alt="sangchoo1201"/><br /><sub><b>sangchoo1201</b></sub></a><br /><a href="https://github.com/rycont/umjunsik-lang/issues?q=author%3Asangchoo1201" title="Bug reports">🐛</a></td>
      <td align="center" valign="top" width="14.28%"><a href="http://warning.or.kr"><img src="https://avatars.githubusercontent.com/u/56759376?v=4?s=100" width="100px;" alt="Sukuna Shinmyoumaru"/><br /><sub><b>Sukuna Shinmyoumaru</b></sub></a><br /><a href="#platform-shs3182ym" title="Packaging/porting to new platform">📦</a></td>
      <td align="center" valign="top" width="14.28%"><a href="https://github.com/alvin1007"><img src="https://avatars.githubusercontent.com/u/77112874?v=4?s=100" width="100px;" alt="Yeong Jae Cho"/><br /><sub><b>Yeong Jae Cho</b></sub></a><br /><a href="#platform-alvin1007" title="Packaging/porting to new platform">📦</a></td>
      <td align="center" valign="top" width="14.28%"><a href="http://kiwiyou.dev"><img src="https://avatars.githubusercontent.com/u/12986388?v=4?s=100" width="100px;" alt="kiwiyou"/><br /><sub><b>kiwiyou</b></sub></a><br /><a href="#platform-kiwiyou" title="Packaging/porting to new platform">📦</a></td>
    </tr>
    <tr>
      <td align="center" valign="top" width="14.28%"><a href="https://seongxwoo.notion.site/Kyle-b49a1520f7ea4d5a86acedcf201129f6"><img src="https://avatars.githubusercontent.com/u/16515307?v=4?s=100" width="100px;" alt="Kyle Seongwoo Jun"/><br /><sub><b>Kyle Seongwoo Jun</b></sub></a><br /><a href="#infra-kyle-seongwoo-jun" title="Infrastructure (Hosting, Build-Tools, etc)">🚇</a></td>
      <td align="center" valign="top" width="14.28%"><a href="https://github.com/sean9892"><img src="https://avatars.githubusercontent.com/u/46587635?v=4?s=100" width="100px;" alt="Yubin Choi"/><br /><sub><b>Yubin Choi</b></sub></a><br /><a href="#example-sean9892" title="Examples">💡</a></td>
      <td align="center" valign="top" width="14.28%"><a href="https://www.acmicpc.net"><img src="https://avatars.githubusercontent.com/u/706317?v=4?s=100" width="100px;" alt="Baekjoon Choi"/><br /><sub><b>Baekjoon Choi</b></sub></a><br /><a href="#infra-Baekjoon" title="Infrastructure (Hosting, Build-Tools, etc)">🚇</a></td>
      <td align="center" valign="top" width="14.28%"><a href="https://eggnmad.com/info/"><img src="https://avatars.githubusercontent.com/u/93484785?v=4?s=100" width="100px;" alt="ㅇㅂㅎ"/><br /><sub><b>ㅇㅂㅎ</b></sub></a><br /><a href="#example-EGGnmad" title="Examples">💡</a></td>
      <td align="center" valign="top" width="14.28%"><a href="https://github.com/pizzaroot"><img src="https://avatars.githubusercontent.com/u/17989599?v=4?s=100" width="100px;" alt="pizzaroot"/><br /><sub><b>pizzaroot</b></sub></a><br /><a href="#platform-pizzaroot" title="Packaging/porting to new platform">📦</a></td>
      <td align="center" valign="top" width="14.28%"><a href="https://luxurycoop.tistory.com/"><img src="https://avatars.githubusercontent.com/u/22697167?v=4?s=100" width="100px;" alt="Dongha Hwang"/><br /><sub><b>Dongha Hwang</b></sub></a><br /><a href="#example-depth221" title="Examples">💡</a> <a href="https://github.com/rycont/umjunsik-lang/issues?q=author%3Adepth221" title="Bug reports">🐛</a></td>
      <td align="center" valign="top" width="14.28%"><a href="https://github.com/PersesTitan"><img src="https://avatars.githubusercontent.com/u/97427878?v=4?s=100" width="100px;" alt="PersesTitan"/><br /><sub><b>PersesTitan</b></sub></a><br /><a href="#platform-PersesTitan" title="Packaging/porting to new platform">📦</a> <a href="https://github.com/rycont/umjunsik-lang/issues?q=author%3APersesTitan" title="Bug reports">🐛</a></td>
    </tr>
    <tr>
      <td align="center" valign="top" width="14.28%"><a href="http://codeup.kr/userinfo.php?user=qwerty5233"><img src="https://avatars.githubusercontent.com/u/48686444?v=4?s=100" width="100px;" alt="JunHyeok Hong"/><br /><sub><b>JunHyeok Hong</b></sub></a><br /><a href="https://github.com/rycont/umjunsik-lang/commits?author=kongchu2" title="Documentation">📖</a></td>
      <td align="center" valign="top" width="14.28%"><a href="https://github.com/happy-spark"><img src="https://avatars.githubusercontent.com/u/107300540?v=4?s=100" width="100px;" alt="happy-spark"/><br /><sub><b>happy-spark</b></sub></a><br /><a href="#example-happy-spark" title="Examples">💡</a></td>
      <td align="center" valign="top" width="14.28%"><a href="https://sskate.me"><img src="https://avatars.githubusercontent.com/u/67222970?v=4?s=100" width="100px;" alt="Minsu Kim"/><br /><sub><b>Minsu Kim</b></sub></a><br /><a href="#platform-kms0219kms" title="Packaging/porting to new platform">📦</a></td>
      <td align="center" valign="top" width="14.28%"><a href="https://www.youtube.com/@comgongbro"><img src="https://avatars.githubusercontent.com/u/16649567?v=4?s=100" width="100px;" alt="JerryJung"/><br /><sub><b>JerryJung</b></sub></a><br /><a href="https://github.com/rycont/umjunsik-lang/commits?author=jerryjungwh" title="Documentation">📖</a></td>
      <td align="center" valign="top" width="14.28%"><a href="https://github.com/Hiyabye"><img src="https://avatars.githubusercontent.com/u/50550999?v=4?s=100" width="100px;" alt="Jihoon Lee"/><br /><sub><b>Jihoon Lee</b></sub></a><br /><a href="https://github.com/rycont/umjunsik-lang/commits?author=Hiyabye" title="Documentation">📖</a></td>
    </tr>
  </tbody>
</table>

<!-- markdownlint-restore -->
<!-- prettier-ignore-end -->

<!-- ALL-CONTRIBUTORS-LIST:END -->

# 문법

엄랭은 "엄", "준", "식", "동탄" 네개의 키워드와 "!", ".", " ", "~", "ㅋ" 다섯개의 기호로 코드가 이루어집니다.
모든 프로그램은 "어떻게"로 시작하며, 항상 "이 사람이름이냐ㅋㅋ"로 끝나야 합니다.

## 자료형

정수: 온점, 반점의 갯수로 나타냅니다. 온점의 갯수만큼 1을 더하며, 반점의 갯수만큼 1을 뺍니다.

```
... => 3
.. => 2
,, => -2
,,, => -3
.,., => 0
```

## 연산자

- 1 증가: `.`
- 1 감소: `,`
- 곱하기: " "(공백)

```
.. -> 2
,, -> -2
., -> 0
.. .. -> 4
.. ,, -> -4
... ... ... -> 27
```

## 변수

변수는 인덱싱(정수)을 통해 접근하고 대입할 수 있습니다. 지정하지 않았을경우 모든 변수의 기본값은 0입니다.

### 대입(엄)

연음의 갯수번째 변수에 뒤에 오는 수를 대입합니다

```
어어엄 => 3번째 변수에 0 지정
어엄 => 2번째 변수에 0 지정
엄.. => 1번째 변수에 2 지정
어엄. => 2번째 변수에 1 지정
엄,,, => 1번째 변수에 -3 지정
```

### 사용(어)

연음의 갯수번째 변수를 불러옵니다

```
어 => 1번째 변수
어어 => 2번째 변수
어어어 => 3번째 변수
```

### 초안/미구현 : N번째 변수에 대입 (엌ㅋ)

`엌`과 `ㅋ` 사이에 입력된 수 번째의 변수에 뒤에 오는 수를 대입합니다. 시작하는 엌은 `엌ㅋㅋㅋㅋㅋㅋㅋㅋ` 등으로, 끝내는 ㅋ는 `ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ` 등으로 늘려서 적을 수 있으며, 이에 따른 동작의 변화는 없습니다.

```
엌..ㅋ => 2번째 변수에 0 지정
엌ㅋㅋㅋㅋㅋ..ㅋㅋㅋㅋㅋ. => 2번째 변수에 1 지정
엌.ㅋ어 => 1번쨰 변수에 `어`값 지정
엌어ㅋ어어 => `어`번째 변수에 `어어` 변수의 값 지정
```

### 초안/미구현 : N번쨰 변수 가져오기

`어`와 `ㅋ` 사이에 입력된 수 번째의 변수의 값을 가져옵니다. 만약 마지막 문자가 `ㅋ`이 아니라 `엌`이라면 `어ㅋ`으로 분해해서 평가합니다. 끝내는 ㅋ은 `ㅋㅋㅋㅋㅋ`등으로 늘려서 적을 수 있으며, 이에 따른 동작의 변화는 없습니다.

```
어..ㅋ => 2번째 변수
어,,,ㅋ => -3번째 변수
어엌 => 어어ㅋ => `어`번째 변수
어어어,,ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ => (어어 - 2)번째 변수
```
### 초안/미구현 : 변수연산

변수 / 상수 덧셈식 뒤에 변수를 이어적으면 뒤에 따르는 변수를 더할 수 있습니다. 사칙연산의 우선순위가 적용되지 않으며, 무조건 왼쪽에서부터 연산합니다.

```
어, 어어 => 어 - 1 * 어어 => 어 - 어어
어.어어 => 어 + 1 + 어어
어어. 어어 => 어어 + 1 * 어어 => 어어 + 어어
어어 어어 어어 => 어어 ^ 3
```

~~정신나갈것같아요~~

## 콘솔

### 식?

콘솔에서 정수를 입력받습니다.

```
엄식? => 콘솔을 입력받아서 1번째 변수에 대입한다.
어엄식? => 콘솔을 입력받아서 2번째 변수에 대입한다.
```

### 식!

콘솔에 정수를 출력합니다.

```tsx
식..! => 콘솔에 2 출력
식어! => 콘솔에 첫번째 변수 출력
```

### 식ㅋ

콘솔에 문자를 출력합니다. `식`과 `ㅋ`사이에 오는 정수를 유니코드 문자로 변환하여 콘솔에 출력합니다. `식`과 `ㅋ`사이에 정수가 주어지지 않으면 개행합니다(`식ㅋ` => `\n`)

```tsx
식........... ........ㅋ => 콘솔에 X 출력
```

## 지시문

### 동탄?

`동탄{정수}?{실행할 명령}`으로 작성합니다. 정수가 0이라면 `실행할 명령`이 실행되며, 그렇지 않다면 다음줄로 넘어갑니다.

### 준

`준` 뒤에 오는 정수번째 줄로 이동합니다. `준.. => 2번째 줄(글자)로 이동`. 원라인코드의 경우에는 `~`로 분리된 코드단위로 카운트하여 이동합니다.

### 화이팅!

`화이팅!`뒤에 오는 정수를 반환하며 프로그램을 종료합니다.

## 기타

- 확장자는 `.umm`입니다.
- One-line 작성은 `\n`을 `~`로 치환합니다. (예제: 구구단 참조)

# 예제

[위키를 참조해주세요](https://github.com/rycont/umjunsik-lang/wiki)

# To-Do
- [ ] gnex-umjunsik [What is Gnex?](https://github.com/rycont/Gnex)
- [x] ~~웹-엄~~
- [x] ~~엄랭파이썬~~

# History

- 20200626 0030 : 엄랭 공개
- 20200626 0855 : 엄랭 문서 완성
- 20200625 1256 : 엄랭 Deno 구현체 배포
- 20200804 : 엄랭v2
  1. 모든 콘솔 출력은 인라인
  1. `화이팅!` 후에 오는 문자열을 반환하며 프로그램이 종료
  1. 새 문법 추가: `식ㅋ`
  1. 새 문법 추가: `동탄?`
  1. `화이팅!`의 명세 변경
- 20200805 : 문서 개정
  1. `동탄?` 설명 추가
  1. `화이팅!` 설명 변경
  1. 지시문들을 별도의 단락으로 분리
- 20200912 : 99병의 맥주 예제
- 20200915 : 엄랭v2-엄랭노드 구현체 배포
- 20201017 : 엄랭v2-파이썬 구현체 배포 by [Steve28](https://github.com/pl-Steve28-lq)
- 20201105 : 웹-엄: 자바스크립트로 된 엄랭 처리기(웹런타임) 배포 by [PMH](https://github.com/pmh-only)
- 20210530 : 엄씨(엄랭-C 컴파일러) 배포 by [Rok](https://github.com/Rokr0k)
- 20210809 : 엄랭 C# 구현체 배포 by [noname0310](https://github.com/noname0310)
- 20220201 : 엄랭 코틀린 구현체 배포 by [shs3182ym](https://github.com/shs3182ym)
- 20220203 : 엄랭 Go 구현체 배포 by [alvin1007](https://github.com/alvin1007)
- 20220203 : 엄랭 러스트 구현체 배포 by [kiwiyou](https://github.com/kiwiyou)
- 20220207 : 엄랭v3 초안 작성중
  1. N번째 변수 접근 / 대입 표현
  1. 변수간 덧셈연산