Skip to content

와캬퍄헉농쭉빵뿅ㅋㅋ을 사용한 쭉농증 언어

License

Notifications You must be signed in to change notification settings

Changesong/nonglang

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

4 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

쭉농증 언어

쭉농증 언어(=nonglang)은 와캬퍄헉농쭉빵뿅ㅋ 만을 사용하는 난해한 프로그래밍 언어입니다.

설명

쭉농증 언어는 와캬퍄헉농쭉빵뿅ㅋ과 공백, 줄바꿈으로만 구성된 언어로, 다른 글자들은 허용되지 않습니다.

구조 설명

쭉농증 언어로 작성한 프로그램은 한 개 이상의 줄로 구성되어 있습니다. 한 줄은 하나의 변수와 하나 이상의 명령들로 구성됩니다. 빈 줄은 허용되지 않습니다.

변수와캬퍄헉농쭉빵뿅 중에서 어떤 글자든 원하는 만큼 이어붙여 표현됩니다. 아무 글자도 없는 빈 문자열도 변수 이름으로 성립합니다.(해당 변수는 특별한 역할이 있습니다.) 아래는 변수의 예시입니다. 자세한 사항은 아래 변수 부분을 확인하세요.

명령은 명령어와 인수로 구성됩니다.

명령어와캬퍄헉농쭉빵뿅 중 한 글자로 표현됩니다. 글자별로 각기 다른 연산이 할당되어 있습니다. 자세한 사항은 아래 명령 부분을 확인하세요.

인수을 원하는 만큼 이어붙이는 것으로 표현되며, ㅋ의 개수가 명령 인수로서 전달됩니다. ㅋ을 적지 않는 것도 허용되며, 이 경우 특수 변수의 값이 인수로서 전달됩니다. 자세한 사항은 아래 명령 부분을 확인하세요.

한 줄의 시작에는 이번 줄에서 다룰 변수를 설정합니다. 첫 번째 명령은 변수와 붙여서 적습니다. 두 번째 명령부터는 이전 명령의 종료점에서 한 칸을 띄고 명령을 적어야 합니다. 원하는 만큼 명령을 추가할 수 있습니다.

위 내용을 EBNF로 나타내면 아래와 같습니다.

<letter> ::= "" | "" | "" | "" | "" | "" | "" | "" 
<space> ::= " "
<k> ::= ""

<variable-name> ::= { <letter> }
<ks> ::= { <k> }
<command> ::= <letter>
<line> ::= <variable-name> <command> <ks> { <space> <command> <ks> }

예시

올바른 줄들의 예시입니다.

  • 와캬퍄헉농쭉ㅋㅋㅋ: 올바른 줄입니다. '와캬퍄헉농' 변수에 '쭉ㅋㅋㅋ' 명령을 적용합니다.
  • 퍄ㅋㅋㅋㅋㅋ: 올바른 줄입니다. '' 변수에 '퍄ㅋㅋㅋㅋㅋ' 명령을 적용합니다.
  • 빵빵뿅뿅ㅋㅋㅋㅋㅋ 퍄 빵ㅋㅋㅋ 퍄ㅋㅋㅋㅋ: 올바른 줄입니다. '빵빵뿅' 변수에 '뿅ㅋㅋㅋㅋㅋ', '퍄', '빵ㅋㅋㅋ', '퍄ㅋㅋㅋㅋ' 명령을 순서대로 적용합니다.

아래는 올바르지 못한 줄들의 예시입니다.

  • 누오옹ㅋㅋㅋㅋ: 올바르지 못한 줄입니다. 변수는 와캬퍄헉농쭉빵뿅 으로만 이루어져 있어야 합니다.
  • ㅋㅋㅋㅋㅋ 쭉ㅋㅋㅋ 쭉ㅋㅋㅋ: 올바르지 못한 줄입니다. ㅋ 앞에는 반드시 명령어가 있어야 합니다.
  • 와캬퍄ㅋㅋㅋ 농농ㅋㅋㅋ: 올바르지 못한 줄입니다. 두 번째 명령부터는 명령어 한 글자와 임의 개수의 ㅋ으로만 구성되어야 합니다.
  • 와캬퍄ㅋㅋㅋ농ㅋㅋㅋㅋ쭉ㅋㅋㅋ: 올바르지 못한 줄입니다. 명령과 명령 사이는 반드시 띄어 써야 합니다.

변수

변수에는 정수만 저장할 수 있습니다. 모든 변수는 0을 초기값으로 가집니다. 각 줄에는 변수가 하나만 존재할 수 있습니다. 그 줄의 모든 연산에서 변수라 함은 줄 맨 앞에 표현된 그 변수를 의미합니다.

특수 변수

빈 문자열 ''로 표현되는 변수는 특수한 변수로, 특수 변수라고 합니다. 가능한 값이나 수행 가능한 연산은 일반 변수와 동일합니다.

