Skip to content

✨코딩을 몰라도 누구나 자신만의 밈 언어를 만들 수 있습니다.

License

Notifications You must be signed in to change notification settings

scenent/make-your-own-meme-lang

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

27 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

밈 언어 생성기(memec)

이 밈 언어 생성기를 통해 코딩을 몰라도 누구나 자신만의 밈 언어를 쉽게 만들 수 있습니다.
규격에 맞춰 출력되는 밈 언어는 BrainF**k을 기반으로 하며, 엄랭과 진입점 형태가 같습니다.
제작하고 싶은 언어의 키워드를 ini 파일로 지정한 다음, 이 레포에서 제공하는 컴파일러를 통해
C++ 또는 Python 언어로 단일 구현체를 내보낼 수 있습니다.

밈 언어 만들기

  1. 이 레포지토리의 릴리즈 페이지로 이동합니다.
  2. Windows 라면 자신의 운영체제(32bit / 64bit)에 맞는 컴파일러와 내보내기 템플릿을 다운받습니다.
    memec-x32.exe 또는 memec-x64.exe/platform.
    내보내기 템플릿은 반드시 컴파일러가 위치한 폴더에 존재해야 합니다.
    Windows 운영체제가 아니라면 직접 소스를 빌드하셔야 합니다. 이 레포지토리를 클론하고 CMake를 통해 빌드하세요.
  3. memec_template.ini 파일을 다운받습니다.
  4. memec_template.ini 파일을 원하는 대로 수정합니다. 각 키워드를 지정하는 방법에 대해서는 ini 파일 수정하기를 참고하세요.
  5. 터미널을 열어서 컴파일러가 위치하는 폴더로 이동합니다.
  6. 다음과 같은 명령어를 입력합니다. (32bit라면 memec-x32를 실행해야 합니다.)
    단, 출력 소스 파일의 확장자는 *.cpp, *.py 중 하나여야 합니다.
>> ./memec-x64 [ini 파일 경로] [출력 소스 파일명]
  1. 오류가 나지 않았다면 컴파일러가 위치한 폴더에 단일 소스 코드가 출력되었을 것입니다.
    오류가 났다면 콘솔의 오류 메세지를 확인해 주세요.
  2. 이제 각 언어에 맞는 실행 환경을 구축하고 출력된 소스를 다음과 같이 컴파일/실행할 수 있게 됩니다.

C++의 경우

>> ./memelang [자신만의 언어 파일 경로]

Python의 경우

>> python memelang.py [자신만의 언어 파일 경로]

ini 파일 수정하기

밈 언어 생성기(memec)의 입력 파일은 하나의 ini 파일로 이루어져야 합니다.
ini 파일의 내용은 다음과 같습니다.

Important

  • 캐리지 리턴('\r') 자체는 키워드로 사용될 수 없습니다.
  • 개행 문자, 탭은 각각 '\n', '\t'로 지정할 수 있습니다.
  • 표준 ini 파일 양식을 전부 따르지는 않습니다. 특히 주석은 다른 데이터들과 같이 쓰일 수 없으며, 독립적으로 한 줄에 세미콜론으로 시작되야 합니다.
  • 만약 같은 문자로 시작되는 두 개 이상의 키워드가 존재할 경우, 길이가 짧은 것이 먼저 인식됩니다. 되도록 키워드의 길이를 똑같이 맞추거나 시작되는 문자가 겹치지 않게 해주세요.
  • 각 구분 문자들과 한 줄 주석의 시작 문자는 반드시 한 글자여야 합니다.
[File]
; 만들고자 하는 프로그래밍 언어에서 사용되는 파일의 확장자를 정의합니다.
Extension=dogsound

[Comment]
; 언어에 한 줄 주석 기능 여부를 정의합니다.
HasSingleLinedCommentFeature=true
; 한 줄 주석이 시작되는 키워드를 정의합니다. 위에서 한 줄 주석 기능을 비활성화 했다면 무시됩니다. 한 글자만 가능합니다.
SingleLinedCommentStart=;

