Обратитесь к этой странице, если отдельные строки файла .tpz выглядят
правильно, но непонятно, где заканчивается один элемент программы и какие
записи считаются именами или литералами. Топаз разрешает имена в Unicode и
обычно считает завершённую строку завершённым элементом. Внутри скобок и после
знака, явно требующего продолжения, выражение можно перенести без специального
символа продолжения строки.
Начните с полного исходного файла
Сохраните код в lexical-layout.tpz:
let ready = true
let archived = false
let missing = null
let 상태 = "ready"
let total =
40 +
2
print("{상태}: {ready}, {archived}, {missing}, {total}")Проверьте и запустите файл:
topaz check lexical-layout.tpz
topaz run lexical-layout.tpz
Результат:
ready: true, false, null, 42В пяти привязках показаны четыре семейства литералов: логические значения
true и false, отсутствующее значение null, строка и десятичные числа.
상태 — обычное имя. Ключевые слова, включая let, true, false и null,
пишутся по-английски, а собственные имена могут содержать буквы Unicode,
подчёркивание, цифры после первого символа и эмодзи.
Как перенос строки влияет на разбор
Каждая из первых четырёх привязок завершается в одной строке, поэтому перенос
отделяет следующий элемент верхнего уровня. Выражение total продолжается:
после = и + ещё требуется правая часть. Три строки образуют одно выражение.
В круглых и квадратных скобках, в фигурных скобках записи, а также в списках
параметров и аргументов переносы работают как пробелы. Обычный блок, тело
match и тело concurrent содержат список инструкций, поэтому завершённая
строка может закончить элемент. Если длинное выражение допускает сомнения,
заключите его в круглые скобки. Отступ помогает читателю, но структуру задают
разделители и правила продолжения.
| Задача | Предпочтительная запись |
|---|---|
| Завершить элемент верхнего уровня или инструкцию блока | Начать следующий элемент с новой строки |
| Перенести арифметику или конвейер | Оставить оператор в конце предыдущей строки |
| Разбить список аргументов или элементов коллекции | Делать переносы внутри его скобок |
| Явно показать группировку | Добавить круглые скобки |
Точку с запятой можно использовать как явный разделитель там, где допустимы
инструкции, но канонические примеры Топаза обходятся без неё. else на новой
строке всё равно продолжает соответствующий if или concurrent с тайм-аутом.
Имена, комментарии и строки
Имя начинается с буквы Unicode, _ или эмодзи; дальше разрешены и цифры
Unicode. Единственный символ _ не является обычным значением. В шаблоне это
пропуск, а в аргументах вызова внутри конвейера — заполнитель. Имя _internal
остаётся обычным идентификатором.
Однострочный комментарий начинается с //, блочный записывается как
/* ... */. Блочные комментарии не вкладываются. Целые и вещественные
литералы десятичны; другие основания и подчёркивания между цифрами не входят в
каноническую запись.
Строки в двойных кавычках поддерживают управляющие последовательности вроде
\n и интерполяцию {expression}. Для многострочного текста служат тройные
кавычки. Точный префикс пробелов и табуляций перед закрывающими кавычками
удаляется у каждой непустой строки. Топаз сохраняет последовательность
скаляров Unicode и не выполняет неявную нормализацию.
Частая ошибка
Не переносите бинарный + или - в начало строки, похожей на новую
инструкцию: там тот же знак может начать унарное выражение. Оставьте оператор
на предыдущей строке либо заключите всё выражение в круглые скобки.
К строке нельзя применять s[i], s.length или срез. Получите скаляры через
s.scalars(); этот выбор показан на странице
Строки и шаблоны.
Разбор всегда выбирает самый длинный допустимый токен, поэтому ..., ..,
..<, ?. и постфиксный ? различаются. Одинарные кавычки, символьные
литералы, вложенные блочные комментарии, прямые срезы строк, API кластеров
графем и неявная нормализация Unicode сейчас недоступны.
Далее прочитайте Операторы и выражения о выражениях, создающих значения, и Типы о выводе и аннотациях. Если привычная запись отклоняется, откройте Запрещённые и отложенные формы.