扩展巴科斯范式

扩展巴科斯范式

扩展巴科斯-瑙尔范式(EBNF, Extended Backus–Naur Form)是表达作为描述计算机编程语言和形式语言的正规方式的上下文无关文法的元语法(metalanguage)符号表示法 —— wikipedia。

白话就是定义的一种用来表示一种语言的语法形式的一种表示方法。

例子:

EBNF 定义

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
(* a simple program 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
PROGRAM DEMO1 
BEGIN
A0:=3;
B:=45;
H:=-100023;
C:=A;
D123:=B34A;
BABOON:=GIRAFFE;
TEXT:="Hello world!";
END.

1. 可用的符号表

用途 符号表示
定义 =
串接 ,
终止 ;
分隔 |
可选 [ … ]
重复 { … }
分组 ( … )
双引号 “ … “
单引号 ‘ … ‘
注释 (* … *)
特殊序列 ? … ?
除外 -

2. 符号表示意义

  1. , 符号

串接。连接字符串或者关键字的内容。
如:

1
2
zero = "0";
natural number = "1" , "2" , "3" , "4" , "5" , "6" , "7" , "8" , "9", zero;

natural number 将 zero 和 1-9 连接起来,可表示 0-9 之间的数

  1. | 符号

分隔符号,等价于
digit excluding zero = "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9" ; 意味着 digit excluding zero 可以是 1-9 中的任意自然数。

  1. [...] 符号

表示可选符号。与常规编程语言中的可选不太一样,此处可选还与次数有关。
如:

1
cc = 3 * ["A"], "C";

可表示的字符串

1
cc: C AC AAC AAAC
  1. {...} 符号

表示重复,与正则中的 . 意义一致,表可重复0次或多次。

如:

1
dd = {"A"}, "D";

可表示的字符串

1
dd: D AD AAD AAAD AAAAD etc.

评论

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×