프로그래밍 언어/취업 필수 언어

[프로그래밍 언어] brainfuck

riroan 2022. 4. 20. 01:52

brainfuck(brainf**k, 브레인퍽)

브레인퍽 사용법

https://ko.wikipedia.org/wiki/%EB%B8%8C%EB%A0%88%EC%9D%B8%ED%8D%BD

 

브레인퍽 - 위키백과, 우리 모두의 백과사전

브레인퍽(Brainfuck)은 우어반 뮐러(Urban Müller)가 1993년 경에 만든 최소주의 컴퓨터 프로그래밍 언어이다. 이름에 포함된 fuck이 욕설이기 때문에, 정중한 표현을 위해서 때때로 Brainf*ck, Brainf***, 혹

ko.wikipedia.org

 

브레인퍽 온라인 컴파일러

https://www.ryugod.com/pages/ide/bf

 

RyuGod

 

www.ryugod.com

 

자체 개발 브레인퍽 컴파일러

https://github.com/riroan/brainfuck-python

 

GitHub - riroan/brainfuck-python

Contribute to riroan/brainfuck-python development by creating an account on GitHub.

github.com

 

브레인퍽을 깨달아버려서 글로 남기고자 한다.

브레인퍽은 ><+-.,[] 이 8개의 문자로 프로그래밍 할 수 있는 언어이다.

상당히 심플하고 처음에는 이해가 좀 힘들었지만 한번 이해하고 나면 사용하기 쉽다.

 

각 문자가 나타내는 내용은 다음과 같다.

문자 역할 C문법
> 포인터를 1 증가시킨다. ++ptr;
< 포인터를 1 감소시킨다. --ptr;
+ 포인터의 값을 1 증가시킨다. ++*ptr;
- 포인터의 값을 1 감소시킨다. --*ptr;
. 현재 포인터의 ASCII값을 출력한다. putchar(*ptr);
, 현재 포인터에 ASCII값을 입력받는다. *ptr=getchar();
[ 현재 포인터 값이 0이라면 대응되는 ]로 이동한다. while(*ptr){
] 현재 포인터 값이 0이 아니라면 대응되는 [로 이동한다. }

C언어에서 포인터를 자주 사용해봤다면 익숙할것이다.

hello world

Hello world코드를 분석해보자.

Hello world의 아스키값은 [72, 101, 108, 108, 111, 32, 119, 111, 114, 108, 100, 10]이다.(마지막 개행 포함)

앞으로 편의상 현재 위치한 포인터를 $p_n$이라고 할 것이다. (시작은 0)

 

1번줄

우선 $p_0$을 반복변수로 정의한다.

$p_1$을 H로 만들고 싶은데 그러기 위해서는 +를 72번 타이핑해야하므로 불편하다.

1번줄이 반복문을 사용해서 8*9로 만드는 코드이다.

$*p_0 = -8$이고 반복문마다 $++*p_0;*p_1+=9;$가 수행된다.

마지막에 .으로 H로 출력한다.

 

2번줄

$*p_1 = 72$에서 $*p_1 = 101$로 만들기 위해 30을 더하고 1을 뺀 후 출력한다.

 

3~4번줄

각각 $*p_1$에 7, 3을 더하고 출력한다.

 

5번줄

$*p_2 = 32$(4*8)로 만들어서 공백을 출력한다.

 

6~10번줄

$*p_1$에 각각 해당하는 수를 더하고 빼서 world를 출력한다.

 

11번줄

마지막은 0인 반복변수 $*p_0$을 10으로 만들어 출력한다.

 

brainfuck은 튜링 완전 언어이므로 대응되는 아스키값을 알고 있다면 다른 언어로 만들 수 있는 프로그램을 만들 수 있을 것이다.

백준에서 brainfuck으로 채점이 가능하고 vscode에 syntax highlighter를 제공하는 갓언어이다.

생각보다 어렵지 않으니 관심이 있다면 도전해보자!

 

'프로그래밍 언어 > 취업 필수 언어' 카테고리의 다른 글

[프로그래밍 언어] 롤랭  (1) 2022.12.13
[프로그래밍 언어] 엄랭  (0) 2022.04.17