문법 · 코드 작성 · 구현체 목록 · 웹에서 직접 사용해보기 · 기타
몰??
모올??.?????
몰루
아모올루
모오올은?행
모올루
털!자
가?자!
현재 언어 버전: 1.3
몰랭 웹 인터프리터 사이트에서 1.1버전의 몰랭을 실시간, 대화형으로 실행해볼 수 있습니다! (1.3 버전 업데이트 예정) 웹 인터프리터의 소스 코드 및 설명은 여기에 있습니다.
몰랭(Mollang)은 모바일 게임 블루 아카이브의 밈 '몰?루'에서 착안해 설계한 프로그래밍 언어입니다.
본 언어는 엄랭에 깊은 감명을 받고, 이에 기반하여 존경을 담아 제작되었습니다. 다만 기존 엄랭과 약간의 문법상 차이가 존재합니다.
근데 왜 만든건지는 나도 잘 몰?루
구현체는 현재 C++, Node.js가 존재하며 다른 언어(Python, ...)구현은 개발 예정입니다! 언제든지 PR은 환영드립니다!
몰랭의 문법은 몰
, 루
, ?
, !
, .
, 은?행
, 털!자
, 돌!자
, 짓!자
, 가!자
, 가자!
, 0ㅅ0
, ~
, *
, =
의 15개 키워드와 조합 및 변형으로 이루어집니다.
?
(물음표): 1 증가 연산자!
(느낌표): 1 감소 연산자.
(마침표): 두 수 곱하기..
(마침표2): 두 수 나누기 (이 기능은 1.2부터 지원됩니다.)...
(마침표3): 두 수 나누어 소수점 내리기 (정수 나눗셈) (이 기능은 1.2부터 지원됩니다.)....
(마침표4): 두 수를 나눈 나머지 (이 기능은 1.2부터 지원됩니다.) 나눗셈과 나머지 연산은 부호를 무시하고 계산한 후, 부호를 따라갑니다.
?? -> 2
!! -> -2
!!!?? -> -1
??.???! -> 2 * (3 - 1) = 4
??.??.?? -> 8
???????..??? -> 2.333333···
???????...??? -> 2
???????....??? -> 1
!!!!!....??? -> -2
..
또는 실수값을 하나라도 사용하는 식은 모든 수가 실수로 변환되어 계산됩니다.
정수값만을 가질 수 있는 변수(공간)에 실수로 계산된 값을 대입할 시 내림하여 대입합니다.
변수들은 각각 정수 인덱스(번째수)를 가지며 아래와 같은 방법으로 나타냅니다. 변수 선언시 기본값이 입력되지 않으면 0으로 초기화됩니다.
몰/모올로 선언된 변수들은 항상 정수의 값만 저장할 수 있습니다.
첫 변수 이름은 몰
입니다. 장음을 통해 그 글자수번째 변수를 나타내게 됩니다.
몰 -> 첫 번째 변수 선언
모올 -> 두 번째 변수 선언
모오오오오올 -> 여섯 번째 변수 선언
변수 이름 뒤에 연산자를 붙여 그 변수를 선언함과 동시에 정수를 대입합니다.
몰?? -> 첫 번째 변수에 2 대입
모올!! -> 두 번째 변수에 -2 대입
모오올??.??.! -> 세 번째 변수에 -4 대입
변수가 이미 선언되어 있다면 변수 이름으로 그 변수의 값을 가져옵니다.
1 몰?? -> 첫 번째 변수에 2 대입
2 몰루 -> 2가 출력됩니다.
한 변수를 다른 변수에 대입할 수 있습니다.
1 몰? -> 첫 번째 변수에 1 대입
2 모올몰 -> 두 번째 변수에 첫 번째 변수값 대입 (1이 대입됩니다.)
3 모오올몰? -> 세 번째 변수에 첫 번째 변수값 + 1 대입 (2가 대입됩니다.)
한 줄에 세 개 이상의 변수가 있는 경우, 맨 앞의 변수가 대입 대상, 그 이후의 변수들은 값으로 취급됩니다.
또한 연산자를 이어쓸 수 있듯 변수 여러개를 이어 써도 더하기로 간주합니다.
몰모올모오올 -> 첫 번째 변수에 두 번째 변수와 세 번째 변수를 더한 값을 대입합니다. (즉, 몰 = 모올 + 모오올)
줄의 맨 처음에서, 이미 선언된 변수 뒤에 연산자를 붙이면 연산의 결과가 대입됩니다.
1 몰?? -> 첫 번째 변수에 2 대입
2 몰??? -> 첫 번째 변수를 3만큼 증가
3 몰! -> 첫 번째 변수를 1만큼 감소
4 몰.??? -> 첫 번째 변수를 3배로
5 몰루 -> 12가 출력됩니다.
하지만 줄이 변수가 아닌 연산자로 시작하는 경우 대입이 아닌 단순 연산으로 간주합니다.
1 몰? -> 첫 번째 변수에 1 대입
2 ??몰!루 -> 2 + 1 - 1 = 2이므로, 계산 결과인 2가 출력됩니다.
3 몰루 -> 원래 변수는 변하지 않았으므로 1이 출력됩니다.
루
, 루?
, 은?행
, 아
키워드와 같이 변수 앞뒤에 키워드가 붙었을 때에도 대입이 아닌 단순 연산으로 간주합니다.
1 몰?????????????.????? -> 첫 번째 변수에 65 대입
2 아몰???루 -> 유니코드 코드번호 68인 영문 'D' 출력
3 몰루 -> 원래 변수는 변하지 않았으므로 65가 출력됩니다.
루
키워드를 사용해 콘솔에 정수를 출력합니다.
변수명 뒤에 루
키워드를 붙여 변수값을 출력합니다. 루 앞에는 반드시 값이 필요합니다.
몰루 -> 콘솔에 첫 번째 변수값 출력
몰?루 -> 콘솔에 첫 번째 변수값 + 1 출력
?몰루 -> 콘솔에 첫 번째 변수값 + 1 출력 (위와 동일)
??루 -> 2 출력
루 -> 오류
?!루 -> 0 출력
실수 값을 출력할 시 소수점 아래 몇 번째 짜리까지 값을 출력할 지 지정할 수 있습니다.
??.????루! -> 다음부터 출력되는 모든 실수를 반올림하여 소수점 아래 8자리까지 출력합니다.
루?
키워드를 사용해 콘솔로부터 정수를 입력받습니다. 반드시 하나의 온전한 변수만을 앞에 써야 하며 연산자를 사용하면 안 됩니다.
몰루? -> 입력값을 첫 번째 변수에 대입
모올루? -> 입력값을 두 번째 변수에 대입
몰모올루? -> 오류 (입력받을 변수가 여러개)
몰?루? -> 오류 (연산자를 사용함)
문자열 입력은 항상 ASCII코드만으로 이루어진 문자들로 이루어집니다.
문자를 출력할 때에는 아
키워드를 콘솔 출력 문법 앞에 붙입니다. 정수를 UTF-8 문자로 변환하여 콘솔에 출력합니다.
아몰루 -> 첫 번째 변수값을 유니코드로 출력
아?????????????.?????루 -> 'A' 출력
조건에 따라 특정 코드를 실행할 수 있습니다.
{조건식}은?행{실행할 코드}털!자
의 형태로 사용합니다. 조건식 안의 값이 0이면 코드가 실행되고, 그렇지 않으면 실행되지 않고 바로 다음 코드로 넘어갑니다.
조건식에는 변수, 연산자를 사용할 수 있습니다.
몰은?행모올??털!자 -> 첫 번째 변수가 0이면 두 번째 변수 2 증가
모올!!은?행모오올?털!자 -> 두 번째 변수 - 2가 0이면 세 번째 변수 1
가독성을 위해(의미없지만) 여러 줄에 걸쳐 나타낼 수 있습니다. 조건절, 실행할 코드, 종료절의 순서로 개행합니다.
몰은?행
모올??
털!자
모올!!은?행
모오올?
털!자
조건문 하나당 실행할 코드는 여러 개가 들어갈수도 있습니다. 또한 조건문 안에 조건문이 중첩되는 경우도 문제없이 수행됩니다.
특정 조건이 0이 될 때까지 반복을 진행합니다.
{조건식}은?행{실행할 코드}돌!자
의 형태로 사용됩니다. 반복문이 종료되면 돌!자
의 다음 부분으로 이동하게 됩니다.
가(이동할 라인 숫자)자!
의 형태로 사용합니다. 특정 라인으로 이동하여 그 라인부터 차례로 실행을 재개합니다.
가몰자! -> 첫 번째 변수번째 라인으로 이동
가???자! -> 세 번째 라인으로 이동
0ㅅ0
키워드로 프로그램을 종료합니다. 뒤에 변수 또는 연산자가 있으면 그 정수를 반환하면서 종료합니다.
0ㅅ0? -> 1 반환하고 종료
{함수명}은?행(인자1),(인자2),(인자3),... {실행할 코드}짓!자
의 형태로 사용됩니다.
함수의 파라미터 개수에는 제한이 없습니다. 파라미터 수가 하나일 경우 쉼표를 적지 않습니다.
함수는 항상 하나 이상의 인자를 필요로 합니다.
단, 함수명은 초성이 ㅁㄹ인 단어만 허용됩니다. 예: 말랑, 머리, 무릎, 망령, 매립, 무리, 밀랍, 뭵뤩
단, ㅁ의 자리에 몰, ㄹ의 자리에 루는 사용할 수 없습니다. 예: 몰랑, 모루
인자는 몰
, 모올
형태로 입력하며 함수 내부에서 코드를 실행할 때, 인자로 사용된 변수의 우선순위가 높습니다.
몰? 모올??
뭵뤩은?행몰
몰루 <- 함수 호출 인자로 받은 값(3)을 출력합니다.
모올루 <- 글로벌 변수 모올의 값(2)을 출력합니다.
짓!자
뭵뤩은?행???가!자
{함수명}은?행(인자1),(인자2),(인자3)가!자
의 형태로 사용됩니다.
리턴값을 받기 위해 인자를 하나 더 추가할 수 있습니다.
{함수명}은?행(인자1),(인자2),(인자3),(리턴값을 담을 변수)가!자
의 형태로 사용됩니다.
뭵뤡은?행 몰
0ㅅ0몰.??
짓!자
뭵뤩은?행 ??,몰 가!자 -> 몰 변수에 4저장
몰루 -> 4출력
힙 메모리는 2차원의 무제한한 공간이며 정수,실수,문자 세 종류의 공간을 가지고 있습니다.
처음 시작점은 (행:1, 열:1)이고 오른쪽으로 가면 열이 증가하며 아래쪽으로 가면 행이 증가합니다.
힙 메모리의 특정 주소를 다음과 같이 표현하며 변수와 같은 형태로 사용할 수 있습니다.
몰*모올 -> 정수힙의 몰번째 행 모올번째 열
몰~모올 -> 문자힙의 몰번째 행 모올번째 열
몰=모올 -> 실수힙의 몰번째 행 모올번째 열
몰*모올? -> 정수힙의 몰번째 행 모올번째 열에 1대입
몰=모올몰*모올 -> 정수힙의 몰번째 행 모올번째 열의 값을 실수힙에 복사
문자열 입력과 출력은 다음과 같이 진행됩니다.
몰? -> 몰 변수에 1대입
몰~몰루? -> (1,1)부터 (1,문자열길이)까지 입력한 문자열을 한 글자식 분리하여 채웁니다.
몰? -> 몰 변수에 1대입
몰~몰루 -> (1,1)부터 오른쪽으로 한칸씩 이동하며 문자가 존재하지 않을 때까지 전부 출력합니다.
몰? -> 몰 변수에 1대입
모올???? -> 모올 변수에 4대입
1 몰~몰루? <- 'abc'입력
2 몰~모올루? <- 'def'입력
3 몰~몰루 -> 'abcdef' 출력
힙 메모리를 관리하는 다음과 같은 연산자가 있습니다.
&몰~모올 -> (몰,모올)부터 오른쪽으로 한칸식 이동하며 문자가 존재하지 않는 공간까지의 거리를 셉니다.
몰? 모올??
1 모올~몰루? -> 'abc'입력
2 &몰~몰 -> 0
3 &모올~몰 -> 3
파일 확장자는 .molu
입니다.
각 코드는 줄바꿈(\n
) 또는 띄어쓰기로 구분합니다. 여러 형태로 해석이 가능한 코드를 작성 시 컴파일 오류가 발생합니다.
0ㅅ0?몰루 -> 컴파일 오류 발생
몰루모올루 -> 정상 실행
몰루
모올루 -> 정상 실행
몰루 모올루 -> 정상 실행
구현 언어 | 구현 버전 | 첫 릴리즈 날짜 | 마지막 릴리즈 날짜 |
---|---|---|---|
C++ | 1.3, (1.2, 1.1, 1.0) | 2022.02.09 | 2022.2.22 |
Node.JS | 1.1, (1.0) | 2022.02.12 | 2022.2.14 |
Python3 (예정) | - | - |
실행파일 다운로드 혹은 직접 컴파일 후
Mollang.exe <molu파일 경로>
-parsed: 몰랭 코드의 파싱 결과를 보여줍니다.
npm i -g mollang
mollang <molu파일 경로>
콘솔(CLI)에서 사용하지 않고 모듈로 사용하기를 원하는 경우, mollang-core
패키지를 설치합니다.
npm i mollang-core
// ES6+ 인 경우
import mollang from 'mollang-core';
import readline from 'readline-sync';
// CommonJS
const mollang = require('mollang-core').default;
const readline = require('readline-sync');
var result = mollang('몰? 몰루', {
inputFn: readline.question
});
npx mollang <molu 파일 경로>
몰랭 웹 인터프리터는 몰랭 프로그래밍 언어를 웹상에서 실시간으로 실행해볼 수 있는 대화형 인터프리터 웹사이트입니다.
웹에서 몰랭 코드 실행해보기: https://molu.vercel.app
이 프로젝트가 마음에 드시나요? 저희가 더욱 발전할 수 있도록 도와주세요! 후원하기: