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

비펀지

befunge에서 넘어옴

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도 있다.