화이트스페이스 (프로그래밍 언어)

화이트스페이스()는 에드윈 브래디(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에 그 숫자를 저장한다.

화이트스페이스 언어에 쓰이는 공백 문자는 대부분의 언어와 컴파일러에서 각 토큰을 구분하는 공백 이상의 의미를 갖지 않는다.

 외부 링크 
  Whitespace 홈페이지
 Slashdot에 올라 온 발표 소식

분류:난해한 프로그래밍 언어
분류:2002년 개발된 프로그래밍 언어
분류:영어 기반이 아닌 프로그래밍 언어