/kaltsit-language

설명... 네가 알 필요는 없다.

Primary LanguageJavaScriptMIT LicenseMIT

kaltsit-language

Hits



설명... 네가 알 필요는 없다.

비교적 정상적인 설명

모바일 게임 명일방주의 켈시어 밈에 엄랭을 접목해 만든 프로그래밍 언어, 켈시어입니다.
많은 부분을 엄랭에 기반하여 작성하였으나 세부 문법에는 차이가 있습니다.

현재 사용 가능한 구현체는 Node.js이며, 해당 패키지의 CLI 명령어로 출력을 확인할 수 있습니다.
npm 저장소

소스 코드의 확장자는 .kaltsit 이나 지키지 않아도 사용에 문제는 없습니다.

Changelog

날짜 변경사항
2022.06.14 Node.js 구현체 초기 릴리즈 (v1.0.0)
2022.06.15 Node.js 구현체 버그 수정 및 변수 재할당 기능 추가 (v1.0.1)
2022.06.15 Node.js 구현체 버그 수정 (v1.0.2)
2022.06.16 예제 소스 추가 및 README 수정
2022.07.13 TypeScript로 리팩토링 및 버그 수정 (v1.1.2)

사용 가이드 (Node.js)

  1. npm install kaltsit-lang-node 또는 yarn add kaltsit-lang-node 를 입력해 패키지를 받습니다.
  2. kaltsit <filename> 명령으로 소스 코드를 실행합니다.

문법

켈시어는
모르는건가 그렇게 될 수밖에 없는가 그렇군 몰?루는건가 그렇다면 그럴수는 없다 네가 원하는 답은 해 주지 않겠다 그리 쉬운 것도 못 하나? 그것도 못 하나? 많은 일이 있었지 다음에 알려주겠다 지금은 때가 아니다
. , ! 으로 구성되는 한국어 기반 프로그래밍 언어입니다.

시작과 끝

모든 프로그램은 그런건가... 로 시작하여 이 이야기는 그만하도록 하지. 로 끝나야 합니다.

그런건가...
몰?루는건가...
이 이야기는 그만하도록 하지.

숫자의 표기

마침표과 쉼표를 이어 붙여서 표기합니다.
마침표는 1, 쉼표는 -1에 각각 대응하며, 이어 붙어져 있을 경우 개수만큼 더하고 빼어 값을 냅니다.

... -> 3
,,,,, -> -5
.,.,. -> 1

변수의 할당과 출력

변수는 인덱스를 통해 접근할 수 있습니다. 인덱스는 정수입니다.
....모르는건가.. 와 같이 작성하며, 왼쪽 점의 개수는 값(정수) 오른쪽 점의 개수는 변수가 저장될 인덱스입니다.

그렇군을 사용하여 변수를 출력할 수 있습니다.
그렇군앞의 점 개수를 인덱스로 하는 변수의 값을 출력합니다.
뒤에는 어떤 문자열이 붙어도 처리에 변화가 없으나 !가 붙을 경우 해당 코드에 대응되는 유니코드 문자를 출력합니다.

..모르는건가.
.그렇군... -> 2

연산

각각 정해진 문자열 앞의 스페이스로 구분된 점의 개수를 읽어, 해당 점의 개수를 인덱스로 하는 두 개의 값에 대해 연산을 수행합니다.

... ....그리 쉬운 것도 못 하나? -> 3, 4번째 변수의 합 출력
... ....그것도 못 하나? -> 3, 4번째 변수의 차 출력
... ....많은 일이 있었지 -> 3, 4번째 변수의 곱셈 결과 출력
... ....다음에 알려주겠다 -> 3, 4번째 변수의 나눗셈 결과 출력
... ....지금은 때가 아니다 -> 3번째 변수를 4번째 변수로 나눈 나머지 출력

구문 뒤에 . 또는 , 가 붙으면 마침표의 개수만큼 +1, 쉼표의 개수만큼 -1을 하여 나온 값을 인덱스로 하는 변수에 대입합니다.

... ....지금은 때가 아니다.....,,..

