Decodal/doc/manual/souce/language/syntax.md

127 lines
2.2 KiB
Markdown

# 構文と字句
この章では、表層構文の方針をまとめる。
厳密な 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) で定義する。