Decodal/doc/manual/souce/language/syntax.md
2026-06-19 01:01:04 +09:00

2.3 KiB

構文と字句

この章では、表層構文の方針をまとめる。 厳密な EBNF は未確定であり、今後このファイルに詳細化する。

言語名と拡張子

プロジェクト名は Decodal とする。 正式な説明名は Deferred Constraint Data Language、略称は DCDL とする。 ファイル拡張子は .dcdl とする。

config.dcdl
schema.dcdl
service.dcdl

Module source

ファイル全体は単一の式として書ける。 また、top-level に field 定義列を書いた場合は、暗黙の object として扱う。

host = String;
port = Int default 8080;

上の source は以下と同じ意味である。

{
    host = String;
    port = Int default 8080;
}

コメント

コメントは # から行末までとする。

# comment
host = "127.0.0.1"; # trailing comment

セミコロン

オブジェクトフィールド、let 束縛、match 分岐はセミコロンで区切る。 末尾セミコロンは許可する。

{
    host = "127.0.0.1";
    port = 8000;
}

識別子

識別子は ASCII 英字で始まり、ASCII 英数字または _ を続けられる。 慣習としては lower_snakelowerCamelUpperCamel を使える想定とする。

my_config
mkConfig
IPv4Address

パス参照

ドットによるフィールド参照を許可する。

config.host
config.feature_hoge.enable

オブジェクト内では、ドットパスによるフィールド定義も許可する。

{
    feature_hoge.enable = false;
}

これは以下と同じ構造を表す。

{
    feature_hoge = {
        enable = false;
    };
}

予約語候補

以下は予約語または予約構文として扱う候補である。

let
in
match
import
default
true
false
rec

rec の扱いは未確定である。

演算子

主要な演算子は以下である。

+ - * /       四則演算
++            配列結合
! && ||       論理演算
== != < <= > >= 比較式
&             制約合成
//            patch 合成
default       fallback 指定
=>            関数
.             フィールド参照 / ドットパス定義

演算子の優先順位は 合成演算子 で定義する。