가령 위와 같이 입력하면 3번째 변수를 4번째 변수로 나눈 나머지를 5번째 변수에 대입하게 됩니다.

제어문

그렇다면 을 입력하면 조건문이 됩니다.
그렇다면 앞에 붙은 점의 개수를 인덱스로 하는 변수의 값이 0이면 그 뒤의 구문을 수행합니다.

그럴수는 없다 는 흐름 변경 명령으로, goto와 용법이 같습니다.
그럴수는 없다 뒤에 붙은 점의 개수에 해당하는 소스 코드의 라인으로 이동합니다.

...그렇다면... (구문) -> 3번째 변수가 0이면 구문 실행
그럴수는 없다... -> 3번째 줄로 이동

기타

몰?루는건가 를 입력하여 강제 줄바꿈을 할 수 있습니다. 몰?루는건가 뒤의 모든 문자열은 무시됩니다.

오류 처리

인터프리터가 발생시키는 오류는 아래와 같습니다.

오류 코드 내용
UNKNOWN_ERROR 알 수 없는 오류입니다.
ENTRY_INVALID 소스 코드의 시작점을 정의할 수 없습니다.
EOF_INVALID 소스 코드의 끝이 올바르지 않습니다.
SYNTAX_ERROR_ARITHMETIC 연산 구문 오류입니다.
SYNTAX_ERROR_GOTO 분기 이동 구문 오류입니다.
SYNTAX_ERROR_IF 조건문 구문 오류입니다.
SYNTAX_ERROR_RETURN 반환 구문 오류입니다.
SYNTAX_ERROR_VARIABLE 변수 구문 오류입니다.
VARIABLE_NOT_NATURAL_INDEX 변수의 인덱스는 자연수만 허용됩니다.
ARITHMETIC_NAN 연산 결과가 숫자가 아닙니다.

예제

  • Hello world!
그런건가...

................................모르는건가.
........................................................................모르는건가..
.....................................................................................................모르는건가...
............................................................................................................모르는건가....
...............................................................................................................모르는건가.....
.......................................................................................................................모르는건가......
..................................................................................................................모르는건가.......
....................................................................................................모르는건가........
.................................모르는건가.........

..그렇군...!
...그렇군...!
....그렇군...!
....그렇군...!
.....그렇군...!
.그렇군!
......그렇군!
.....그렇군...!
.......그렇군!
....그렇군...!
........그렇군!
.........그렇군!

이 이야기는 그만하도록 하지.

Hello world!를 출력하는 예제 켈시어 코드입니다. 변수 재할당이 적용되기 전의 코드이므로 현재는 다르게 쓰거나 단축될 수 있습니다.

  • 덧셈
그런건가...

..모르는건가.
...모르는건가..

. ..그리 쉬운 것도 못 하나?

이 이야기는 그만하도록 하지.

첫 번째 변수에 2, 두 번째 변수에 3을 할당 후 둘을 더한 값을 출력하는 예제 켈시어 코드입니다.

  • 구구단
그런건가...

..........................................모르는건가.
.............................................................모르는건가..

..........모르는건가...
.모르는건가....
모르는건가.....

..모르는건가......
.모르는건가.......
모르는건가........
모르는건가.........
그럴수는 없다....................

.모르는건가.......
...... ....그리 쉬운 것도 못 하나?......
...... ...지금은 때가 아니다........
........그렇다면 그럴수는 없다................................

......그렇군
.그렇군!
.......그렇군
..그렇군!
...... .......많은 일이 있었지
몰?루는건가...
....... ....그리 쉬운 것도 못 하나?.......
....... ...다음에 알려주겠다........
....... ...지금은 때가 아니다.........
.........그렇다면 그럴수는 없다...............
........그렇다면 그럴수는 없다.................

이 이야기는 그만하도록 하지.

구구단을 출력하는 예제 켈시어 코드입니다.

Q&A

  • 이 언어는 튜링 완전한가요?
    확실하게 알 수 없습니다. 확인이 필요합니다.

TODO

  • 앞으로 나올 수 있는 벌레 잡기