Skip to content

nuke1115/BASCIICode

Repository files navigation

BASCIICode

  1. BASCIICode 란?
  2. 왜 만들었나?
  3. 구조 및 작동방식
  4. 사용법
  5. 문법
  6. 링크들

1. BASCIICode란?

BASCIICode는 기존의 있던 난해한 프로그래밍 언어인 Brainfuck이라는 언어의 작성방법을 비틀어서 "아스키코드값으로 작성할 수 있게 하면 어떻게 될까?" 라는 호기심에서 출발한 난해한 프로그래밍 언어입니다.

구상은 시험기간에 했으나, 시험기간이라 제작에 힘을 쏟기 어려웠기에, 시험이 끝나고 방학하기 전까지의 기간 동안 만들어보기로 해서 만들어진 언어입니다.

2. 왜 만들었나?

이유는 여러 가지가 있지만, 가장 큰 이유는 크게 3가지를 들 수 있을 것 같습니다.

  1. 재미있을 거 같아서
  2. 안 그래도 난해한 Brainfuck을 겉보기에는 알기 어려운 아스키코드의 값으로 짜게 하면, 얼마나 괴상한 결과물이 나올까 궁금해서
  3. 언어들을 익히기 위해서

3. 구조 및 작동방식

BASCIICode는 코드 파일을 읽고, 코드에 있던 문자의 아스키코드 값을 10으로 나눈 나머지의 결과에 따라 함수를 호출하는 방식으로 작동됩니다.

BASCIICode의 구조는 다음과 같습니다.

  1. 명령어 배열
  2. 명령어 포인터
  3. 값 배열
  4. 값 포인터
  5. 루프맵

BASCIICode의 작동방식은 다음과 같습니다.

  1. 코드가 있는 주소를 입력하면, 해당 주소에 코드가 있다면 코드를 읽어옵니다.

  2. 읽어온 코드를 구문 분석(Parsing) 과정을 거쳐서 코드를 실행하기 편한 형태로 변환해줍니다.

    (이 과정에서 값 포인터가 얼마나 움직이는지에 따라 움직이는 범위에 맞게 값 배열을 할당해주고, 루프문이 괄호가 완성되도록(괄호의 짝이 맞도록) 작성되었는지 검사합니다.)

  3. 2의 과정을 거친 코드를 명령어 포인터를 1씩 증가시키며, 명령어 포인터가 가리키고 있는 셀의 명령어를 가져와 함수를 호출합니다.

4. 사용법

  1. 인터프리터 사용법:
1. ExecutableApplications 폴더로 들어간다

2. 원하는 버전의 인터프리터를 실행한다

(인터프리터만 따로 꺼내서 다른 폴더에 옮겨둬도 상관없습니다.)

3. 코드파일의 주소를 입력하라는 메시지가 나오면, 실행하고 싶은 코드파일의 주소를 입력합니다.
  1. 코드파일 작성법
1. .BFAC 확장자의 파일을 만든다.

2. 코드를 작성한다

(문법은 5. 문법 문단 참고.)

※ .txt 파일 형태로 작성하고 실행 전에 .BFAC 로 바꿔도 상관없습니다.

5. 문법

명령어들은 Brainfuck의 명령어와 아스키코드값으로. (새로 추가한 명령어 한 개 제외)

엔터키를 제외한 키보드로 입력 가능한 아스키코드 테이블에 있는 문자는 사용 가능합니다

입/출력은 ASCIITABLE 기준 126번까지 지원됩니다. (사실상 32 ~ 126번까지입니다.)

명령어들은 다음과 같습니다

10으로 나눈 나머지가 0일때 : 프로그램 종료.
10으로 나눈 나머지가 1일때 : 값 포인터를 왼쪽으로 1 옮긴다.
10으로 나눈 나머지가 2일때 : 값 포인터를 오른쪽으로 1 옮긴다.
10으로 나눈 나머지가 3일때 : 값 포인터가 가리키고 있는 셀의 값을 1 증가시킨다.
10으로 나눈 나머지가 4일때 : 값 포인터가 가리키고 있는 셀의 값을 1 감소시킨다.
10으로 나눈 나머지가 5일때 : 값 포인터가 가리키고 있는 셀의 값을 아스키코드의 형태로 출력한다.
10으로 나눈 나머지가 6일때 : 값 포인터가 가리키고 있는 셀의 값에 아스키코드의 값을 저장한다.

10으로 나눈 나머지가 7일 때와 8일 때는 루프 문 관련 명령어입니다.
10으로 나눈 나머지가 7일때 : 만약 값 포인터가 가리키고 있는 셀의 값이 0이라면, 루프맵에서 현재 루프문의 끝에 해당하는 지점의 위치값을 가져오고, 명령어 포인터를 해당 위치로 이동시킨다. 아니라면 그냥 지나간다.
10으로 나눈 나머지가 8일때 : 만약 값 포인터가 가리키고 있는 셀의 값이 0이 아니라면, 루프맵에서 현재 루프문의 시작에 해당하는 지점의 위치값을 가져오고, 명령어 포인터를 해당 위치로 이동시킨다. 아니라면 그냥 지나간다.

10으로 나눈 나머지가 9일때 : 값 포인터가 가리키고 있는 셀의 값을 정수의 형태로 출력한다.

6. 링크들

https://esolangs.org/wiki/Brainfuck

https://www.ascii-code.com/

About

esolang

Resources

License

Stars

Watchers

Forks

Packages

No packages published