Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

설계 의도가 명확한 스펙 상의 불분명함을 바로잡음. #3

Merged
merged 1 commit into from
Mar 30, 2015
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
22 changes: 11 additions & 11 deletions _posts/2006-10-27-specification.ko.markdown
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ layout: default
title: 아희 스펙
---

마지막 수정: 2014-08-25
마지막 수정: 2015-03-30

**아희**는 한글로 된 [난해한 프로그래밍 언어](http://ko.wikipedia.org/wiki/%EB%82%9C%ED%95%B4%ED%95%9C_%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D_%EC%96%B8%EC%96%B4)입니다.

Expand All @@ -19,18 +19,18 @@ title: 아희 스펙

코드 공간의 한 쪽 끝에 다다르면 커서는 반대편 끝으로 이동합니다. 이는 Funge-98의 wrapping algorithm과 동일합니다.

아희에서 쓰이는 저장 공간은 여러 개가 있습니다. 대부분이 스택이고, 큐가 하나 있습니다. 그리고 확장기능과 소통하는 통로가 있는데, 스택과 마찬가지로 씁니다. 집어넣기(push)로 인수를 전달하고 뽑아내기(pop)로 결과를 받아옵니다. 중복 명령을 포함한 모든 뽑아내기를 쓰는 명령에서 저장 공간에 값이 모자랄 경우, 커서는 그 명령을 실행하지 않고 커서가 있는 글자의 홀소리의 반대방향으로 움직입니다.
아희에서 쓰이는 저장 공간은 여러 개가 있습니다. 대부분이 스택이고, 큐가 하나 있습니다. 그리고 확장기능과 소통하는 통로가 있는데, 스택과 마찬가지로 씁니다. 집어넣기(push)로 인수를 전달하고 뽑아내기(pop)로 결과를 받아옵니다. 중복과 바꿔치기 명령을 포함한 모든 뽑아내기를 쓰는 명령에서 저장 공간에 값이 모자랄 경우, 커서는 그 명령을 실행하지 않고 커서가 있는 위치에서 기대되는 이동 방향의 반대방향으로 움직입니다.

### 홀소리

각 홀소리의 기능은 다음과 같습니다.

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

### 닿소리

Expand All @@ -39,7 +39,7 @@ title: 아희 스펙
ㅇ 묶음

* ㅇ은 **없음** 명령으로 아무 일도 하지 않습니다.
* ㅎ은 **끝냄** 명령으로 커서의 실행을 끝냅니다. 이 때 스택에서 맨 위 값을 뽑아서 운영체제에 돌려 줍니다.
* ㅎ은 **끝냄** 명령으로 커서의 실행을 끝냅니다. 이 때 현재 선택된 저장 공간에 값이 하나 이상 남아 있다면 맨 위 값을 뽑아내 운영체제에 돌려 줍니다. 저장 공간이 비어있다면 0을 돌려줍니다.

ㄷ 묶음 - 셈

Expand All @@ -52,9 +52,9 @@ title: 아희 스펙
ㅁ 묶음 - 저장공간

* ㅁ은 **뽑기** 명령입니다. 지금 저장공간이 스택이라면 맨 위의 값, 큐라면 맨 앞의 값을 뽑아냅니다.(pop) 통로라면 거기서 값을 하나 뽑아옵니다. ㅁ 명령에는 받침이 올 수 있는데, 이에 대한 설명은 아래에 있습니다.
* ㅂ은 집어넣기 명령입니다. 지금 저장공간이 스택이라면 맨 위에, 큐라면 맨 뒤에 값을 집어넣습니다.(push) 통로라면 값을 하나 보냅니다. 집어넣거나 보낼 값은 받침이 결정하는데, 이에 대한 설명은 아래에 있습니다.
* ㅃ은 중복 명령입니다. 지금 저장공간이 스택이라면 맨 위의 값을 그 값 위에 하나 더 집어넣고, 큐라면 맨 앞의 값을 앞에 하나 더 덧붙입니다. (통로라면 아까 보낸 값을 한 번 더 보냅니다.)
* ㅍ은 바꿔치기 명령입니다. 지금 저장공간이 스택이라면 맨 위 값과 그 바로 아래 값을, 큐라면 맨 앞의 값과 그 바로 뒤 값을 바꿉니다. (통로라면?)
* ㅂ은 **집어넣기** 명령입니다. 지금 저장공간이 스택이라면 맨 위에, 큐라면 맨 뒤에 값을 집어넣습니다.(push) 통로라면 값을 하나 보냅니다. 집어넣거나 보낼 값은 받침이 결정하는데, 이에 대한 설명은 아래에 있습니다.
* ㅃ은 **중복** 명령입니다. 지금 저장공간이 스택이라면 맨 위의 값을 그 값 위에 하나 더 집어넣고, 큐라면 맨 앞의 값을 앞에 하나 더 덧붙입니다. (통로라면 아까 보낸 값을 한 번 더 보냅니다.)
* ㅍ은 **바꿔치기** 명령입니다. 지금 저장공간이 스택이라면 맨 위 값과 그 바로 아래 값을, 큐라면 맨 앞의 값과 그 바로 뒤 값을 바꿉니다. (통로라면?)

ㅁ에 ㅇ받침이 있으면 저장공간에서 뽑아낸 값을 숫자로, ㅎ받침이 있으면 그 값에 해당하는 유니코드 문자로 출력합니다. 나머지 받침은 뽑아낸 값을 그냥 버립니다. ㅂ도 마찬가지로 ㅇ받침이 있으면 입력받은 숫자를, ㅎ받침이 있으면 입력받은 문자의 유니코드 코드값을 저장공간에 집어넣습니다.

Expand Down Expand Up @@ -82,7 +82,7 @@ title: 아희 스펙
* ㅅ은 **선택** 명령으로 저장공간을 선택합니다. 어느 것을 선택하는지는 받침을 따르는데, 이에 대한 설명은 아래에 있습니다.
* ㅆ은 **이동** 명령으로 저장공간에서 값 하나를 뽑아내서 받침이 나타내는 저장공간에 그 값을 집어 넣습니다.
* ㅈ은 **비교** 명령으로 저장공간에서 값 두 개를 뽑아 내서 비교합니다. 나중에 뽑아낸 값이 더 크거나 같으면 1을, 아니면 0을 지금 저장공간에 집어넣습니다.
* ㅊ은 **조건** 명령으로 저장공간에서 값 하나를 뽑아내서 그 값이 0이 아니면 홀소리의 방향대로, 0이면 그 반대 방향대로 갑니다.
* ㅊ은 **조건** 명령으로 저장공간에서 값 하나를 뽑아내서 그 값이 0이 아니면 진행해야 할 방향대로, 0이면 그 반대 방향대로 갑니다.

ㅅ나 ㅆ으로 선택할 수 있는 스택은 (받침 없음), ㄱ, ㄴ, ㄷ, ㄹ, ㅁ, ㅂ, ㅅ, ㅈ, ㅊ, ㅋ, ㅌ, ㅍ, ㄲ, ㄳ, ㄵ, ㄶ, ㄺ, ㄻ, ㄼ, ㄽ, ㄾ, ㄿ, ㅀ, ㅄ, ㅆ이 있습니다. ㅇ은 큐이며, ㅎ을 선택하면 확장 기능과 소통하기 위한 통로가 선택됩니다.

Expand Down