# Kipple (프로그래밍 언어)

### 위키백과 ― 우리 모두의 백과사전.

Kipple은 스택 기반의 최소주의 프로그래밍 언어로, 튜링 완전하며 4개의 연산자와 한 개의 제어 구조를 갖고 있다.

## [편집] 언어의 설계

스택들은 a부터 z까지의 알파벳 소문자 이름이 붙어 있으며, 32비트 부호 있는 정수를 담을 수 있다. 연산자는 > 및 < (푸시), + (덧셈), - (뺄셈), ? (비우기)의 4개가 있다. 프로그램에 입력되는 내용은 실행 전에 i 스택에 순서대로 푸시되고, 프로그램이 종료된 후 o 스택에 있는 내용을 순서대로 팝해서 표준 출력으로 내보낸다. 숫자 출력을 간편하게 하기 위해 특수한 스택 @이 있는데, 이 스택에 숫자를 푸시할 경우 숫자의 각 자리에 해당하는 아스키 문자 값이 대신 푸시된다.

### [편집] 연산자들

피연산자들은 두 연산자가 공유할 수 있다. 예를 들어서 a>b<c-d?는 a>b b<c c-d d?와 같은 역할을 한다.

- a>b 또는 b<a는 스택 a에서 숫자 하나를 팝하여 그 숫자를 스택 b에 푸시한다.
- 42>a 또는 a<42는 스택 a에 숫자 42를 푸시한다.
- a+2(또는 a-2)는 스택 a의 꼭대기에 있는 숫자에 2를 더해서(또는 빼서) 스택 a에 푸시한다. 비슷하게, a+0은 스택 a의 꼭대기에 있는 숫자를 복제한다.
- a+b(또는 a-b)는 스택 b에서 숫자 하나를 팝한 후, 스택 a의 꼭대기에 있는 숫자에 그 숫자를 더해서(또는 빼서) 스택 a에 푸시한다. 따라서 a+a는 스택 a의 꼭대기에 있는 숫자를 두 배로 한다.
- a?는 스택 a의 꼭대기에 있는 숫자가 0일 때 스택 a를 비운다.

스택이 비었을 때 스택에서 팝한 결과나 스택 꼭대기에 있는 숫자는 모두 0으로 가정한다.

### [편집] 제어 구조

(a [코드])는 스택 a가 빌 때까지 괄호 안의 코드를 계속 실행한다. 이 구조는 중첩될 수 있으며, 괄호 다음의 스택은 피연산자로도 사용될 수 있다. 예를 들어서 (i>o)는 프로그램의 입력을 그대로 출력으로 보낸다.

### [편집] 전처리기

언어의 구성 요소는 아니지만 Kipple 인터프리터에는 문자열을 처리하는 전처리기가 있다. 문자열은 큰 따옴표 안에 들어 가며, C언어와 같은 탈출 문자는 현재 존재하지 않는다. 문자열을 적용할 수 있는 명령은 다음과 같다.

- a<"Kipple"은 a<75 a<105 a<112 a<112 a<108 a<101과 같은 역할을 한다. (K, i, p, p, l, e 순서로 푸시된다)
- "Kipple">a는 101>a 108>a 112>a 112>a 105>a 75>a와 같은 역할을 한다. (e, l, p, p, i, K 순서로 푸시된다)

## [편집] 예제

### [편집] Hello World 프로그램

다음 세 개의 프로그램은 모두 "Hello World!"를 출력한다.

    33>o 100>o 108>o 114>o 111>o 87>o 32>o 111>o 108>o 108>o 101>o 72>o

    "Hello World">o

    o<"dlroW olleH"

### [편집] 입출력

다음 프로그램은 리눅스의 cat 명령과 같이 입력된 문자열을 그대로 출력으로 보낸다.

    (i>o)

### [편집] 피보나치 수열

다음 프로그램은 피보나치 수열의 처음 25개의 항을 출력한다.

    24>n 0>t 1>a
    (n-1
      a+0
      t<a>b+a
      c<b>a<c
      n?
    )
    (t>@
      (@>o)
      32>o
    )

## [편집] 외부 고리

- 공식 홈페이지: 언어 설명과 예시 프로그램, 그리고 자바 애플릿으로 만든 온라인 인터프리터를 제공한다.

원본 주소 ‘http://ko.wikipedia.org../../../k/i/p/Kipple_%28%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D_%EC%96%B8%EC%96%B4%29.html’

분류: 난해한 프로그래밍 언어

##### Views

- 문서
- 토론
- 현재 버전

##### 찾기

##### 다른 언어

- English