1. 개요
Befunge스택 기반의 난해한 프로그래밍 언어.
1993년 크리스 프레시가 개발한 난해한 프로그래밍 언어. 이쪽 계열 가운데에서 인지도로는 동년배인 브레인퍽과 함께 손꼽히는 언어이다.[1] 제작자가 할 수 있는 한 컴파일이 어려운 프로그래밍 언어를 고안하려는 시도로 만든 본격 사용자 엿먹이는 언어.
2. 특징
프로그램이 2차원 공간 상에 배열되어 있는 것이 특징으로,vv < <
2
^ v<
v1<?>3v4
^ ^
> >?> ?>5^
v v
v9<?>7v6
v v<
8
. > > ^
^<
대략
기본적으로 "화살표" 명령을 사용해서 명령의 흐름을 이리저리 조종하는데, 이에 따라 명령 포인터가 이리갔다 저리갔다 함으로써 프로그램이 동작하게 된다. 자기 수정 프로그램을 만들 수 있도록 설계되고 g와 p 명령을 제공하였다. 그랬음에도 몇몇 능력자들은 결국 컴파일러를 만들기에 성공하는 쾌거(?)를 이룩해냈다. 구현체 가운데 하나로 Befunge-93가 있다.
3. 문법
출처문법 | 설명 |
0 ~ 9 | 해당 수를 넣는다. |
+ | a, b를 꺼내 a + b의 값을 넣는다. |
- | a, b를 꺼내 b - a의 값을 넣는다. |
* | a, b를 꺼내 a * b의 값을 넣는다. |
/ | a, b를 꺼내 b ÷ a의 몫을 넣는다. 만약 먼저 나온 수가 0이면 연산 결과를 사용자가 직접 입력하여 넣는다. |
% | a, b를 꺼내 뒤에 b ÷ a 의 나머지를 넣는다. 만약 먼저 나온 수가 0이면 연산 결과를 사용자가 직접 입력하여 넣는다. |
! | 꺼낸 수가 0이면 1, 아니면 0을 넣는다. |
` | a, b를 꺼내 b > a면 1, 아니면 0을 넣는다. |
> | 명령 포인터를 오른쪽으로 이동하게 한다. |
< | 명령 포인터를 왼쪽으로 이동하게 한다. |
^ | 명령 포인터를 위로 이동하게 한다. |
v | 명령 포인터를 아래로 이동하게 한다. |
? | 명령 포인터를 랜덤한 방향으로 이동하게 한다. |
_ | 꺼낸 숫자가 0이면 명령 포인터를 오른쪽, 아니면 왼쪽으로 이동하게 한다. |
| | 꺼낸 숫자가 0이면 명령 포인터를 아래, 아니면 위로 이동하게 한다. |
" | 다음 ' " '가 등장할 때까지 문자를 넣는다. |
: | 스택의 가장 위의 값을 복사해 넣는다. |
\ | 스택의 가장 위의 두 값의 위치를 서로 바꾼다. |
$ | 스택에서 숫자를 꺼낸다. |
. | 숫자를 꺼내 출력한다. |
, | 숫자를 꺼내 ASCII 문자를 출력한다. |
# | 다음 명령을 건너 뛴다. |
g | y, x를 꺼내 명령의 (x, y)위치에 있는 문자의 ASCII값을 넣는다. |
p | y, x, v를 꺼내 명령의 (x, y)위치에 있는 문자를 v에 해당하는 ASCII 문자로 바꾼다. |
& | 숫자를 입력받아 넣는다. |
~ | 문자를 입력받아 넣는다. |
@ | 프로그램을 종료한다. |