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 )