# Mermaid 鉄道図のチートシート

文法の規則を、描いてみたもの。

## 規則

規則は名前、等号、定義で、半角セミコロンで終わります。terminal はリテラル、nonterminal は別の規則です。

```mermaid
railroad-beta
    rule = sequence(terminal("a"), nonterminal("other")) ;
    other = terminal("b") ;
```

![規則 2 つの鉄道図。rule が a と other を順に、other が b を表します。](/diagrams/railroad/basic.svg)

## 選択

choice は候補を角括弧に入れます。規則そのものを choice と呼ぶことはできません。その名前は埋まっています。

```mermaid
railroad-beta
    alt = choice(terminal("a"), terminal("b")) ;
```

![規則 1 つ（alt）の鉄道図。a か b のどちらかを提示します。](/diagrams/railroad/choice.svg)

## 省略できる部分

optional は省略してよい部分を包みます。

```mermaid
railroad-beta
    rule = sequence(optional(nonterminal("tail")), terminal("head")) ;
    tail = terminal("t") ;
```

![規則 1 つの鉄道図。最初の部分 tail が省略可能で、2 つ目が head です。](/diagrams/railroad/optional.svg)

## 繰り返し

oneOrMore は 1 つ以上、zeroOrMore は 0 個でもかまいません。どちらも繰り返す部分を包みます。

```mermaid
railroad-beta
    digits = oneOrMore(terminal("0")) ;
    words = zeroOrMore(terminal("x")) ;
```

![2 つの鉄道図が並んでいます。digits は 0 を少なくとも 1 回、words は x を任意回数だけ繰り返します。](/diagrams/railroad/repeat.svg)

## Mernyx で描いてみる

.mmd ファイルを開いて、キャンバスでノードを動かしてみてください。ソースコードもついてきます。macOS ネイティブで、ブラウザは介在しません。
