Skip to content

Latest commit

 

History

History
39 lines (38 loc) · 2.3 KB

spec.md

File metadata and controls

39 lines (38 loc) · 2.3 KB

약속 언어 명세

이 문서는 yaksok.js의 구현을 기준으로 작성되었습니다. 공식명세 또는 문서화되지 않은 레퍼런스 구현과 일치하지 않을 수 있습니다.

구문 분석

소스코드 인코딩

기본적으로 소스코드 파일은 utf8 형식으로 인코딩 되어있다고 가정합니다.

yaksok.js는 매 CRLF 또는 LF문자를 만날 때마다 줄을 나눕니다. CRLF, LF 문자는 앞으로 줄구분 문자라고 하겠습니다.

예외

(), {}, [] 등의 괄호쌍 안에서는 줄구분 문자를 만나도 줄을 나누지 않습니다.

주석

#문자를 만나면 그 때부터 줄구분 문자를 만나기 전까지는 전부 주석으로 처리합니다.

공백

앞으로 스페이스나 탭 문자는 공백문자라고 하겠습니다. 기본적으로는 식별자나 키워드 토큰을 구분지어주고 공백문자 자체는 무시되지만, 약속 정의부에서는 연속된 공백문자도 하나의 공백문자 토큰으로 다뤄집니다.

들여쓰기

줄이 공백문자의 연속으로 시작하면 그 갯수로 들여쓰기 단계를 구분합니다. 들여쓰기 단계를 구분할 때는 하나의 탭문자를 8개의 스페이스 문자로 간주합니다.

블록

들여쓰기 단계가 같은 줄들이 연속으로 등장하면 들여쓰기 단계가 다른 줄이 나타나기 전까지를 하나의 블록으로 다룹니다. 블록 안에는 하나 이상의 문장이 들어갈 수 있습니다. 아무런 문장도 들어있지 않은 블록은 무시됩니다.

빈 줄

줄구분 문자가 연속으로 등장하면 하나의 줄구분 문자인 것으로 처리합니다. 따라서 비어있는 줄이 발생해도 들여쓰기 블록이 닫히는 일은 없습니다.

식별자와 키워드

[$_a-zA-Z가-힣][$_a-zA-Z가-힣0-9]* 이 정규식과 일치하는 토큰은 식별자 토큰입니다. 키워드는 문법적 기능으로 예약되어있는 식별자를 뜻합니다. yaksok.js에는 다음의 식별자들이 예약되어있습니다:

약속, 만약, 이면, 이라면, 아니면,
아니라면, 아니면서, 참, 거짓, 반복,
그만, 다시, 패스, 이고, 그리고,
또는, 이거나, 이전

반복구문에서는 , 마다 식별자도 키워드로 사용합니다.