[[분류:난해한 프로그래밍 언어]] [목차] == 개요 == {{{+1 Befunge}}} 스택 기반의 [[난해한 프로그래밍 언어]]. 1993년 크리스 프레시가 개발한 난해한 프로그래밍 언어. 이쪽 계열 가운데에서 인지도로는 동년배인 [[브레인퍽]]과 함께 손꼽히는 언어이다.[* 아예 이 둘을 합친 [[https://esolangs.org/wiki/PATH|PATH]]라는 esolang도 있다.] 제작자가 할 수 있는 한 [[컴파일]]이 어려운 프로그래밍 언어를 고안하려는 시도로 만든 '''본격 사용자 엿먹이는 언어'''. == 특징 == 프로그램이 2차원 공간 상에 배열되어 있는 것이 특징으로, {{{vv < < 2 ^ v< v13v4 ^ ^ > >?> ?>5^ v v v97v6 v v< 8 . > > ^ ^< }}} 대략 ~~이따위~~이런 식으로 코딩한다(...). 기본적으로 "화살표" 명령을 사용해서 명령의 흐름을 이리저리 조종하는데, 이에 따라 명령 포인터가 이리갔다 저리갔다 함으로써 프로그램이 동작하게 된다. 자기 수정 프로그램을 만들 수 있도록 설계되고 g와 p 명령을 제공하였다. 그랬음에도 몇몇 능력자들은 결국 컴파일러를 만들기에 성공하는 쾌거(?)를 이룩해냈다. 구현체 가운데 하나로 [[http://catseye.tc/node/Befunge-93.html|Befunge-93]]가 있다. == 문법 == [[https://ko.wikipedia.org/wiki/%EB%B9%84%ED%8E%80%EC%A7%80|출처]] || 문법 || 설명 || || 0 ~ 9 || 해당 수를 넣는다. || || + || a, b를 꺼내 a + b의 값을 넣는다. || || - || a, b를 꺼내 b - a의 값을 넣는다. || || * || a, b를 꺼내 a * b의 값을 넣는다. || || / || a, b를 꺼내 b ÷ a의 몫을 넣는다. [br] 만약 먼저 나온 수가 0이면 연산 결과를 사용자가 직접 입력하여 넣는다. || || % || a, b를 꺼내 뒤에 b ÷ a 의 나머지를 넣는다. [br] 만약 먼저 나온 수가 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 문자로 바꾼다. || || & || 숫자를 입력받아 넣는다. || || ~ || 문자를 입력받아 넣는다. || || @ || 프로그램을 종료한다. ||