語彙構造

識別子、リテラル、区切り文字、キーワード、タイプ名を記述します。

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 正確に2桁の16進数で指定された1バイト

通常の文字列文字はUTF-8として保存されます。 \xNNは1バイトを保持するため、文字列全体が有効なUTF-8であるという保証はありません。文字列リテラルの内部NUL(\x00を含む)はコンパイルエラーです。 0 を含むデータにはバイト配列と長さを使用します。

charリテラルは8ビット値にする必要があります。 '한'のように、その範囲を超える文字はエラーです。文字列"한"とは異なります。

ソースのLF、CRLF、単独CRは、それぞれ1つの論理改行として扱います。これはソースの場所とコメントの終了に関する規則であり、ファイルデータの実際のバイトを変更するという意味ではありません。

追加の文法名として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 = '한';
}