Topazdocs
Политика языка

Лексика и структура строк

Каноническая грамматика, семантика, ограничения и отложенные границы: Лексика и структура строк.

Лексер принимает Unicode-идентификаторы как обычный исходный текст, сохраняет английское написание ключевых слов и точную последовательность скаляров. Затем правила layout решают, разделяет ли перевод строки элементы или продолжает выражение.

Политика

Идентификатор начинается с буквы Unicode, подчёркивания или emoji; далее разрешены те же символы и цифры Unicode. Одиночный _ оставлен для wildcard и placeholder конвейера. Ключевые слова нельзя связывать, а loop, set и map контекстны только в точных головах грамматики. Правило longest match различает ..., .., ..<, ?. и постфиксный ?.

Определённое поведение

Строки — неизменяемые последовательности скаляров Unicode без неявной нормализации. Двойные кавычки поддерживают фиксированные escape и интерполяцию {expression}. Тройные кавычки снимают точный префикс пробелов/табуляций перед закрывающим разделителем, отклоняют несовпадающие непустые строки и не включают первый немедленный перевод строки. В separator-контексте перевод строки завершает полный элемент, если delimiter mode или continuation-токен не продолжает его.

Ограничения и явный отказ

Числовые литералы десятичны; другие основания и разделители-подчёркивания не каноничны. Одинарные кавычки и символьные литералы запрещены, блочные комментарии не вложены, _ нельзя читать как значение. Для строки запрещены s[i], s.length и срезы. Точка с запятой допустима как разделитель, но канонические примеры её не используют.

Отложенная граница

Операции с графемами, прямые срезы строк, неявная нормализация Unicode, дополнительные числовые литералы, вложенные блочные комментарии и новые теги шаблонов отложены. Доступ к скалярам явный через s.scalars().

Пример

TOPAZ
function 인사하기(이름: string) -> string {
    let message = "안녕하세요, {이름}님!"
    return message
}

let 사용자 = "토파즈"
print(인사하기(사용자))

Связанные правила