728x90
728x90

난해한 프로그래밍 언어란

일부러 다른 프로그래밍 언어에 비해 사용하기 어렵게 만든 언어

 

제작 목적은 프로그래밍 언어의 한계 측정, 어떤 개념의 증명을 위해
혹은 단순한 장난으로 제작

 

그 중 아희라는 언어를 배워보자

 

아희로 코딩한 "Hello, world!"

밤밣따빠밣밟따뿌
빠맣파빨받밤뚜뭏
돋밬탕빠맣붏두붇
볻뫃박발뚷투뭏붖
뫃도뫃희멓뭏뭏붘
뫃봌토범더벌뿌뚜
뽑뽀멓멓더벓뻐뚠
뽀덩벐멓뻐덕더벅


아희

1. 자음

ㅇ, ㄱ, ㅋ: 아무 일도 하지 않는다.
ㅎ: 프로그램을 종료한다.
ㄷ, ㄸ, ㅌ, ㄴ, ㄹ: 각각 덧셈, 곱셈, 뺄셈, 나눗셈, 나머지 연산.
모두 공통적으로 저장공간에서 두 값을 뽑아낸 다음 둘을 연산한 값을 저장공간에 저장한다. 순서가 있는 연산자의 경우 나중에 꺼낸 값이 연산자의 왼쪽에 온다.
ㅁ: 출력. 받침이 ㅇ이면 숫자, ㅎ이면 문자 출력. 나머지 종성이면 출력값 없음
ㅂ: 입력. 받침이 ㅇ이면 숫자, ㅎ이면 문자 입력. 나머지 종성은 획수를 따짐
ㅃ: 중복. 스택이라면 맨 위의 값을 그 값 위에 하나 더 집어넣고

            큐라면 맨 앞의 값을 앞에 하나 더 덧붙인다.

            통로라면 아까 보낸 값을 한 번 더 보낸다.
ㅍ: 바꿔치기. 스택이라면 맨 위 값과 그 바로 아래 값을

                 큐라면 맨 앞의 값과 그 바로 뒤 값을 바꾼다.

                 통로일 때의 동작은 미정.
ㅅ: 선택. 종성을 통해 자료구조에서 선택 가능.
ㅆ: 이동. 지금 저장공간에서 값 하나를 뽑아내서 받침이 나타내는 저장공간에 그 값을 집어넣는다.
ㅈ: 비교. 저장공간에서 값 두 개를 뽑아 내서 비교한다.

            나중에 뽑아낸 값이 더 크거나 같으면 1을, 아니면 0을 지금 저장공간에 집어넣는다.
ㅊ: 조건. 저장공간에서 값 하나를 뽑아내서 그 값이 0이 아니면 진행해야 할 방향대로, 0이면 그 반대 방향대로 간다.

 

2. 모음

모음의 방향이 커서의 방향이 된다
ㅏ: 오른쪽으로
ㅓ: 왼쪽으로
ㅜ : 아래로
ㅗ : 위로
ㅑ, ㅕ, ㅛ, ㅠ : 위와 같지만 2칸씩 이동
ㅣ: 커서가 세로로 들어오면 통과시키고, 가로로 들어오면 커서방향 반대로 뒤집는다.
ㅡ : 커서가 가로로 들어오면 통과시키고, 세로로 들어오면 커서방향 반대로 뒤집는다.
ㅢ : 어느방향으로 오던지 방향을 바꾼다.
이외의 모음은 아무런 기능을 하지 않습니다.

 

 

"Hello, world!"의 H 출력

밣밟따맣허

밣 : ㅀ의 획수 8을 입력

밟 : ㄼ의 획수 9을 입력

따 : 8과 9을 곱함 72

맣 : ㅁ은 출력 / 종성이 ㅎ이므로 아스키코드 72에 해당하는 H 출력

자바스크립트로 된 아희 실행기에서 한 단계씩 디버그(?) 가능

 

 

아희로 "Melon" 출력

밞북밙뚜맣뭏
붉더봀북토뭏
따빠뫃투볽뭏
북벋뻐더뽀후
타다빠밬토허


참고문헌

bloter - 들어보셨나요? 한글 프로그래밍 언어 3종

나무위키 - 난해한 프로그래밍 언어

아희 온라인 개발환경

나무위키 - 아희

728x90
728x90