브레인퍽: 두 판 사이의 차이
LaaknorBot (토론 | 기여) 잔글 r2.7.3rc2) (로봇: da:Brainfuck 추가 |
잔글 Bot: Migrating 31 interwiki links, now provided by Wikidata on d:q244627 (translate me) 태그: 인터위키 제거 |
||
118번째 줄: | 118번째 줄: | ||
[[분류:난해한 프로그래밍 언어]] |
[[분류:난해한 프로그래밍 언어]] |
||
[[ca:Brainfuck]] |
|||
[[cs:Brainfuck]] |
|||
[[da:Brainfuck]] |
|||
[[de:Brainfuck]] |
|||
[[en:Brainfuck]] |
|||
[[eo:Brainfuck (programlingvo)]] |
|||
[[es:Brainfuck]] |
|||
[[et:Brainfuck]] |
|||
[[fi:Brainfuck]] |
|||
[[fr:Brainfuck]] |
|||
[[he:Brainfuck]] |
|||
[[hu:Brainfuck]] |
|||
[[is:Brainfuck]] |
|||
[[it:Brainfuck]] |
|||
[[ja:Brainfuck]] |
|||
[[ms:Brainfuck]] |
|||
[[nl:Brainfuck]] |
|||
[[no:Brainfuck]] |
|||
[[pl:Brainfuck]] |
|||
[[pt:Brainfuck]] |
|||
[[ro:Brainfuck]] |
|||
[[ru:Brainfuck]] |
|||
[[sk:Brainfuck]] |
|||
[[sl:Brainfuck]] |
|||
[[sv:Brainfuck]] |
|||
[[tg:Brainfuck]] |
|||
[[th:ภาษาเบรนฟัก]] |
|||
[[tr:Brainfuck]] |
|||
[[uk:Brainfuck]] |
|||
[[vi:Brainfuck]] |
|||
[[zh:Brainfuck]] |
2013년 3월 8일 (금) 05:38 판
브레인퍽(Brainfuck)은 우어반 뮐러(Urban Müller)가 1993년 경에 만든 최소주의 컴퓨터 프로그래밍 언어이다. 이름에 포함된 fuck이 욕설이기 때문에, 정중한 표현을 위해서 때때로 Brainf*ck, Brainf***, 혹은 단순히 BF라고 부르기도 한다.
언어의 설계
뮐러는 가장 작은 컴파일러로 구현할 수 있는 간단하면서도 튜링 완전한 프로그래밍 언어를 만드는 것이 목적이었다. 이 언어는 여덟 개의 명령어로 구성되어 있다. 아미가 컴퓨터에서 작동하는 원래 컴파일러의 둘째 판은 크기가 240 바이트 밖에 안 된다. 그는 다른 난해한 프로그래밍 언어이자, 컴파일러 크기가 1024바이트인 False의 영향을 받았다.
이름이 말해 주듯이, 브레인퍽 프로그램은 이해하기 어려운 경향이 있다. 하지만 튜링 기계는 컴퓨터가 할 수 있는 모든 작업을 할 수 있고, 브레인퍽이 튜링 완전하기 때문에 브레인퍽 또한 복잡하기는 해도 컴퓨터가 할 수 있는 모든 작업을 할 수 있다.
이 언어는 프로그램 외에, 0으로 초기화된 바이트 단위의 배열과, 처음에 배열의 맨 첫 바이트를 가리키는 포인터, 그리고 입출력 스트림으로 구성된 간단한 기계 모델에 기반을 두고 있다.
명령어들
여덟 개의 명령어들은 각각 한 개의 문자로 구성되어 있으며 다음과 같다:
문자 | 의미 |
---|---|
>
|
포인터를 증가시킨다. |
<
|
포인터를 감소시킨다. |
+
|
포인터가 가리키는 바이트의 값을 증가시킨다. |
-
|
포인터가 가리키는 바이트의 값을 감소시킨다. |
.
|
포인터가 가리키는 바이트의 값을 ASCII 문자로 출력한다. |
,
|
포인터가 가리키는 바이트에 입력받은 문자의 ASCII 값을 넣는다. |
[
|
포인터가 가리키는 바이트의 값이 0이면 짝이 되는 뒷쪽의 ] 로 이동한다.
|
]
|
포인터가 가리키는 바이트의 값이 0이 아니면 짝이 되는 앞쪽의 [ 로 이동한다.
|
위의 정의 대신에, ]
에 ‘짝이 되는 앞쪽의 [
로 이동한다’는 의미를 사용할 수 있다. 이는 간단하지만 대칭적이지 못 하고 효율적이지도 않다. 이 두 정의는 모든 브레인퍽 프로그램에 대해서 동일한 행동을 보인다. 거의 사용되지 않지만 동일한 또 다른 정의로는, [
가 ‘짝이 되는 뒷쪽의 ]
로 이동한다’는 의미를 가지고, ]
가 ‘포인터가 가리키는 바이트의 값이 0이 아니면 짝이 되는 앞쪽의 [
다음 명령어로 이동한다’는 의미를 가지도록 하는 것이 있다.
브레인퍽 프로그램들은 ptr
이 unsigned char*
형이라 가정할 때 다음과 같은 치환을 사용해서 C 언어로 번역할 수 있다:
브레인퍽 | C |
---|---|
>
|
++ptr;
|
<
|
--ptr;
|
+
|
++*ptr;
|
-
|
--*ptr;
|
.
|
putchar(*ptr);
|
,
|
*ptr = getchar();
|
[
|
while (*ptr) {
|
]
|
}
|
해설
참고로 여기서는 배열의 각각의 원소들을 바이트로 서술했기 때문에, - 명령은 필요가 없으며 255개의 + 명령으로 고칠 수 있다. 비슷하게, 만약 배열이 유한하고 환형이면, < 명령은 (배열 크기 - 1)개의 > 명령으로 고칠 수 있다. 하지만 이 언어가 튜링 완전하려면 배열의 크기와 각각의 원소들의 크기가 모두 제한이 없어야 한다. (이는 엄밀히 말할 때 현대의 PC가 튜링 완전하지 않은 이유와 동일하다.)
관련 항목
비슷한 언어들의 목록:
- Doublefuck, 두 개의 배열을 사용하는 브레인퍽의 변형.
- Brainfork
- PATH, 브레인퍽과 비펀지를 결합한 언어.
- SNUSP, 비슷하지만 호출 스택을 가진다.
- l33t
- L00P
- Ook!
- QUOTE
- Aura
- Spoon, 오직 "0"과 "1" 문자로만 이루어진 토큰을 사용함.
- THRAT, 명령 테이블에 있는 Brainfuck 명령들을 접근하기 위해 오직 두 개의 명령만을 사용함.
외부 고리
- Brian Raiter, Muppetlabs. Brainfuck: An Eight-Instruction Turing-Complete Programming Language. 이 사이트에는 브레인퍽 콰인이 함께 들어 있다.
- Panu Kalliokoski. The Brainfuck Archive - 많은 브레인퍽 프로그램, 콰인, 구현들을 제공한다.
- 윈도용 브레인퍽 인터프리터와 통합 개발 환경(IDE)
- Brainfucked - Brainfuck Compiler (Windows/DOS)
- Frans Faase. BF is Turing Complete
- Daniel Cristofani. some Brainfuck fluff.
- Brainfuck.ca GPL로 배포되는 브레인퍽 인터프리터와 소스 변환기들
- 윈도우용 브레인퍽 인터프리터와 컴파일러
- Brainfuck.Net
- Also Written In Brainfuck (awib)는 x86 플랫폼과 리눅스 실행 파일을 생성하며, 브레인퍽으로 만든 브레인퍽 컴파일러이다.
- Robert Östling. Brainfuck computer.
- Clifford Wolf. The Brainf*ck CPU과 다른 브레인퍽에 관련된 프로젝트들
- F*ckF*ck homepage
- A Brainfuck Computer With a Brainfuck CPU
- The download page with Blue Fern, a Brainfuck IDE
- A Brainfuck tutorial in English and French.
- Jeffry Johnston. BF 프로그램들, 기본적인 컴파일러와 어셈블러를 포함함