:

: (colon) — 콜론 정의 시작

:(colon)은 공백으로 구분된 name을 파싱해 "콜론 정의(colon definition)"라고 불리는 정의를 만들고, 컴파일 상태로 들어가 현재 정의를 시작하는 코어 단어예요.

출처: : — Forth 2012 Standard

본문

컴파일 (Compilation)

( C: "<spaces>name" -- colon-sys )

선행 공백 구분자를 건너뛰고 공백으로 구분된 name을 파싱해요. "콜론 정의"라고 불리는 name의 정의를 만들어요. 컴파일 상태로 들어가 현재 정의를 시작하고 colon-sys를 만들어요. 아래 주어진 시작 의미(initiation semantics)를 현재 정의에 추가해요. name의 실행 의미는 정의의 본문(body)에 컴파일된 단어들에 의해 결정돼요. 현재 정의는 그것이 끝날 때까지(또는 일부 시스템에서는 DOES>의 실행까지) 사전(dictionary)에서 찾을 수 없어야 해요.

시작 (Initiation)

( i*x* -- i*x* ) ( R: -- nest-sys )

호출 중인 정의에 대한 구현 의존 정보 nest-sys를 저장해요. 스택 효과 i*x*name에 대한 인자를 나타내요.

name 실행 (name Execution)

( i*x* -- j*x* )

정의 name을 실행해요. 스택 효과 i*x*j*x*는 각각 name에 대한 인자와 결과를 나타내요.

참조 (See)

  • 3.4.3.2 Interpretation semantics(해석 의미)
  • 3.4.1 Parsing(파싱)
  • 3.4.5 Compilation(컴파일)
  • 6.1.1250 DOES>
  • 6.1.2500 [
  • 6.1.2540 ]
  • 15.6.2.0470 ;CODE
  • A.6.1.0450 :

합리성 (Rationale)

전형적인 사용:

: name ... ;

Forth 83에서는 이 단어가 검색 순서를 바꾸도록 명시되어 있었어요. 이 명세는 이 표준에서 명시적으로 제거되었어요. 대부분의 경우 이는 영향이 없다고 믿지만, 많은 검색 순서를 허용하는 시스템은 Forth-83의 콜론 동작을 매우 바람직하지 않게 여겼어요. 콜론 자체가 컴파일러를 호출하지는 않는다는 점에 주목하세요. 콜론은 컴파일 상태를 설정해서 이후의 파싱 영역 단어들이 컴파일되도록 해요.

테스트 (Testing)

T{ : NOP : POSTPONE ; ; ->  }T
T{ NOP NOP1 NOP NOP2 ->  }T
T{ NOP1 ->  }T
T{ NOP2 ->  }T

다음은 사전 검색 순서를 테스트해요:

T{ : GDX   123 ;    : GDX   GDX 234 ; ->  }T
T{ GDX -> 123 234 }T

더 알아보기 (Learn more)

출처: : — Forth 2012 Standard