[CharIgnored]
; 프로그램이 키워드를 구분하는 단위의 개수를 정의합니다. 이 수 만큼의 CharIgnoredN 값이 존재해야 합니다.
SizeofCharIgnored=1
; 첫 번째 구분 문자를 정의합니다. 한 글자만 가능합니다.
CharIgnored1=\n

[Keyword]
; 프로그램이 시작되는 키워드를 정의합니다.
EntryPoint=개소리 시작
; 프로그램이 끝나는 키워드를 정의합니다.
EndPoint=개소리 끝
; 포인터를 증가시키는 키워드를 정의합니다.
IncreasePointer=아
; 포인터를 감소시키는 키워드를 정의합니다.
DecreasePointer=으
; 포인터가 가르키는 바이트의 값을 증가시키는 키워드를 정의합니다.
IncreaseValue=우
; 포인터가 가르키는 바이트의 값을 감소시키는 키워드를 정의합니다.
DecreaseValue=오
; 포인터가 가르키는 바이트의 값을 출력하는 키워드를 정의합니다.
PrintValue=!
; 포인터가 가르키는 바이트의 값에 입력을 받는 키워드를 정의합니다.
InputValue=?
; 포인터가 가르키는 바이트가 0이 아닐 때까지의 반복을 시작하는 키워드를 정의합니다.
LoopStart=.
; 포인터가 가르키는 바이트가 0이 아닐 때까지의 반복을 끝내는 키워드를 정의합니다.
LoopEnd=,

위에서 고안한 dogsound 언어로 "Hello, World!"를 출력하는 코드는 다음과 같습니다.

; helloworld.dogsound
개소리 시작
우우우우우우우우우우.아
우우우우우우우아우우우우
우우우우우우아우우우아우
으으으으오,아우우!아우
!우우우우우우우!!우우
우!아우우우우우우우우우
우우우우우!오오오오오오
오오오오오오!으으우우우
우우우우우우우우우우우우
!아!우우우!오오오오오
오!오오오오오오오오!아우!
개소리 끝

예제 파일

이 레포에서는 몇 가지 템플릿 예제가 제공되며, /example 폴더에서 확인하실 수 있습니다. 목록은 다음과 같습니다.

  • brainfuck.ini
  • dogsound.ini
  • umm.ini (기존의 엄랭과 전혀 다른, BrainF**k 기반의 새로운 엄랭 규격입니다.)
  • whitespace.ini (공백만 사용하긴 하지만, 마찬가지로 기존의 화이트스페이스 언어와 다른 문법을 사용합니다.)
  • heavyrainy.ini (스트리머 호무새 님의 언어를 빌려 구현되었습니다.)

TODO

  • 모든 예제에 대한 소스 파일 추가하기
  • BrainF**k 기반만이 아닌, 다른 규격의 난해한 프로그래밍 언어 생성기로 확장(e.g. Stack Operation)하고 커맨드에 옵션 추가하기
  • NASM 표준 어셈블리어로 변환 지원하기
  • 더 쉽게 변환할 수 있도록 GUI 구성하기

지원 플랫폼

현재 Windows(MSVC x32/x64) 에서만 구동해보았으나,
WinAPI를 전혀 사용하지 않았으므로 유닉스 계열 OS에서도 잘 동작할 것으로 예상됩니다.

유의사항

  • 이슈를 통한 버그 제보나 풀 리퀘스트는 언제나 환영입니다.
  • 라이선스에도 고지되었다시피 이 프로그램을 사용하여 얻는 불이익은 책임지지 않습니다.
  • 밈 언어 생성기(memec)를 컴파일 할 때는 되도록 -std=c++17 옵션을 켜 주세요. 추후에 모던 STL을 도입할 가능성이 있습니다.
  • 출력 파일 중 Python 언어의 경우 3.1x 버전 이상의 인터프리터에서 실행되어야 합니다.

라이선스

밈 언어 생성기(memec)는 MIT 라이선스 하에 배포됩니다.
자세한 내용은 LICENSE 파일에서 확인해 주세요.