Основы языка

Лексика и структура исходного кода

Как имена, литералы, комментарии и переносы строк образуют исходный файл Топаза.

Обратитесь к этой странице, если отдельные строки файла .tpz выглядят правильно, но непонятно, где заканчивается один элемент программы и какие записи считаются именами или литералами. Топаз разрешает имена в Unicode и обычно считает завершённую строку завершённым элементом. Внутри скобок и после знака, явно требующего продолжения, выражение можно перенести без специального символа продолжения строки.

Начните с полного исходного файла

Сохраните код в lexical-layout.tpz:

TOPAZ
let ready = true
let archived = false
let missing = null
let 상태 = "ready"

let total =
    40 +
    2

print("{상태}: {ready}, {archived}, {missing}, {total}")

Проверьте и запустите файл:

BASH
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 сейчас недоступны.

Далее прочитайте Операторы и выражения о выражениях, создающих значения, и Типы о выводе и аннотациях. Если привычная запись отклоняется, откройте Запрещённые и отложенные формы.