Обратитесь к этой странице, если отдельные строки файла .tpz выглядят корректно, но неясно, где заканчивается элемент программы и какие записи относятся к именам или литералам. Топаз поддерживает имена в Unicode и обычно трактует отдельную строку как завершённый элемент. Внутри скобок, а также после оператора, явно требующего продолжения, выражение можно переносить без специального символа продолжения строки.
Начните с полного исходного файла
Сохраните код в 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, строка и десятичные числа. состояние — обычное имя. Ключевые слова, включая let, true, false и null, записываются на английском языке, тогда как пользовательские имена могут содержать символы Unicode, знак подчёркивания, цифры (начиная со второго символа) и эмодзи.
Как перенос строки влияет на разбор
Каждое из первых четырёх привязок располагается в одной строке, поэтому перенос отделяет следующий элемент верхнего уровня. Выражение итого продолжается. После = и + требуется правая часть. В результате три строки образуют одно выражение.
В круглых, квадратных и фигурных скобках записи, а также в списках параметров и аргументов переносы строк эквивалентны пробелам. Обычный блок, тело match и тело concurrent состоят из списка инструкций, поэтому завершённая строка может завершать элемент. Если длинное выражение вызывает сомнения, заключите его в круглые скобки. Отступы облегчают чтение, однако структуру определяют разделители и правила переноса.
| Задача | Предпочтительная запись |
|---|---|
| Завершить элемент верхнего уровня или инструкцию блока | Начать следующий элемент с новой строки |
| Перенести арифметическое выражение или конвейер | Оставить оператор в конце предыдущей строки |
| Разбить список аргументов или элементов коллекции | Выполнять переносы внутри скобок |
| Явно показать группировку | Добавить круглые скобки |
Точку с запятой можно использовать как явный разделитель в местах, где допустимы инструкции, однако канонические примеры Топаза обходятся без неё. else на новой строке в любом случае продолжает соответствующую конструкцию if или concurrent с тайм-аутом.
Имена, комментарии и строки
Имя начинается с буквы Unicode, символа _ или эмодзи. В последующих позициях допускаются также цифры Unicode. Одиночный символ _ не представляет собой обычное значение. В сопоставлении с шаблоном он обозначает пропуск, а в аргументах вызова внутри конвейера — плейсхолдер. Имя _internal при этом остаётся обычным идентификатором.
Однострочные комментарии начинаются с //, а блочные записываются как /* ... */. Блочные комментарии не могут быть вложенными. Целые и вещественные литералы являются десятичными. Использование других систем счисления и символов подчёркивания между цифрами не входит в каноническую запись.
Строки в двойных кавычках поддерживают управляющие последовательности вроде \n и интерполяцию {expression}. Для многострочного текста используются тройные кавычки. Префикс из пробелов и табуляций перед закрывающими кавычками удаляется у каждой непустой строки. Топаз сохраняет последовательность скаляров Unicode и не выполняет неявную нормализацию.
Частая ошибка
Не переносите бинарный + или - в начало строки, напоминающей новую инструкцию. В этой позиции тот же знак может интерпретироваться как унарный оператор. Оставьте оператор на предыдущей строке либо заключите всё выражение в круглые скобки.
К строкам нельзя применять s[i], s.length или срез. Получите скаляры с помощью s.scalars(). Это решение подробно описано на странице Строки и шаблоны.
Лексический анализатор всегда выбирает самый длинный допустимый токен, поэтому ..., .., ..<, ?. и постфиксный ? различаются. Одинарные кавычки, символьные литералы, вложенные блочные комментарии, прямые срезы строк, API кластеров графем и неявная нормализация Unicode на данный момент недоступны.
Далее прочитайте Операторы и выражения о выражениях, вычисляющих значения, и Типы о выводе типов и аннотациях. Если привычный синтаксис отклоняется анализатором, откройте Запрещённые и отложенные формы.