최근 수정 시각 : 2023-06-07 13:28:14

비펀지


1. 개요2. 특징3. 문법

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 문자로 바꾼다.
& 숫자를 입력받아 넣는다.
~ 문자를 입력받아 넣는다.
@ 프로그램을 종료한다.

[1] 아예 이 둘을 합친 PATH라는 esolang도 있다.