https://github.com/nabibear33/Lang-shung-jwak?tab=readme-ov-file
GitHub - nabibear33/Lang-shung-jwak
Contribute to nabibear33/Lang-shung-jwak development by creating an account on GitHub.
github.com
유튜브에서 우연히 본 리슝좍 언어의 리드미다.. 웹 인터프리터도 있다
https://nabibear33.github.io/jwak/
Shung-jwak Interpreter
nabibear33.github.io
근데 코드 예시가 좀 부족해서 인터프리터에서 제공하는 예시를 보면서 공부를 해야 사용이 가능한 것 같다.
일단 헬로우 월드를 출력하는 예제 코드는 이렇다
교주님
슝좍?, 좌아아아아아아아악,... 좌아아아아아아악!!!!!
슈웅... 좌아아아아아아아아악!!
슈우웅좍???, 좌아아악,....!! 슈웅~ 좌아아악!
슈우우웅!! 슈웅, 슈웅?!~ 좌아아아아아아악????!!!
슈우우우웅.. 좍~좍~! 슈웅, 슈웅;;; 좍??
슈우우우우웅좍~... 슈웅!!, 슈웅~~~ 좍?!
슈우우우우우웅...좌아아아아악!!!, 좌아아아아악;;;?!! 좌아아악!!
슈우우우우우우웅좍~!! 슈웅, 슈웅~~ 슈웅;;;?? 좌아아아아악!
슈우우우우우우우웅! 슈웅, 슈웅~ 좍!
슈우우우우우우우우웅... 슈웅, 슈웅!
슈우우우우우우우우우웅... 슈웅~ 좍!, 좌아악!
비비 따잇!?ㅋ
비비 따잇ㅋㅋㅋㅋㅋㅋㅋㅋㅋ
비비....ㅋㅋㅋ 따잇!!ㅋ
비비 따잇ㅋㅋㅋㅋ!!
비비ㅋㅋㅋㅋㅋㅋ 따잇!!
비비ㅋㅋㅋ 따잇?
비비ㅋㅋ 따잇ㅋㅋㅋㅋㅋ
비비ㅋㅋㅋㅋㅋ 따잇
비비?? 따잇ㅋㅋㅋㅋㅋㅋ!!
비비ㅋㅋㅋ 따잇ㅋㅋㅋㅋㅋ
비비 따잇ㅋㅋㅋㅋ
비비 따잇ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ
비비ㅋㅋㅋㅋㅋㅋㅋㅋ 따잇ㅋㅋㅋ!!!
3 ~ 13line은 문자 변수를 담는 과정인데 슝(var[1]) 에 9*8 즉 72를 담고 있다 아스키코드상 'H'
비비 따잇은 전부 출력을 위한거고 ㅋ의 갯수가 var[] 의 인덱스를 의미한다
마침표나 느낌표나 물음표는 전부 함정 자기 맘대로 써도 된다
그래서 이건 var[1] var[9] .... var[11] 를 출력하는 예제 Hello, world! 출력하는 예제인데 너무 부산스럽긴하다
교주님
슈우웅...좌아아아아아아아아악!!!!
슈우우웅..좌아아악,..??좌아아악,..?!좌악!!
슝?!! 좌아악,..좌아악!!
슈웅? 좌아악,...좌악~~ 좌아악??
슈우우우웅...좌아아아아아아아아악!!!!;슝
슈우우우우웅??? 좌아아아아아아아아악?!!!;슈웅...
슈우우우우우웅? 슈우우우웅..., 슈우우우우웅!!
비비 따잇!!ㅋㅋㅋㅋ하는 재미ㅋㅋㅋ 슈우우우우우웅...@@@@ 좌아아아아아아아아악..!
비비ㅋㅋㅋ 보호막 따따잇ㅋㅋㅋㅋ
비비... 따잇!!!ㅋㅋㅋㅋ
에잇? 에잇!!ㅋㅋㅋㅋ하는 재미ㅋㅋㅋㅋ 슈웅;;;좍?!!
슈웅?? 슈웅...;;; 좍?!
에잇!!ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ
비비 따잇ㅋㅋㅋ
에잇! 에잇!ㅋㅋㅋㅋ 하는 재미? 슝?!; 좍!!
슝..슝..;좍...
에잇!ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ
이 코드는 구구단을 출력하는 예제 출력결과는
Running your code...
jwak@jwak-server ~$ python main.py
1 2 3 4 5 6 7 8 9
2 4 6 8 10 12 14 16 18
3 6 9 12 15 18 21 24 27
4 8 12 16 20 24 28 32 36
5 10 15 20 25 30 35 40 45
6 12 18 24 30 36 42 48 54
7 14 21 28 35 42 49 56 63
8 16 24 32 40 48 56 64 72
9 18 27 36 45 54 63 72 81
여기에 조건문 반복문 등이 많이 쓰여서 첨엔 이해하기가 쉽지 않다.
일단 내가 대충 해석해 봤는데 이랬다
[3] = '\n' // 줄바꿈
[4] = ' ' // 공백
[1] = 9
[2] = 9
[5] = 10 - [1]
[6] = 10 - [2]
[7] = [5] x [6]
if (0 == [7] / 10) {print([4])}
print(int([7]))
print([4]) // " "
if (0 == [2] - 1) {goto(+4)}
[2] = [2] - 1
goto(-10)
print([3]) // 줄바꿈
if (0 == [1] - 1) goto(+4)
[1] = [1] - 1
goto(-18)
이러면 좀 명백해 지는데
이 if문을 처음 봤을 땐 진짜 혼란 그 자체다. 특히
비비 따잇!!ㅋㅋㅋㅋ하는 재미ㅋㅋㅋ 슈우우우우우웅...@@@@ 좌아아아아아아아아악..!
이 명령이 이해가 가지 않을텐데 왜냐하면 '하는 재미'뒤에 ㅋㅋ가 무슨의미인지 리드미에 적혀있지 않다...
내가 실험해보니까 무의미하다 즉 '하는 재미'뒤에 ㅋ는 몇번이 오든 아예 오지 않던 상관이 없다
그래서 이문장을 해석해보면 만약 'var[7]을 10으로 나눈 값의 정수부분이 0이라면 var[4]를 출력해라'가 된다. 특히하게 if문은 조건이 0이 나올때만 true라고 본다. 이건 리드미에 나오는데 놓치기 쉬울것 같다
일단 줄바꿈이나 공백같은 특수문자를 var[1], [2]에 저장하지 않고 또 var[1], var[2]를 9로 초기해 놨는데 솔직히 이럴필요가 없지 않나? 그래서 코드를 좀 더 깔끔하게 정리해 봤다
교주님
슝 좌악,좌아아아악
슈웅 좌악,좌악,좌악,좌악,좌악
슈우웅 좍
슈우우웅 좍
슈우우우웅 슈우웅,슈우우웅
비비따잇 ㅋㅋ
비비따잇 ㅋㅋ 하는재미 슈우우우웅@좌아아아아아아아아악
비비보호막따잇 ㅋㅋㅋㅋㅋ
슈우우웅 슈우우웅~좍
에잇에잇 ㅋㅋㅋ 하는재미 슈우우웅;좌아아아아아아아아악
에잇 ㅋㅋㅋㅋㅋㅋ
슈우우웅 좍
슈우웅 슈우웅~좍
에잇에잇ㅋㅋㅋ 하는재미 슈우웅;좌아아아아아아아아악
비비따잇ㅋ
에잇 ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ
어이가 없지만 훨씬 간단하다. 특수문자를 위한 변수 2개 계산을 위한 변수 2개 출력을 위한 변수 1개로 바꾸고
뒤죽박죽이던 출력코드와 변수값 변경 코드도 종류 대로 한 곳에 모뒀다.
근데 이게 에잇이 goto를 쓰고 있어서 코드 수정에 따른 유지 보수가 최악이다. 뭐 그건 컨셉이니까 그렇다 쳐도 주석정도만 있으면 좋겠는데 #을 써도 주석이 안되는건 좀 아쉬운 부분ㅇ