Appearance
EBNF - 扩展巴科斯范式
以下是 EBNF 的部分语法(更详细的语法可以参考 Wiki):
| 符号 | 含义 |
|---|---|
= | 定义 |
, | 串接 |
* | 重复 |
; | 终止 |
| | 或 |
[ ... ] | 可选 |
{ ... } | 可选重复 |
( ... ) | 分组 |
" ... " | 文本 |
' ... ' | 文本 |
(* ... *) | 注释 |
? ... ? | 特殊序列 |
- | 排除 |
一种仅允许赋值的类似 Pascal 的编程语言可以在 EBNF 中定义如下:
EBNF
(* a simple program syntax in EBNF - Wikipedia *)
program = 'PROGRAM', white space, identifier, white space,
'BEGIN', white space,
{ assignment, ";", white space },
'END.' ;
identifier = alphabetic character, { alphabetic character | digit } ;
number = [ "-" ], digit, { digit } ;
string = '"' , { all characters - '"' }, '"' ;
assignment = identifier , ":=" , ( number | identifier | string ) ;
alphabetic character = "A" | "B" | "C" | "D" | "E" | "F" | "G"
| "H" | "I" | "J" | "K" | "L" | "M" | "N"
| "O" | "P" | "Q" | "R" | "S" | "T" | "U"
| "V" | "W" | "X" | "Y" | "Z" ;
digit = "0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9" ;
white space = ? white space characters ? ;
all characters = ? all visible characters ? ;1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
例如,语法正确的程序可以是:
Pascal
PROGRAM DEMO1
BEGIN
A:=3;
B:=45;
H:=-100023;
C:=A;
D123:=B34A;
BABOON:=GIRAFFE;
TEXT:="Hello world!";
END.1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
以下是一个重复表达式示例:
EBNF
aa = 'A';
bb = 3 * aa, 'B';
cc = 3 * [aa], 'C';
dd = {aa}, 'D';
ee = aa, {aa}, 'E';
ff = 3 * aa, 3 * [aa], 'F';
gg = {3 * aa}, 'G';1
2
3
4
5
6
7
2
3
4
5
6
7
以上规则定义的终结符如下:
Text
aa: A
bb: AAAB
cc: C AC AAC AAAC
dd: D AD AAD AAAD AAAAD etc.
ee: AE AAE AAAE AAAAE AAAAAE etc.
ff: AAAF AAAAF AAAAAF AAAAAAF
gg: G AAAG AAAAAAG etc.1
2
3
4
5
6
7
2
3
4
5
6
7