扩展巴科斯范式

扩展巴科斯-瑙尔范式(EBNF, Extended Backus–Naur Form)是表达作为描述计算机编程语言和形式语言的正规方式的上下文无关文法的元语法(metalanguage)符号表示法。它是基本巴科斯范式(BNF)元语法符号表示法的一种扩展。
它最初由尼克劳斯·维尔特开发，最常用的EBNF 变体由标准，特别是ISO-14977 所定义。

基本

扩展巴科斯范式是一种表达形式语言文法的代码，如由终结符即可视字符、数字、标点符号、空白字符等组成的计算机程序的源代码。
EBNF 定义了把各符号序列分别指派到非终结符的产生规则:
digit excluding zero = "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9" ;digit                = "0" | digit excluding zero ;
这个产生规则定义了在这个指派的左端的非终结符digit。竖杠表示可供选择，而终结符被引号包围，最后跟着分号作为终止字符。所以 digit 是一个"0" 或可以是"1 或 2 或 3 直到 9 的一个digit excluding zero"。
产生规则还可以包括由逗号分隔的一序列终结符或非终结符:
twelve                          = "1" , "2" ;two hundred one                 = "2" , "0" , "1" ;three hundred twelve            = "3" , twelve ;twelve thousand two hundred one = twelve , two hundred one ;
可以省略或重复的表达式可以通过花括号{ ... } 表示:
natural number = digit excluding zero , { digit } ;
在这种情况下，字符串1, 2, ...,10,...,12345,... 都是正确的表达式。要表示这种情况，于花括号内设立的所有东西可以重复任何次，包括根本不出现。
可选项可以通过方括号[ ... ] 表示:
integer = "0" | [ "-" ] , natural number ;
所以 integer 是一个零(0)或可能前导可选的负号的一个自然数。
EBNF 还包括描述指定次数的重复，和排除产生式的某部分或向EBNF 文法插入注释的语法。

依据 ISO 的扩展

依据 ISO 14977 标准，提供了两个设施来扩展EBNF。其一是在EBNF 文法部分的特殊序列，它是在问号包围内的任意文本，其解释超出了EBNF 标准的范围。例如，空格字符可以用如下规则定义:
space = ? US-ASCII character 32 ?;
其二利用圆括号在EBNF 中不能放置到紧随标识符之后的事实。下列不是有效的EBNF:
something = foo ( bar );
所以 EBNF 的扩展可以使用这种表示法。例如，在 Lisp 文法中，函数应用可以用如下规则定义:
function application = list( symbol , [ { expression } ] );

扩展 BNF 的动机

BNF 有着可选项和重复不能直接表达的问题。作为替代，它们需要利用中介规则或两选一规则，对于可选项，定义要么是空的要么是可选的产生式的规则，对于重复，递归的定义要么是被重复的产生式要么是自身的规则。同样的构造仍可用在EBNF 中。
可选项:
signed number = [ sign , ] number ;
可按BNF-风格定义为:
signed number = sign , number | number ;
或
signed number = optional sign , number ;optional sign , = ε | sign , ; (* 使用 ε 来更清晰的指示空产生式*)
重复:
number = { digit } digit ;
可按BNF-风格定义为:
number = digit | number digit;