.tpz 소스 파일의 구문 종결 위치나 식별자 및 리터럴 표기 방식이 모호할 때 본 문서를 참고하세요. 토파즈는 유니코드 식별자를 지원하며, 개행 하나는 일반적으로 하나의 완전한 구문을 구분합니다. 소괄호나 대괄호 내부에서는 표현식이 다음 줄로 이어서 작성됩니다. 추가 피연산자가 필요한 연산자 뒤에서도 표현식이 계속 연결되어 해석됩니다. 명시적인 줄 연장 문자는 사용하지 않습니다.
완전한 소스 파일부터 실행하기
다음 코드를 lexical-layout.tpz로 저장하세요.
let 준비 = true
let 보관 = false
let 누락 = null
let 상태 = "ready"
let 합계 =
40 +
2
print("{상태}: {준비}, {보관}, {누락}, {합계}")검사한 다음 실행합니다.
topaz check lexical-layout.tpz
topaz run lexical-layout.tpz출력은 다음과 같습니다.
ready: true, false, null, 42위 예제는 바인딩 다섯 개와 리터럴 계열 네 가지를 보여 줍니다. 불리언 true·false, 값이 없음을 나타내는 null, 문자열, 10진 정수입니다. 상태는 일반 식별자입니다. let, true, false, null 같은 키워드는 영문 표기를 그대로 사용합니다. 반면 직접 정의하는 식별자에는 유니코드 문자·밑줄·이모지를 사용할 수 있으며, 첫 글자 뒤에는 숫자도 포함할 수 있습니다.
파서가 줄바꿈을 읽는 방식
앞의 바인딩 네 개는 각 줄에서 구문이 완결되므로 개행이 최상위 항목을 구분합니다. 반면 합계 바인딩은 =와 + 연산자가 줄 끝에 위치합니다. 우항에 값이 더 결합되어야 하므로 구문이 완결되지 않아 세 줄이 하나의 표현식을 이룹니다.
소괄호·대괄호·레코드 중괄호·매개변수 목록은 모두 구분자로 둘러싸인 목록 구문입니다. 이 내부에서는 개행이 공백처럼 작동합니다. 일반 블록과 match 본문, concurrent 본문은 문장 목록에 해당하며, 완결된 줄이 하나의 항목을 종결할 수 있습니다. 긴 표현식의 해석이 조금이라도 모호하면 들여쓰기에 의존하지 말고 소괄호로 묶으세요. 들여쓰기는 가독성을 위한 요소일 뿐이며, 실제 구문 구조는 구분자와 연산자 결합 규칙이 결정합니다.
| 하려는 일 | 권장 표기 |
|---|---|
| 완결된 최상위 항목이나 블록 문장 끝내기 | 다음 항목을 새 줄에서 시작 |
| 산술식이나 파이프라인 이어 쓰기 | 앞줄 끝에 연산자를 남김 |
| 인수나 컬렉션 목록을 여러 줄로 쓰기 | 목록 구분자 안에서 줄바꿈 |
| 묶이는 범위를 확실히 드러내기 | 전체 표현식을 소괄호로 묶음 |
문장을 작성하는 위치에서는 세미콜론을 구문 구분자로 명시할 수 있습니다. 다만 표준 토파즈 예제에서는 세미콜론을 생략합니다. if 구문이나 시간 제한이 지정된 concurrent 블록 뒤에서 줄을 바꾸고 else를 작성해도 동일한 표현식으로 이어서 해석됩니다.
이름, 주석, 문자열
식별자는 유니코드 문자·_·이모지로 시작합니다. 그 뒤에는 유니코드 숫자도 포함할 수 있습니다. 단독으로 사용한 _는 일반 값이 아닙니다. 패턴 매칭에서는 해당 값을 무시하는 와일드카드이고, 파이프라인 호출 인수에서는 자리표시자 역할을 합니다. _internal처럼 뒤에 문자가 덧붙으면 일반 식별자로 취급됩니다.
한 줄 주석은 //로 작성합니다. 블록 주석은 /* ... */로 작성하며 중첩을 지원하지 않습니다. 정수와 부동소수점 리터럴은 10진 표기를 따릅니다. 다른 진법 표현이나 숫자 사이의 밑줄 구분자는 정본 표기가 아닙니다.
큰따옴표 문자열은 \n 같은 이스케이프 시퀀스와 {expression} 보간을 지원합니다. 여러 줄 문자열은 큰따옴표 세 개로 감쌉니다. 닫는 구분자 앞에 위치한 공백과 탭 문자가 기준이 되며, 빈 줄이 아닌 각 행에서 정확히 그만큼의 들여쓰기를 제거합니다. 토파즈는 유니코드 스칼라 순서를 원형 그대로 보존하며 암묵적 정규화를 수행하지 않습니다.
흔한 실수 고치기
새 문장처럼 보이는 줄의 맨 앞에 이항 연산자 +나 -를 두지 마세요. 해당 토큰은 단항 연산자로 해석되어 줄을 시작할 수도 있습니다. 연산자는 앞줄 끝에 남기세요. 아니면 표현식 전체를 소괄호로 묶으세요. 그러면 의미가 명확해집니다.
문자열에는 텍스트[i], 텍스트.length, 슬라이스 구문을 직접 사용할 수 없습니다. 스칼라 값이 필요하면 텍스트.scalars()를 사용하세요. 문자열과 템플릿에서 이 설계 선택에 대한 실행 예제를 볼 수 있습니다.
어휘 분석기는 가장 긴 유효 표기를 우선 선택합니다. 이에 따라 ..., .., ..<, ?., 후위 ?가 서로 구분됩니다. 작은따옴표 문자열·문자 리터럴·중첩 블록 주석·문자열 직접 슬라이스·문자소 클러스터 API·암묵적 유니코드 정규화 기능은 현재 제공되지 않습니다.
값을 생성하는 표현식은 연산자와 표현식, 추론과 타입 표기는 타입에서 이어서 보세요. 익숙한 표기가 거부되면 금지·유예 형식을 확인하세요.