网站导航栏模板怎么做,crm厂商排名,广告联盟怎么做,作it去外包公司好吗2019独角兽企业重金招聘Python工程师标准 扩展巴科斯范式 维基百科#xff0c;自由的百科全书 扩展巴科斯-瑙尔范式(EBNF)是表达作为描述计算机编程语言和形式语言的正规方式的上下文无关文法的元语法符号表示法。它是基本巴科斯范式(BNF)元语法符号表示法的一种… 2019独角兽企业重金招聘Python工程师标准 扩展巴科斯范式 维基百科自由的百科全书 扩展巴科斯-瑙尔范式(EBNF)是表达作为描述计算机编程语言和形式语言的正规方式的上下文无关文法的元语法符号表示法。它是基本巴科斯范式(BNF)元语法符号表示法的一种扩展。 它最初由尼古拉斯·沃斯开发最常用的 EBNF 变体由标准特别是 ISO-14977 所定义。 目录 [隐藏] 1 基本2 依据 ISO 的扩展3 扩展 BNF 的动机4 其他增加和修改5 另一个例子6 约定7 有关工作8 参见9 引用10 外部链接 [编辑]基本 代码如由终结符即可视字符、数字、标点符号、空白字符等组成的计算机程序的源代码。 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 } ; 可按 BNF-风格定义为: number digit | number digit; [编辑]其他增加和修改 EBNF 排除了 BNF 的一些缺陷: BNF 为自身使用了符号 (, , |, ::)。当它们出现在要定义的语言中的时候BNF 不能不加以修改或解释的使用。BNF-语法在一行中只表示一个规则。EBNF 解决了这些问题: 终结符被严格的包围在引号 (... 或 ...) 中。给非终结符的尖括号 (...)可以省略。通常使用终止字符分号结束一个规则。进一步还提供了定义重复次数排除法选择(比如除了引号的所有字符)和注释等的增强机制。 不管所有这些增强EBNF 在能定义的语言的意义上不比 BNF 更强大。在原理上用 EBNF 定义的任何文法都可以用 BNF 表达。但是经常导致可观的更多规则的表示。 EBNF 已经被ISO用代码 ISO/IEC 14977:1996(E) 标准化了。 在某些场合任何扩展的 BNF 都被称为 EBNF。例如 W3C 使用 one EBNF 来规定 XML。 [编辑]另一个例子 只允许赋值的简单编程语言可以用 EBNF 定义为: (* 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 ? ; 一个语法上正确的程序: PROGRAM DEMO1
BEGINA0:3;B:45;H:-100023;C:A;D123:B34A;BABOON:GIRAFFE;TEXT:Hello world!;
END. 这个语言可以轻易的扩展上控制流算术表达式和输入/输出指令。就可以开发出一个小的、可用的编程语言了。 使用了在标准中提议为正规表示的下列字符: 用途符号表示定义串接,终止 ;分隔|可选[ ... ]重复{ ... }分组( ... )双引号 ... 单引号 ... 注释(* ... *)特殊序列 ? ... ?除外- [编辑]约定 1. 使用了如下约定: 扩展 BNF 每个元标识符都被写为用连字号连接起来的一个或多个字结束于“-symbol” 的元标识符是扩展 BNF 的终结符的名字。2. 表示扩展 BNF 的每个操作符的正常字符和它所蕴涵的优先级(顶部为最高优先级)为: * repetition-symbol
- except-symbol
, concatenate-symbol
| definition-separator-symboldefining-symbol
; terminator-symbol 3. 下列括号对超越正常优先级: ´ first-quote-symbol first-quote-symbol ´second-quote-symbol second-quote-symbol
(* start-comment-symbol end-comment-symbol *)
( start-group-symbol end-group-symbol )
[ start-option-symbol end-option-symbol ]
{ start-repeat-symbol end-repeat-symbol }
? special-sequence-symbol special-sequence-symbol ? 作为例子下列语法规则展示了表达重复的设施: 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}, D; 这些规则定义的终结字符串如下: 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: D AAAD AAAAAAD etc. [编辑]有关工作 W3C 使用一种不同的 EBNF 来指定 XML 语法。British Standards Institute 在1981年出版了一个 EBNF 标准: BS 6154。IETF 使用在 RFC 4234 中规定的扩充 BNF (ABNF)。[编辑]参见 扩充巴科斯范式巴科斯范式正则表达式Spirit Parser FrameworkWirth Syntax Notation[编辑]引用 Niklaus Wirth: What can we do about the unnecessary diversity of notation for syntactic definitions? CACM, Vol. 20, Issue 11, November 1977, pp. 822-823.Roger S. Scowen: Extended BNF — A generic base standard. Software Engineering Standards Symposium 1993.The International standard (ISO 14977) that defines the EBNF is now freely available aszipped pdf file.[编辑]外部链接 Article EBNF: A Notation to Describe Syntax (PDF) by Richard E. Pattis describing the functions and syntax of EBNFArticle BNF and EBNF: What are they and how do they work? by Lars Marius GarsholArticle The Naming of Parts by John E. SimpsonISO/IEC 14977 : 1996(E)RFC 4234 - Augmented BNF for Syntax Specifications: ABNFBNF/EBNF variants - a table by Pete Jinks comparing several syntaxes.Create syntax diagrams from EBNF本文全部或部分内容来自以GFDL授权发布的《自由线上电脑词典》FOLDOC。 转载于:https://my.oschina.net/zengsai/blog/4642