이 문서는
나무위키 컴퓨터 프로젝트에서 다루는 문서입니다.
해당 프로젝트 문서를 방문하여 도움이 필요한 문서에 기여하여 주세요!
해당 프로젝트 문서를 방문하여 도움이 필요한 문서에 기여하여 주세요!
<MAIN>
<@print args=`"Hello, world!"` />
</MAIN>
사용자:sbshw1이 개발하는 명령형 프로그래밍 언어. HTML의 형식을 문법으로서 채용한 특이한 언어이다.
* 개발자의 Github 링크
1. 문법
이 문서는 독자가 이미 프로그래밍에 대해 어느정도 경험이 있는 사람이라 가정하고 작성한다.TTeok은 식별자의 대소문자를 가리지 않는다.
1.1. 주석
한 줄의 첫 번째 글자가 #이라면 그 줄은 낱말 분석기가 무시한다.#이건
#주석입니다
1.2. 식별자
식별자로는 알파벳 a-zA-Z와 _, @를 사용할 수 있다.1.3. 정수
INTEGER빌트-인 타입이며 INTEGER 라고 지칭한다.
double-precision 64-bit binary format IEEE 754를 사용한다.
기본값은 0이다.
1.4. 실수
FLOAT
빌트-인 타입이며 FLOAT 라고 지칭한다.double-precision 64-bit binary format IEEE 754를 사용한다.
기본값은 0.0 이다.
1.5. 문자열
STRING빌트-인 타입이며 STRING 라고 지칭한다.
" "사이에 문자들이 있는 형태이며 \를 통해 \다음에 오는 문자의 메타 문자로서의 효력을 없엘 수 있다.
기본값은 "" (빈 문자열) 이다.
1.6. void
빈 변수를 표현한다.내부적으로 null 값을 가지고 있다.
기본값도 null.
1.7. 시작 태그
아래 영역이 하나의 컨태이너의 영역이라는 것을 알리는 태그이다.기본 형태는
<[태그명] [옵션명 [= ` 옵션값 `] ]>
이다 (옵션은 여러 개 들어갈 수 있다)
종료 태그와 같이 아래처럼 컨테이너를 구성하는 데 사용된다.
<MAIN>
</MAIN>
또한
<MAIN />
처럼 하여 종료 태그를 생략할 수 있다.
1.8. 종료 태그
하나의 컨테이너의 영역이 끝났다는 것을 의미하는 태그이다.기본 형태는
</[태그명]>
이다.
종료 태그와 같이 아래처럼 컨테이너를 구성하는 데 사용된다.
<MAIN>
</MAIN>
또한
<MAIN />
처럼 하여 종료 태그를 생략할 수 있다.
1.9. 컨테이너
컨테이너(Container)는 시작 태그와 종료 태그로 감싸진 컨테이너들의 집합을 의미한다.<MAIN> #시작 태그
#컨테이너들의 집합
</MAIN>#종료 태그
1.10. 변수 선언
변수 선언은 var이라는 컨테이너를 통해 아래와 같이 할 수 있다.<MAIN>
<VAR name = ` test_variable ` value = `1234` type = `INTEGER` />
</MAIN>
name 옵션은 필수이며 식별자를 받습니다.
이 컨테이너가 생성할 변수는 그 스코프에서 name옵션으로 받은 식별자를 식별자로 사용합니다.
value 옵션은 필수가 아닙니다.
변수의 값을 지정할 때 사용합니다.
값으로는 문자열,정수,실수,빈 값 중 하나를 받습니다.
value 옵션을 사용하지 않았을 경우 지정된 타입의 기본값이 들어갑니다.
타입마져 지정되지 않았을 경우 내부적으로 null 값을 갖는 void 타입 변수가 됩니다.
또한 ,로 여러 값을 나누어서 준다면 배열을 생성합니다. ex : value=`1,2,3,4,"hi",9.1`
type 옵션은 필수가 아닙니다.
타입을 지정할 때 사용됩니다.
값으로는 그 타입의 명칭을 받습니다. ex type =`INTEGER`
void를 지정할 수 있습니다.
콜백을 받아도 실행시키지 않습니다.
1.11. 배열
배열은 내부적으로 연결 리스트입니다.var을 통해 선언할 수도 있지만 아래의 방법을 권장하며 더 빠릅니다.
<array name=`number_array` values=`1,2,3,4,5` />
또한 값들의 타입이 재각각이여도 됩니다.
push,pop,shift,unshift 를 기본적으로 지원합니다.
콜백을 받아도 실행시키지 않습니다.
1.12. 함수
TTeok에서 함수는 정적 스코프를 갖고 있다.즉, 모든 변수와 함수는 정의하는 컨테이너를 담은 함수의 스코프에 저장된다.
함수는 아래와 같이 func 컨테이너를 통해 선언한다.
<MAIN>
<Func name = `test_func` args=`argument`>
</Func>
</MAIN>
name 옵션은 필수이며 식별자를 받습니다.
선언되는 함수의 식별자 역할을 합니다.
args 옵션은 필수이며 ,로 구분되는 0개 이상의 식별자들을 받습니다.
이 식별자들은 함수의 파라미터들의 식별자입니다.
함수 호출은 아래와 같습니다.
<MAIN>
<Func name = `test_func` args=`argument`>
<@print args=`argument` />
</Func>
<test_func args=` "Hello, world" ` />
</MAIN>
시작 태그의 컨테이너 이름을 적는 곳에 호출할 함수의 이름을 적으면 됩니다.
또한 args 옵션은 필수이며 이 옵션의 값으로 ,로 구분되는 파라미터로 줄 값을 넣습니다.
또한 넘겨준 값의 개수와 함수의 파라미터의 개수가 같아야 합니다.
그렇지 않으면 오류를 일으킵니다.
콜백을 사용하는 방법은 아래와 같이 함수를 호출하는 컨테이너에게 옵션값 없이 옵션으로 callback을 명시해 주고
자식 컨테이너로 실행된 컨테이너들을 주면 됩니다.
<MAIN>
<Func name = `test_func` args=`argument`>
<@print args=`argument` />
</Func>
<test_func args=` "Hello, world" callback >
<@print args=`"callback"` />
</test_func>
</MAIN>
함수는 두 가지로 나뉩니다.
1.12.1. 노말 함수
노말 함수는 TTeok 코드로 작성된 함수를 의미합니다.이 노말 함수들을 호출할 때 콜백을 넘겨준다면 함수의 실행시 끝난 후 콜백이 실행됩니다.
1.12.2. 빌트-인 함수
빌트-인 함수들은 자바스크립트로 만들어진 함수들을 의미합니다.아래는 빌트-인 함수 중 출력 함수인 @PRINT의 내부입니다.
WINDOW.scope["@PRINT"] = new Func("BUILT-IN",print,["src"]);
function print (variable,_scope,_callback) {
if(variable.get().type !== "string") variable = variable.get().toString();
console.log(variable.get_unwrap());
}
new Func("BUILT-IN",빌트-인 함수,[인자명들의 문자열 배열]);
*여기서 저 인자명은 그냥 디버깅의 용의를 위해 들어가는겁니다. 빌트-인 함수의 인자랑은 관련이 없습니다.
빌트-인 함수는 아래와 같이 인자를 받습니다.
(TTeok함수 호출에서 args 옵션에 있는 값들 , 빌트-인 함수의 로컬 스코프,콜백)
2. 구현체
2.1. DalToki
DalToki는 JavaScript로 만들어진 TTeok의 구현체이다.현재 유일한 TTeok의 구현체이기도 하다.
표준안을 논의하면서 표준안 테스트용으로 제작되었기 때문에 내부 코드가 여러번 변경되어서 난잡하다.