# 構文と字句 この章では、表層構文の方針をまとめる。 厳密な EBNF は未確定であり、今後このファイルに詳細化する。 ## 言語名と拡張子 プロジェクト名は **Decodal** とする。 正式な説明名は **Deferred Constraint Data Language**、略称は **DCDL** とする。 ファイル拡張子は `.dcdl` とする。 ```text config.dcdl schema.dcdl service.dcdl ``` ## Module source ファイル全体は単一の式として書ける。 また、top-level に field 定義列を書いた場合は、暗黙の object として扱う。 ```dcdl host = String; port = Int default 8080; ``` 上の source は以下と同じ意味である。 ```dcdl { host = String; port = Int default 8080; } ``` ## コメント コメントは `#` から行末までとする。 ```dcdl # comment host = "127.0.0.1"; # trailing comment ``` ## セミコロン オブジェクトフィールド、let 束縛、match 分岐はセミコロンで区切る。 末尾セミコロンは許可する。 ```dcdl { host = "127.0.0.1"; port = 8000; } ``` ## 識別子 識別子は ASCII 英字で始まり、ASCII 英数字または `_` を続けられる。 慣習としては `lower_snake`、`lowerCamel`、`UpperCamel` を使える想定とする。 ```dcdl my_config mkConfig IPv4Address ``` ## パス参照 ドットによるフィールド参照を許可する。 ```dcdl config.host config.feature_hoge.enable ``` オブジェクト内では、ドットパスによるフィールド定義も許可する。 ```dcdl { feature_hoge.enable = false; } ``` これは以下と同じ構造を表す。 ```dcdl { feature_hoge = { enable = false; }; } ``` ## 予約語候補 以下は予約語または予約構文として扱う候補である。 ```text let in match import default true false rec ``` `rec` の扱いは未確定である。 ## 演算子 主要な演算子は以下である。 ```text & 制約合成 // patch 合成 default fallback 指定 => 関数 . フィールド参照 / ドットパス定義 ``` 演算子の優先順位は未確定である。 詳細は [合成演算子](./operators.md) で定義する。