특수 변수는 다음과 같은 특성을 가집니다.

  • 명령에서 인수를 표현하는 ㅋ을 하나도 적지 않았을때, 인수로 특수 변수의 값이 전달됩니다.
  • 헉 명령어로 특수 변수에 다른 변수의 값을 복사할 수 있습니다.

명령

에서 설명했다시피, 명령은 명령어와 인수로 구성됩니다. 명령어는 와, 캬, 퍄, 헉, 농, 쭉, 빵, 뿅 총 8종류 존재합니다.

  • , , 은 변수 증감 관련 명령어입니다.
  • , 는 입출력 관련 명령어입니다.
  • , 은 대입과 복사 관련 명령어입니다.
  • 은 제어 관련 명령어입니다.

명령어 뒤에 ㅋ이 있을 경우, ㅋ의 개수가 인수로서 명령어에 전달됩니다. 명령어 뒤에 ㅋ이 없을 경우, 특수 변수가 인수로서 명령어에 전달됩니다.

명령어 종류
  • 쭉: 인수만큼 변수를 증가시킵니다. 쭉ㅋㅋㅋㅋ
  • 농: 인수만큼 변수를 감소시킵니다. 농ㅋㅋㅋㅋ
  • 빵: 변수를 인수만큼 왼쪽으로 shift 합니다. 인수가 음수라면 오른쪽으로 shift 합니다. 빵ㅋㅋㅋㅋ
  • 뿅: 변수가 0이라면 아무 일도 하지 않습니다. 0이 아니라면 해당 줄 실행 후 이동하는 줄을 그 다음 줄이 아니라 인수에 해당하는 줄로 설정합니다. 0 이하의 값이 전달되면 에러가 발생합니다.
  • 와: 변수에 인수를 저장합니다.
  • 헉: 특수 변수에 현재 변수의 값을 저장합니다. 이 명령어에서 인수는 의미가 없습니다.
  • 캬: 외부 입력을 받아 변수에 저장합니다. 인수가 짝수면 정수를 입력받아 저장하고, 홀수면 문자를 입력받아 유니코드 포인트를 저장합니다. (아스키 호환됩니다.)
  • 퍄: 변수를 출력합니다. 인수가 짝수면 숫자로 출력하며, 홀수면 변수 유니코드 포인트에 해당하는 유니코드 문자를 출력합니다. (아스키 호환됩니다.)

프로그램 예시

Hello, World!

와캬퍄쭉ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ
쭉ㅋㅋㅋ 빵ㅋㅋ 농ㅋㅋ
와캬퍄농ㅋ
와캬퍄헉쭉ㅋㅋㅋㅋㅋㅋㅋ
와캬퍄헉뿅쭉ㅋㅋㅋ
와캬퍄헉농쭉ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ
와캬퍄뿅ㅋㅋㅋ
와캬퍄헉쭉ㅋㅋ 퍄ㅋㅋㅋ
와캬퍄헉농쭉ㅋ 퍄ㅋ 쭉ㅋㅋㅋㅋㅋㅋㅋ 퍄ㅋㅋㅋ 퍄ㅋㅋㅋㅋㅋ 쭉ㅋㅋㅋ 퍄ㅋ
와캬퍄헉뿅쭉 쭉ㅋㅋㅋㅋ 퍄ㅋ 농 농ㅋㅋ 퍄ㅋㅋㅋ
와캬퍄헉쭉 쭉ㅋㅋㅋㅋㅋ 퍄ㅋ
와캬퍄헉농퍄ㅋ 쭉ㅋㅋㅋ 퍄ㅋㅋㅋ 농 쭉ㅋㅋㅋㅋ 퍄ㅋ 농 쭉ㅋㅋ 퍄ㅋㅋㅋㅋㅋ
와캬퍄헉뿅쭉ㅋ 퍄ㅋㅋㅋ

의도적으로 다양한 명령을 사용하였으며, 최적의 구현은 아닙니다.

프로그램 실행 방법

python main.py 를 실행하면 위의 Hello, World 예시가 실행됩니다.

python -f <프로그램_경로> main.py로 원하는 프로그램을 실행 할 수 있습니다.

프로그램 실행 코드 구현은 python 3.10에서 진행하였습니다. 더 자세한 사항은 코드를 참고하세요.

기타

이 프로젝트는 MIT 라이선스를 따릅니다. 이유는 MIT에 와캬퍄헉농쭉빵뿅ㅋㅋ을 묻히고 싶었기 때문입니다.

구현 수준이 그리 높지 않습니다. 추가 구현 PR이나 이슈에 아이디어를 제공해 주신다면 감사히 받겠습니다. 아래는 제가 추가 구현하고 싶은 것들입니다.

  • 코드에 빈 줄 허용하기
  • repr 모드
  • 주석 기능 (한 줄에서 와캬퍄헉농쭉빵뿅ㅋ 이외의 다른 글자가 등장하면 해당 글자부터 뒤는 주석으로 처리)

About

와캬퍄헉농쭉빵뿅ㅋㅋ을 사용한 쭉농증 언어

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages