Лексическая структура

Описывает идентификаторы, литералы, разделители, ключевые слова и имена типов.

Wave Foundation

идентификатор

Идентификаторы именуют переменные, функции, типы и поля. Имя чувствительно к регистру и может содержать любую комбинацию букв, цифр и _. Числа нельзя использовать в первой букве. Символы Unicode также можно использовать в идентификаторах.

var request_count: i64 = 0;
var 이름: str = "Wave";

В реальных проектах рекомендуется использовать единое соглашение об именах для обеспечения совместимости инструментов и возможности поиска.

Предложения и разделители

Большинство операторов объявлений и выражений заканчиваются на ;. Операторы с телом, такие как функции, условные операторы, операторы цикла и структуры, используют блок { ... }.

var answer: i32 = 42;

fun double(value: i32) -> i32 {
    return value * 2;
}

буквальный

var integer: i32 = 42;
var decimal: f64 = 3.14;
var text: str = "Wave";
var letter: char = 'W';
var enabled: bool = true;
var address: ptr<u8> = null;

Вы можете использовать целые числа, числа с плавающей запятой, строки, символы, логические значения и литералы null. Используйте null для значений указателя.

Ключевые слова и имена типов

Основные ключевые слова, используемые в грамматике Wave, следующие.

pub, fun, extern, export, type, enum, static, var, deref, const, if, else, proto, struct, while, for, in, out, clobber, as, asm, import, return, continue, print, input, println, match, break, true, false, null.

Имена встроенных типов включают bool, char, byte, str, целочисленные типы и типы с плавающей запятой, ptr и array. Указатели записываются в форме ptr<T>, а массивы фиксированной длины — в форме array<T, N>.

Строки и символы escape

обозначение смысл
\n LF Разрыв строки
\r CR
\t вкладка
\\ обратная косая черта
\" двойные кавычки
\xNN Один байт указан как две шестнадцатеричные цифры.

Общие строковые символы сохраняются как UTF-8. Поскольку \xNN сохраняет один байт, нет никакой гарантии, что вся строка является допустимой UTF-8. NUL (включая \x00) внутри строкового литерала является ошибкой компиляции. Для данных, содержащих нули, используйте массив байтов и длину.

char Литерал должен соответствовать 8-битному значению. Символы, выходящие за пределы этого диапазона, например '한', являются ошибками. Она отличается от строки "한".

LF, CRLF и CR по отдельности в исходном коде обрабатываются как один логический разрыв строки. Это правила расположения источника и завершения комментариев, которые не означают, что они изменяют фактические байты данных файла.

Дополнительные имена грамматик включают variant, async и await, а асинхронное значение выражается как Future<T>. Вышеуказанный независимый блок объявлений var представляет собой фрагмент кода внутри функции.

класс строки · Комментарии

Пример намеренного провала

Если вы запустите программу, указанную ниже check, должна возникнуть внутренняя ошибка NUL. Если вам нужно 0 байтов, используйте массив байтов [97, 0, 98].

fun main() {
    var text: str = "a\x00b";
}

Символьный литерал ниже также превышает 8-битный диапазон, поэтому это ошибка компиляции. Чтобы представить строку UTF-8, используйте str и двойные кавычки.

fun main() {
    var letter: char = '한';
}