- 초성
- ㅇ 묶음
- ㅇ: 아무 일도 하지 않는다. (Null)
- ㅎ: 프로그램을 종료한다. * 종성으로 ㅇ이 오는 경우: 선택된 저장 공간에 값이 하나 이상 남아 있다면 하나만 뽑아내 운영체제에 반환하고 비어있다면 0을 반환한다. * 종성으로 ㅎ이 오는 경우: -1을 반환한다. * 나머지 종성이면 종성의 획수 값을 운영체제에 반환한다.
- ㄱ 묶음 - 함수
- ㄱ: 함수 선언 * 이 글자 이후에 실행되는 코드를 함수로 저장한다. * 함수 선언 이후에는 중성의 반대 방향으로 이동한다. * 종성은 함수의 이름과 같이 작동한다. * 이 글자가 한번 더 실행되면 함수 선언을 종료한다.
- ㅋ: 함수 실행 * 종성에 해당하는 함수를 실행한다. * 정확히는 함수 선언 위치로 이동해서 함수 선언 종료 명령이 나올 때까지 실행을 하고 돌아온다.
- 예시: 야하약켝각뱡각방방각 / 입력: 3 4
* 야와 약에 의해 제일 먼저 첫 번째 각으로 이동된다.
* 함수가 저장된다. (첫 번째 각의 위치로만 저장)
* 각의 반대 방향인 왼쪽으로 이동한다.
* 켝을 만나서 "각뱡각방방각"을 실행한다.
- 각에서 시작한다.
- 제일 먼저 뱡을 만나 3을 입력받는다.
- 다음으로 방을 만나 4를 입력받는다.
- 그 뒤 두 번째 방을 만나지만 입력받을 내용이 없어 왼쪽으로 이동한다.
- 첫 번째 방을 다시 만나지만 입력받을 내용이 없어 왼쪽으로 이동한다.
- 두 번째 각을 만나 함수 선언이 종료된다. * 켝에 의해 하로 이동되어 프로그램이 종료된다.
- ㄲ: 내장 함수 실행
* 종성에 해당하는 내장 함수를 실행한다.
* ㄱ 묶음 - 상수
- 그에 해당하는 상숫값을 저장공간에 넣는다. 광속은 정수 값이며, 나머지 상수는 소숫점 아래 5번째 자리까지 저장된다.
- ㄱ: 원주율 (~= 3.14)
- ㅋ: 오일러 수 e (~= 2.7)
- ㄲ: 중력 상수 g (~= 9.8)
- ㄳ: 광속 c (m/s) * ㄷ 묶음 - 연산
- ㄷ: 거듭제곱
- ㅌ: 로그 (log_a b)
- ㄴ: 버림
- ㄵ: 반올림
- ㄶ: 올림 * ㄹ 묶음 - 제어 및 입출력
- ㄹ: 저장공간에서 값을 하나 뽑아 그 값만큼의 양의 값을 입력받는다.
- ㄺ: 저장공간에서 값을 하나 뽑아 그 값만큼의 양의 값을 출력한다. 값이 자연수가 아닐 경우 저장공간을 통째로 출력시킨다.
- ㄻ: 저장공간에서 값을 하나 뽑고 이 내장 함수가 한번 더 실행될 때 까지의 코드를 그 값이 나타내는 횟수만큼 반복한다.
- ㄼ: 정수 배열을 입력받는다. 숫자나 -, .이 아닌 문자를 기준으로 나누며, 줄의 끝에 도달할 때까지 입력받는다.
- ㄽ: ㄾ가 실행될 때 이동할 위치로 저장한다.
- ㄾ: 가장 마지막으로 ㄽ이 실행된 때로 돌아간다. 이 글자가 첫 번째 실행이라면 이동하지 않는다.
- ㄿ: 반복문을 나간다. (break) 즉, ㄻ 반복 중에는 반복 종료 ㄻ으로 이동해 계속하고, ㄻ 반복 중이 아니라면 다음으로 실행되는 ㄾ 이동을 무시한다.
- ㅀ: 1회 반복을 종료한다. (continue) 즉, ㄻ 반복 중에는 반복 시작 ㄻ으로 이동해 계속하고, ㄻ 반복 중이 아니라면 마지막으로 선언된 ㄽ으로 이동한다. 반복 도중에 ㄽ이 선언되었다면 ㄽ으로 이동한다. * ㅁ 묶음 - 값
- ㅁ: 저장공간에 1을 넣는다.
- ㅂ: 저장공간에 10을 넣는다.
- ㅄ: 저장공간에 -1을 넣는다.
- ㅍ: 값 2개 꺼내서 연결해서 넣는다. (3, 7 -> 37 / 7, 15 -> 715) * ㅅ 묶음 - 저장공간
- ㅅ: 저장공간의 크기를 현재 저장공간에 저장한다.
- ㅆ: 저장공간에서 값을 하나 뽑아 그 값이 처음으로 나오는 인덱스를 넣고, 많약 값이 나오지 않으면 -1을 넣는다.
- ㅈ: 저장공간을 오름차순 정렬한다.
- ㅊ: 저장공간을 내림차순 정렬한다. * ㅇ 묶음 - 미정.
- 없음, ㅇ, ㅎ
- ㄷ 묶음 - 연산
- ㄷ: 덧셈
- ㅌ: 뺄셈
- ㄸ: 곱셈
- ㄴ: 나눗셈
- ㄹ: 나머지 연산 (modulo)
- 종성으로 ㅇ이 오는 경우: 저장공간에서 두 값을 뽑아낸 다음 둘을 연산한 값을 저장공간에 저장한다. 순서가 있는 연산자(ㅌ, ㄴ, ㄹ)의 경우 나중에 꺼낸 값이 연산자의 왼쪽, 먼저 꺼낸 값이 오른쪽에 온다. 만약 저장공간에 남은 값이 한 개 이하라면 진행방향을 바꾼다.
- 종성으로 ㅎ이 오는 경우: 순서가 있는 연산자의 경우 먼저 꺼낸 값이 연산자의 왼쪽, 나중에 꺼낸 값이 오른쪽에 온다. 다른 연산의 경우 ㅇ 종성과 같다. 만약 저장공간에 남은 값이 한 개 이하라면 진행방향을 바꾼다.
- 종성이 없는 경우: 순서가 있는 연산자의 경우 더 큰 값이 연산자의 왼쪽, 더 작은 값이 오른쪽에 온다. 다른 연산의 경우 ㅇ 종성과 같다. 만약 저장공간에 남은 값이 한 개 이하라면 진행방향을 바꾼다.
- 나머지 종성이면 저장공간에서 값을 하나 뽑아서 종성의 획수 값과 연산을 한다. 순서가 있는 연산자의 경우 저장공간에서 뽑은 값이 왼쪽, 종성의 획수 값이 오른쪽에 간다. 만약 저장공간에 남은 값이 없다면 진행방향을 바꾼다.
- ㅁ 묶음 - 저장공간
- ㅁ: 뽑기. 현재 선택된 저장공간에서 자료 구조의 형태에 맞게 하나 꺼내온다. * 종성으로 ㅇ이 오는 경우: 값을 숫자 형식으로 출력한다. * 종성으로 ㅎ이 오는 경우: 해당하는 유니코드의 문자를 출력한다. * 종성이 없는 경우: 값을 1개 뽑아내서 버린다. * 나머지 종성인 경우: 그 종성이 나타내는 개수만큼 뽑아서 버린다. * 현재 선택된 저장공간에 값이 부족하다면 진행 방향을 바꾼다.
- ㅂ: 넣기. 현재 선택된 저장공간에 값을 하나 넣는다. * 종성으로 ㅇ이 오는 경우: 값을 숫자 형식으로 입력받는다. 즉 '8'은 8로 저장된다. 공백이나 개행이 나올 때까지 숫자를 읽어들이며, 앞에 -가 존재하는 경우 음수로 취급하고, .이 존재하는 경우 실수로 취급한다. * 종성으로 ㅎ이 오는 경우: 값을 문자 형식으로 입력받는다. 즉 '8'은 56으로 저장된다. (아스키 코드 기준) * 나머지 종성의 경우, 종성의 획수 값을 집어넣는다.
- ㅃ: 중복. 현재 선택된 저장공간의 종류에 따라 동작이 달라진다. * 현재 선택된 저장공간이 스택이라면 맨 위의 값을 종성이 가리키는 저장공간에 집어넣는다. * 현재 선택된 저장공간이 큐라면 맨 앞의 값을 종성이 가리키는 저장공간에 집어넣는다. 뒤의 값이 아님에 주의하자. * 현재 선택된 저장공간에 값이 하나도 없다면 방향을 바꾼다.
- ㅍ: 바꿔치기. * 종성으로 ㅇ이 오는 경우: 저장공간을 뒤집는다. * 종성으로 ㅎ이 오는 경우: 저장공간의 양 끝 값을 바꾼다. * 나머지 종성의 경우, 맨 위(앞) 값과 그 값을 제외한 위(앞)에서부터 종성의 획수 값 번째 값을 바꾼다. 종성이 없을 경우 0이 아닌 1로 간주한다. * 만약 저장공간에 남은 값이 한 개 이하라면 진행방향을 바꾼다.
- ㅅ 묶음 - 제어
- ㅅ: 선택. 종성이 가리키는 저장공간을 선택한다. * 종성이 없다면(사 등) 기본으로 선택되는 스택으로 되돌아온다.
- ㅆ: 이동. 지금 저장공간에서 값 하나를 뽑아내서 받침이 나타내는 저장공간에 그 값을 집어넣는다. * 만약 현재 선택된 저장공간에 값이 하나도 없다면 진행방향을 바꾼다.
- ㅈ: 비교. 저장공간에서 값 두 개를 뽑아 내서 비교한다. * 종성으로 ㅇ이 오는 경우: 나중에 뽑아낸 값이 먼저 뽑아낸 값보다 더 크거나 같으면 1을, 아니면 0을 지금 저장공간에 집어넣는다. * 종성으로 ㅎ이 오는 경우: 나중에 뽑아낸 값이 먼저 뽑아낸 값보다 더 크면 1을, 아니면 0을 지금 저장공간에 집어넣는다. * 나머지 종성의 경우, 나중에 뽑아낸 값과 먼저 뽑아낸 값이 같으면 1을, 아니면 0을 지금 저장공간에 집어넣는다.
- ㅊ: 조건. * 저장공간에서 값 하나를 뽑아내서 그 값이 종성이 나타내는 값과 다르면 진행해야 할 방향대로, 같으면 그 반대 방향대로 간다. ㅇ을 1로, ㅎ을 -1로 간주한다.
- ㅉ: 미정.
- 중성
- ㅏ,ㅓ,ㅗ,ㅜ: 중성의 방향이 커서의 방향이다.
- ㅑ,ㅕ,ㅛ,ㅠ: 위와 같으나 2칸 옮긴다.
- 만약 끝에 다다르면 반대쪽으로 이동하되, 1칸으로 취급한다. 즉 '악안야'의 경우 '야' 에서 끝에 다다르면 첫 열로 되돌아가지만, '안'이 아닌 '악'을 실행시킨다. 따라서 '야'를 '아'로 바꿔도 결과는 같다.
- ㅣ,ㅡ,ㅢ: ㅣ는 커서가 세로 방향으로 들어오면 그대로, 가로로 돌아오면 방향을 뒤집는다. ㅡ는 그 반대다. ㅢ는 어느 방향이든 방향을 뒤집는다.
- ㅘ는 오른쪽 위, ㅚ는 왼쪽 위, ㅝ는 왼쪽 아래, ㅟ는 오른쪽 아래 대각선 방향으로 이동한다.
- ㅐ는 커서가 세로 방향으로 들어오면 오른쪽으로, 가로 방향으로 들어오면 방향을 뒤집는다. ㅔ는 반대로 커서가 세로 방향으로 들어오면 왼쪽으로 이동한다.
- ㅙ와 ㅞ는 이전 이동을 반복한다.
- 위에서 서술하지 않은 종성은 기능 없음.
- 한글이 아닌 모든 글자는 주석으로 처리된다. 즉 무시된다.
- '한글'을 가(U+AC00) 이상 힣(U+D7A3) 이하로만 정의하는 구현체도 있고, ㄱ
ㅎ, ㅏㅣ(U+3131 ~ U+3163)등 한글 낱자도 포함하는 구현체도 존재한다. 아희 명세에 따르면 공식적으로는 U+AC00~U+D7A3 사이의 문자만 한글로 취급한다.
ㅇ, ㅎ (2개): 큐 나머지 종성 (22개): 스택
- 종성별 선의 수 || 0 ||종성 없음 || || 2 ||ㄱ, ㄴ, ㅅ || || 3 ||ㄷ, ㅈ, ㅋ || || 4 ||ㅁ, ㅂ, ㅊ, ㅌ, ㅍ, ㄲ, ㄳ, ㅆ || || 5 ||ㄹ, ㄵ, ㄶ || || 6 ||ㅄ || || 7 ||ㄺ, ㄽ || || 8 ||ㅀ || || 9 ||ㄻ, ㄼ, ㄾ, ㄿ ||
- 주석을 달 수 있는 기능은 직접적으로 제공되지는 않는다. 다만, 커서가 절대 지나가지 않는 위치에는 어떠한 글자를 써도 프로그램에 영향을 미치지 않으므로, 그런 자리를 활용해 설명을 쓸 수 있다.
- 시작하면 커서는 위에서 들어온다.