아희

아희는 Puzzlet Chung이 만든 한글로 쓰는 난해한 프로그래밍 언어이다. 아희의 코드 공간 안에는 커서가 있어서 커서가 위치한 곳에 적혀 있는 명령을 수행하고, 또 그 명령에 따라 커서가 움직인다. 인터프리터가 아희를 실행하는 방법은 befunge와 비슷하다.

문법 
한글은 홀소리와 닿소리로 나눌 수 있는데 아희 코드의 홀소리는 커서가 이동할 방향을 지정하고, 닿소리는 인터프리터가 수행할 명령을 지정한다. 받침이 있는 닿소리 글자는 명령을 보조하는 인자로 작용한다.

닿소리 
ㅇ 묶음 받침은 모두 무시한다.
 ㅇ: 없음 명령으로 아무 일도 하지 않는다.
 ㅎ: 끝냄 명령으로 커서의 실행을 끝낸다. 이 때 현재 선택된 저장 공간에 값이 하나 이상 남아 있으면 ㅁ 명령으로 뽑아낼 수 있는 값을 뽑아내 운영체제에 돌려 준다. 저장 공간이 비어 있으면 0을 돌려준다.

ㄷ 묶음: 셈. 받침은 모두 무시한다.
 ㄷ: 덧셈 명령으로 저장공간에서 두 값을 뽑아낸 다음 둘을 더한 값을 저장공간에 집어넣는다.
 ㄸ: 곱셈 명령으로 저장공간에서 두 값을 뽑아낸 다음 둘을 곱한 값을 저장공간에 집어넣는다.
 ㅌ: 뺄셈 명령으로 저장공간에서 두 값을 뽑아낸 다음 나중 값에서 먼저 값을 뺀 값을 저장공간에 집어넣는다.
 ㄴ: 나눗셈 명령으로 저장공간에서 두 값을 뽑아낸 다음 나중 값에서 먼저 값을 나눈 값을 저장공간에 집어넣는다.
 ㄹ: 나머지 명령으로 저장공간에서 두 값을 뽑아낸 다음 나중 값에서 먼저 값을 나눈 나머지를 저장공간에 집어넣는다.

ㅁ 묶음 저장공간
 ㅁ: 뽑기 명령이다. 지금 저장공간이 스택이라면 맨 위의 값, 큐라면 맨 앞의 값을 뽑아낸다. 통로라면 거기서 값을 하나 뽑아온다.
 ㅇ 받침이 오면 뽑아낸 값을 10진수로 출력합니다.
 ㅎ 받침이 오면 뽑아낸 값에 해당하는 코드포인트의 유니코드 문자를 UTF-8로 출력한다.
 다른 받침이 오면 뽑아낸 값을 버린다.
 ㅂ: 집어넣기 명령이다. 지금 저장공간이 스택이라면 맨 위에, 큐라면 맨 뒤에 값을 집어넣는다. 통로라면 값을 하나 보낸다.
 ㅇ 받침이 오면 표준 입력에서 정수 문자열을 받아 이에 해당하는 값을 지금 저장공간에 집어넣는다.
 ㅎ 받침이 오면 표준 입력에서 UTF-8로 유니코드 문자를 받아 이에 해당하는 유니코드 코드포인트를 지금 저장공간에 집어넣는다.
 ㅇ이나 ㅎ이 아닌 받침에 대해서는 각각 상수를 저장공간에 집어넣는다.

 ㅃ: 중복 명령이다. 지금 저장공간이 스택이라면 맨 위의 값을 그 값 위에 하나 더 집어넣고, 큐라면 맨 앞의 값을 앞에 하나 더 덧붙인다.
 ㅍ: 바꿔치기 명령이다. 지금 저장공간이 스택이라면 맨 위 값과 그 바로 아래 값을, 큐라면 맨 앞의 값과 그 바로 뒤 값을 바꾼다.

홀소리 
 ㅏ, ㅓ, ㅗ, ㅜ: 커서를 각각 오른쪽, 왼쪽, 위, 아래로 한 칸 옮긴다.
 ㅑ, ㅕ, ㅛ, ㅠ: 커서를 각각 오른쪽, 왼쪽, 위, 아래로 두 칸 옮긴다.
 ㅡ : 커서가 가로로 왔으면 그 방향과 크기 그대로, 세로로 왔으면 전에 있던 자리로 옮기고 진행 방향을 뒤집는다.
 ㅣ: 커서가 세로로 왔으면 그 방향과 크기 그대로, 가로로 왔으면 전에 있던 자리로 옮기고 진행 방향을 뒤집는다.
 ㅢ: 커서를 전에 있던 자리로 옮기고 진행 방향도 뒤집는다.
 ㅐ ㅔ ㅒ ㅖ ㅘ ㅙ ㅚ ㅝ ㅞ ㅟ :기능 없음 (커서가 이동하는 방향과 크기는 변하지 않는다.)

예제

Hello, world! 
밤밣따빠밣밟따뿌
빠맣파빨받밤뚜뭏
돋밬탕빠맣붏두붇
볻뫃박발뚷투뭏붖
뫃도뫃희멓뭏뭏붘
뫃봌토범더벌뿌뚜
뽑뽀멓멓더벓뻐뚠
뽀덩벐멓뻐덕더벅

같이 보기 
 난해한 프로그래밍 언어
 비펀지

각주

외부 링크 
 
 자바스크립트로 된 아희 처리기
 AheuiChem

난해한 프로그래밍 언어