본문 바로가기

프로그래밍 기록/토이

[LolChatLang] 롤챙 프로그래밍 언어를 만들어보자

사건의 발단

지인이 말한 all 함수 편하다 -> 올 ㅋㅋ -> 함수명이 올 ㅋㅋ 으로 지어도될듯 -> 진짜/시발/근데/아니 짤 -> 이거 롤 채팅 아니냐? 라는 기적의 야크털 깎기식 논법으로 프로그래밍 언어를 하나 만들어보자는 생각이 들었고
주말동안 뚝딱 만들었다. (사실 밤샘)
언어 롤챙 (LolChatLang) 이다
https://github.com/Lee-WonJun/LolChatLang

GitHub - Lee-WonJun/LolChatLang: 롤채팅식 프로그래밍 언어 [롤챙]

롤채팅식 프로그래밍 언어 [롤챙]. Contribute to Lee-WonJun/LolChatLang development by creating an account on GitHub.

github.com


이러한 파서를 만들때, 구문만 지정하면 자동적으로 만들어주거나, 아니면 모나드를 활용한 파서 컴비네이터 (FParser 라이브러리가 유명) 같은것으로 멋들어 지게 짜면 좋았으나.. 영웅은 도구따위 쓰지 않는법, 하드 코딩 파싱했다.
뭐 재미로 만들고 있는 언어이기도 하고 그렇기 때문에 개발하는 이틀동안 Spec 이 계속 변경되었기때문에 하드코딩도 나쁘지않지..
파서함수도 재귀함수로도는데, If 문처럼 Depth 를 제어하기위하여 세상 비효율적인 로직으로 파싱한다,
대충 돌아가는 로직은 일반적인 컴파일러/인터프리터 만들기와 비슷한데
토큰화같은 작업은 빠르게 생각하고 바로 롤챙라인 -> AST 변환 -> AST 해석 순으로 진행했다

대충 AST 정의하고

대충 파싱하고
대충 인터프리팅 하면 된다


IF 문 (Depth) 이나 GOTO  에대한 AST / Interpreter 처리를 좀 고민했는데, 그냥 생각나는대로 고쳐가면서 짯다
토이프로젝트에서 테스트코드는 당근빠따 하나도 안짜고, 대신 F# 이라 REPL 상에서 좀 테스트하면서 진행하였다.
그래서 아마 의도대로 안돌아가는 코드가 생성될수도 있을꺼 같긴한데 뭐...

대충 이런식으로 돌아간다


여기서 정말 놀라운사실은
나는 롤을 안한다, 아이디도 없다.. 다만 롤의 채팅에 대한 악명을 알고 있을뿐이라,
문법을 고민하는 도중에 주변 전문가 지인들에게 도움을 좀 받았다.

전문가의 의견


솔직히 이거 만드는게 세상 인류 발전과 평화에 아무런 가치를 제공하지 않는 실용도 0의 토이 프로젝트 이긴한데, AST 같은거 만드는건 처음이라 좀 재미는 있었고, 추후에 DSL 을 구축할때 도움이 좀 될듯 하다.

728x90