巴克斯-若尔范式(BNF)
概念
BNF(以及 EBNF)是一种通过编写文法来定于语言的预发的方式。其广泛用于解释和驱动语法制导翻译。
BNF 通过一系列产生式规则来描述一种语言。
1 | //联系人信息的描述 |
这里的文法由两条产生式规则组成,每条产生式规则分别由名称和主体两部分组成。
主体部分描述了如何将此规则分解成一系列元素,这些元素可能是别的规则或是终结符。
文法的扩展
以联系人信息添加电话号码为例,存在如下信息和文法
1 | contact rparsons { |
- line 规则中的
|表示选择符
,表明 line 可以分为 email 或者 tel 两者情况。 - username 规则只用来解析一个标识符,为了更清晰地展现文法的这一意图。
多重性符号
解析表达式文法
| 符号 | 含义 | 例子 |
| —- | ———- | —————- | —– | — |
| | | 选择 | email | tel |
| * | 0 个或多个 | tel* |
| + | 1 个或多个 | email+ |
| ? | 可选 | fullname? |
| ~ | 直到 | ~’}’ |
| .. | 范围 | ‘0’..’9’ |
| / | 有序选择 | us_tel / raw_tel |