1.
공백 문자2.
난해한 프로그래밍 언어의 한 종류
1. 공백 문자
컴퓨터에서 콘솔이나 프린터로 찍었을 때 공백을 표현하는 문자들을 의미한다.POSIX 표준에 따르면 아스키 코드 9(Horizontal Tab), 10(Line Feed), 11(Vertical Tab), 12(Form Feed), 13(Carriage Return), 32(Space) 여섯 개가 여기에 속한다.
문자 | 유니코드 | 이름 | 약칭 |
U+0020 | space | SPC | |
\\t | U+0009 | horizontal tab | TAB |
\\n | U+000A | newline | LF |
\\v | U+000B | vertical tab | VT |
\\f | U+000C | feed | FF |
\\r | U+000D | carriage return | CR |
C언어의 isspace 함수로 화이트스페이스를 가려낼 수 있다.
2. 난해한 프로그래밍 언어의 한 종류
2003년 만우절에 에드윈 브래디(Edwin Brady), 크리스 모리스(Chris Morris)라는 두 사람이 발표한 난해한 프로그래밍 언어.얼핏 보면 코드로 보이지도 않는 의미 불명, 정체불명의 프로그래밍 방식이 압권이다. 이름 그대로 화이트스페이스(Whitespace)인데, 모든 명령어가 스페이스, 탭, 엔터로 구성되어 있다. 공백과 개행 문자를 1바이트로 치기 때문에 바이트 수는 늘어나지만 소스 코드를 열어보면 아무것도 안 쓰여있는 것처럼 보인다. 메모장 등의 에디터로 열거나 인쇄하면 모르는 사람의 눈에는 단순히 백지로만 보인다는 얘기. 때문에 HxD Hex Editor 같은 바이너리 에디터로 열거나 Notepad++같이 기호 표시 기능을 지원하는 편집기로 열어야 제대로 된 코드를 확인할 수 있다. 이걸 만든 인간들이 얼마나 변태인지 파악할 수 있는 대목이기도 하다.
기본적으로는 스택 기반의 명령어 입력형이다. 즉 공백과 탭과 엔터의 조합이 전부 명령어라는 것이다. 또한 스택과 힙을 갖고 있어서 스택에 임의의 정수를 입출력 가능하며, 변수와 자료 구조 보존을 위해 힙에 접근할 수 있다고 한다.[1]
편의를 위해 공백은 S, 탭은 T, 개행은 L로 표기하고, 스택 맨 위의 숫자는 a, 두 번째 숫자는 b로 표기한다.
명령어는 종류에 따라 앞에 '임프'(IMP)를 붙여야 쓸 수 있다.
임프는 다음의 종류가 있다.
임프(IMP) | 용도 |
S | 스택 조작 |
TS | 수 연산 |
TT | 힙 액세스 |
L | 흐름 제어 |
TL | 입/출력 |
스택 조작(IMP: S)
명령어 | 매개 변수 | 의미 |
S | 숫자 | 숫자를 스택에 넣는다. |
LS | - | 스택 맨 위에 있는 숫자를 복제한다. |
TS | 숫자(n) | 스택 맨 위에서부터 n번째 숫자를 복사해서 스택 맨 위에 넣는다. |
LT | - | 스택 맨 위에 있는 두 숫자의 자리를 바꾼다. |
LL | - | 스택 맨 위의 숫자 하나를 버린다. |
TL | 숫자(n) | 스택 맨 위를 제외하고 스택 위쪽에 있는 n개의 숫자를 버린다. |
연산(IMP: TS)
참고로 a, b는 위에서도 말했듯이 스택 가장 위의 두 숫자를 뜻한다.
참고로 a, b는 위에서도 말했듯이 스택 가장 위의 두 숫자를 뜻한다.
명령어 | 의미 |
SS | 스택에서 a,b를 꺼낸 다음 a+b하여 넣는다. |
ST | 스택에서 a,b를 꺼낸 다음 a-b하여 넣는다. |
SL | 스택에서 a,b를 꺼낸 다음 a*b하여 넣는다. |
TS | 스택에서 a,b를 꺼낸 다음 a/b하여 몫을 넣는다. |
TT | 스택에서 a,b를 꺼낸 다음 a/b하여 나머지를 넣는다. |
힙 액세스(IMP: TT)
명령어 | 의미 |
S | 스택에서 v,a를 꺼낸 다음 힙 공간의 주소 a에 v를 넣는다. |
T | 스택에서 a를 꺼낸 다음 힙 공간의 주소 a에 있는 값을 넣는다. |
흐름 제어(IMP: L)
명령어 | 매개 변수 | 의미 |
SS | 라벨 | 현 위치에 라벨을 설정한다. 라벨은 공백과 탭만으로 구성되며 끝에 엔터를 넣어서 인식시킨다. |
ST | 라벨 | 지정 라벨의 서브루틴을 호출한다. |
SL | 라벨 | 지정 라벨로 이동한다. |
TS | 라벨 | 스택에서 숫자를 꺼내서 0이면 지정된 라벨로 이동한다. |
TT | 라벨 | 스택에서 숫자를 꺼내서 -이면 지정된 라벨로 이동한다. |
TL | - | 서브루틴을 끝내고 호출자에게 컨트롤이 넘어간다. |
LL | - | 프로그램을 종료한다 |
입/출력(IMP: TL)
명령어 | 의미 |
SS | 스택 맨 위의 숫자에 해당하는 ASCII 문자를 출력한다. |
ST | 스택 맨 위의 숫자를 문자열로 출력한다. |
TS | 문자 하나를 입력받고 스택 맨 위에 있던 값 대신 그 위치에 문자의 ASCII값을 저장한다. |
TT | 숫자 하나를 입력받고 스택 맨 위에 있던 값 대신 그 위치에 숫자를 저장한다. |
- 화이트스페이스로 만든 Hello, world!
- 공백,탭
[1]
부동 소수 및 실수는 사용할 수 없다 한다. 문자는 인코딩을 통해 사용 가능.