1 범위
(1) 이 문서는 끼워 쓰는(embeddable) 스크립트 언어 Pinax 를 정한다. 무엇이 Pinax 프로그램으로 적합한지, 적합한 프로그램이 돌 때 무엇을 하는지, 적합하지 않은 프로그램을 처리기가 어떻게 거절하는지, 그리고 C 프로그램이 처리기를 어떻게 부르는지를 정한다.
(2) 이 문서가 정하는 것은 다음이다.
- 소스의 글자와 토큰(6절), 타입과 값(7절), 선언(8절), 낱말과 스택(9절), 제어(10절);
- 실패와 결함(11절), 메모리(12절), 모듈(13절), 작업(14절);
- 핵 낱말(15절), 표준 모듈(16절), 호스트 모듈(17절), C 함수 부르기(18절);
- 호스트 인터페이스(19절)와 명령
pnx(20절); - 부속서: 문법 전체(A), 진단 목록(B), 크기의 한계(C), 이 판에 없는 것(D).
(3) 이 문서가 정하지 않는 것은 다음이다.
- 처리기가 소스를 어떤 명령으로 옮기고 어떻게 실행하는가. 바이트코드의 모양과 실행 방식은 처리기의 일이다. 다만 19절이 정하는 호스트 인터페이스로 관찰할 수 있는 것은 이 문서가 정한다.
- 실행 속도와 메모리 사용량의 수치.
- 이 판에 없는 기능(부속서 D). 그것들은 이름만 남아 있거나(예약 낱말) 쓰면 거절된다.
(4) 이 문서는 처리기 하나를 기준으로 쓴 것이 아니다. 그러나 이 문서의 모든 예제는 같은 저장소의 구현(pnx, libpinax)으로 실제로 돌렸고, 실린 출력은 그때 받은 그대로다. 예제와 본문이 어긋나면 본문이 이긴다.
참고
Pinax 는 고정된 메모리 한 덩이 안에서 도는 스크립트 언어다. 쓰레기 수거기(garbage collector), 힙 할당, 포인터, 객체, 동적 타입, 예외가 없다. 표면은 타입이 있는 Forth 다 — 낱말 사이는 스택으로 값을 넘기고, 한 낱말 안에서는 이름을 쓴다. 이 문서의 나머지는 그 한 문장을 하나하나 풀어 정한 것이다.1.1 이 문서를 읽는 법
(5) 이 문서는 규칙을 정하는 문서다. Pinax 를 처음 배우는 사람은 매뉴얼부터 읽는 것이 쉽다. 이 문서는 매뉴얼이 “표준 9.3” 처럼 가리키는 자리에서 규칙을 정확히 확인할 때 쓴다.
(5a) 문서 끝의 색인은 용어마다 그것을 정의한 조항과 쪽을 가리킨다. 부속서 B 는 본문의 진단 메시지를 한곳에 모은다.
(6) 각 절은 다음 부분을 이 차례로 갖는다. 비어 있는 부분은 뺀다.
- 구문: 소스에 어떻게 적는가(EBNF, 부속서 A).
- 제약: 무엇이 적재 때 거절되는가. 제약마다 거절되는 예제와 그 메시지가 있다.
- 의미: 돌면 무엇을 하는가.
- 결함과 실패: 실행이 멈추는 경우와 낱말이 실패하는 경우.
- 진단: 거절할 때 처리기가 내는 메시지의 표.
- 예제: 실제로 돌린 프로그램과 그 출력. 예제는 규칙을 보이기 위한 것이고, 규칙은 본문이 정한다.
(7) 스택의 변화는 앞 → 뒤 로 적고, 맨 위를 오른쪽에 둔다: a b → b a 는 위의 두 값의 자리를 바꾼다는 뜻이다. “-여야 한다” 는 프로그램이 지킬 규칙이고, “처리기는 거절한다” 는 구현이 지킬 규칙이다. 단락 번호 (3a) 는 뒤에 끼워 넣은 단락이다. 한 번 쓴 번호는 바꾸지 않는다.