화이트스페이스 (프로그래밍 언어)
보이기
(Whitespace 프로그래밍 언어에서 넘어옴)
화이트스페이스(Whitespace)는 에드윈 브래디(Edwin Brady)와 크리스 모리스(Chris Morris, cim)가 2003년 4월 1일(만우절)에 발표한 난해한 프로그래밍 언어이다. 문법에는 오로지 공백과 탭, 그리고 개행 문자만이 의미가 있으며, 인터프리터는 이 3종류의 공백 문자를 뺀 모든 문자를 무시한다. 2004년 현재 이 언어의 최신 버전은 0.3이다.
이 언어는 스택 기반의 명령형 프로그래밍 언어이다. 프로그램이 실행되는 가상 머신은 스택과 힙을 가지고 있다. 프로그래머는 스택에 임의의 정수를 자유롭게 푸시할 수 있으며, (아직 부동소수점이나 실수의 구현은 없다.) 또한 변수와 자료 구조를 계속 보존하기 위해서 힙에 접근할 수 있다.
명령어 목록
[편집]여기에서는 공백 문자들의 표현을 간편하게 하기 위하여 공백은 S, 탭은 T, 개행문자는 L로 표기한다.
화이트스페이스의 명령어는 둘 이상의 공백 문자로 이루어져 있다. 그중 일부 명령 뒤에는 인자가 필요한데, 크게 숫자 인자와 라벨 인자로 나뉜다.
- 숫자는 첫 문자가 공백일 때 양수이고, 탭일 때 음수이다. 그 다음 문자부터는 숫자의 절대값을 2진수로 표현하며, 공백은 0, 탭은 1을 가리킨다. 숫자 인자는 숫자 뒤에 개행문자를 붙여서 표현한다. 예를 들어서 13은 STTSTL, SSTTSTL, SSSTTSTL 등으로, -13은 TTTSTL, TSTTSTL, TSSTTSTL 등으로, 0은 L, SL, SSL, SSSL, TL, TSL, TSSL 등으로 표현할 수 있다.
- 라벨은 공백과 탭만으로 이루어진 문자열이다. 라벨 인자는 라벨 뒤에 개행문자를 붙여서 표현한다. 예를 들어서 STSTSL와 TSTSL, L는 서로 다른 라벨을 가리키는 인자이다.
화이트스페이스 0.3에서 지원하는 명령은 다음과 같다:
명령 | 인자 종류 | 설명 |
---|---|---|
SS |
숫자 | 해당하는 숫자를 스택에 넣는다. |
SLS |
- | 스택 꼭대기에 있는 숫자를 복제한다. |
STS |
숫자 (n) | 스택 꼭대기부터 세서 n번째 숫자를 복사해서 스택 꼭대기에 넣는다. |
SLT |
- | 스택 꼭대기에 있는 두 숫자의 자리를 바꾼다. |
SLL |
- | 스택에서 숫자 하나를 꺼내서 버린다. |
STL |
숫자 (n) | 스택 꼭대기에 있는 숫자만 빼고, 스택 윗쪽에 있는 n개의 숫자를 버린다. |
TSSS |
- | 스택에서 a와 b를 순서대로 꺼낸 후, a+b를 넣는다. |
TSST |
- | 스택에서 a와 b를 순서대로 꺼낸 후, b-a를 넣는다. |
TSSL |
- | 스택에서 a와 b를 순서대로 꺼낸 후, a*b를 넣는다. |
TSTS |
- | 스택에서 a와 b를 순서대로 꺼낸 후, 정수 나눗셈 b/a의 몫을 넣는다. |
TSTT |
- | 스택에서 a와 b를 순서대로 꺼낸 후, 정수 나눗셈 b/a의 나머지(b mod a)를 넣는다. |
TTS |
- | 스택에서 v와 a를 순서대로 꺼낸 후, 힙 공간의 주소 a에 값 v를 저장한다. |
TTT |
- | 스택에서 숫자 a를 꺼낸 후, 힙 공간의 주소 a에 들어 있는 값을 넣는다. |
LSS |
라벨 | 라벨을 현재 위치에 설정한다. |
LST |
라벨 | 지정된 라벨에 있는 서브루틴을 호출한다. |
LSL |
라벨 | 지정된 라벨로 이동한다. |
LTS |
라벨 | 스택에서 숫자를 꺼내서, 그 숫자가 0이면 지정된 라벨로 이동한다. |
LTT |
라벨 | 스택에서 숫자를 꺼내서, 그 숫자가 음수이면 지정된 라벨로 이동한다. |
LTL |
- | 서브루틴을 끝내고 원래 위치로 돌아 간다. |
LLL |
- | 프로그램을 종료한다. |
TLSS |
- | 스택에서 숫자 하나를 꺼내고, 그 숫자가 가리키는 ASCII 문자를 출력한다. |
TLST |
- | 스택에서 숫자 하나를 꺼내고, 그 숫자를 문자열로 출력한다. |
TLTS |
- | 사용자에게 문자 하나를 입력받고, 스택에서 숫자 a를 꺼내서 힙 공간의 주소 a에 그 문자의 ASCII 값을 저장한다. |
TLTT |
- | 사용자에게 숫자를 입력받고, 스택에서 숫자 a를 꺼내서 힙 공간의 주소 a에 그 숫자를 저장한다. |
화이트스페이스 언어에 쓰이는 공백 문자는 대부분의 언어와 컴파일러에서 각 토큰을 구분하는 공백 이상의 의미를 갖지 않는다.