# Mermaid 铁路图速查表

一条文法规则，画出来。

## 一条规则

规则是名字、等号和定义，以分号结尾。terminal 是字面量，nonterminal 则是另一条规则。

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

![一张有两个规则的铁路图：规则 rule 依次跑 a 和 other，other 则是 b。](/diagrams/railroad/basic.svg)

## 一个选择

choice 把候选放在方括号里。规则本身不能叫 choice——这个名字被占用了。

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

![一张只有一条规则 alt 的铁路图，它给出 a 或 b 两种可能。](/diagrams/railroad/choice.svg)

## 一个可选的部分

optional 把一段可以省掉的内容包起来。

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

![一张只有一条规则的铁路图，它的第一部分 tail 是可选的，第二部分是 head。](/diagrams/railroad/optional.svg)

## 重复

oneOrMore 至少要有一个，zeroOrMore 一个也可以没有。两者都把要重复的那部分包起来。

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

![并排的两张铁路图：digits 重复 0 至少一次，words 重复 x 任意多次。](/diagrams/railroad/repeat.svg)

## 在 Mernyx 里画出来

打开一个 .mmd 文件，在画布上挪一个节点，源码跟着走。macOS 原生，不经过浏览器。
