族谱网 头条 人物百科

扩展巴科斯范式

2020-10-16
出处:族谱网
作者:阿族小谱
浏览:572
转发:0
评论:0
基本代码,如由终结符即可视字符、数字、标点符号、空白字符等组成的计算机程序的源代码。EBNF定义了把各符号序列分别指派到非终结符的产生规则:digitexcludingzero="1&quo

基本

代码,如由终结符即可视字符、数字、标点符号、空白字符等组成的计算机程序的源代码。

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;

其他增加和修改

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;BON:=GIRAFFE;TEXT:="Hello world!";END.

这个语言可以轻易的扩展上控制流,算术表达式和输入/输出指令。就可以开发出一个小的、可用的编程语言了。

使用了在标准中提议为正规表示的下列字符:

约定

1. 使用了如下约定:

扩展 BNF 每个元标识符都被写为用连字号连接起来的一个或多个字;

结束于“-symbol” 的元标识符是扩展 BNF 的终结符的名字。

2. 表示扩展 BNF 的每个操作符的正常字符和它所蕴涵的优先级(顶部为最高优先级)为:

3. 下列括号对超越正常优先级:

作为例子,下列语法规则展示了表达重复的设施:

这些规则定义的终结字符串如下:

有关工作

W3C使用一种不同的 EBNF来指定XML语法。

British Standards Institute 在1981年出版了一个 EBNF 标准: BS 6154。

IETF使用在 RFC 4234 中规定的扩充 BNF(ABNF)。

参见

扩充巴科斯范式

巴科斯范式

正则表达式

Spirit Parser Framework

Wirth 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.

本条目部分或全部内容出自以GFDL授权发布的《自由线上电脑词典》(FOLDOC)。


免责声明:以上内容版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。感谢每一位辛勤著写的作者,感谢每一位的分享。

——— 没有了 ———
编辑:阿族小谱
发表评论
写好了,提交
{{item.label}}
{{commentTotal}}条评论
{{item.userName}}
发布时间:{{item.time}}
{{item.content}}
回复
举报
点击加载更多
打赏作者
“感谢您的打赏,我会更努力的创作”
— 请选择您要打赏的金额 —
{{item.label}}
{{item.label}}
打赏成功!
“感谢您的打赏,我会更努力的创作”
返回

更多文章

更多精彩文章
打赏
私信

推荐阅读

· 巴科斯范式
发展历史约翰·巴科斯首次在ALGOL58中实现巴科斯范式。彼得·诺尔在ALGOL60之中,进一步发展它的概念并将它的符号加以简化,称其为巴科斯范式(BackusNormalForm)。但高德纳主张应称为巴科斯-诺尔范式(Backus–NaurForm),因为它不算是一种正规形式(Normalform)。介绍BNF规定是推导规则(产生式)的集合,写为:::=这里的是非终结符,而表达式由一个符号序选择或用指示选择的竖杠"|"分隔的多个符号序列构成,每个符号序列整体都是左端的符号的一种可能的替代。从未在左端出现的符号叫做终结符。参见八篇书(使用数学结构的梵语文法)扩充巴科斯范式(ABNF)扩展巴科斯范式(EBNF)GOLDBNF分析器GNUbisonGNU版本的Yacc正则表达式Wirth语法表示法1977提出的对BNF的一个替代者Yacc分析器生成器(与Lex预处理器一起使用)ANTLR用Ja...
· 扩充巴科斯范式
介绍一个ABNF规范是一些推导规则的集合,书写为:其中:“规则”是不区分大小写的非最终符号“定义”由定义该规则的一系列符号组成“注释”用于记录“CRLF”(回车、换行)用来结束规则名字是不区分大小写的:,,和都提及同一个规则。规则名字由一个字母以及后续的多个字母、数字和连字符(减号)组成。用尖括号(“”)包围规则名并不是必需的(如同它们在BNF里那样),但是它们可以用来在散文中界定规则名,以方便识别出规则名。最终值最终值由一个或多个数值字符指定。数值字符可按下面的方式指定:先是一个百分号“%”,紧跟着基数(b=二进制,d=十进制,x=十六进制),再其后是这个数值或数值串(用“.”来指示串联)。例如:“回车”可以用十进制的%d13或十六进制的%x0D来指定,而“回车换行”则可以用%d13.10来指定。字面文本是通过包含在在双引号(")中字符串来指定的。这些字符串是不区分大小写的,使用的字符集...
· 从书面范式到口头范式:论民间文艺学的范式转换与学科独立
【内容提要】传统民间文艺学尽管认识到民间文学是口头文学,却从来没有把民间文学当成口头文学看待和研究,而是首先把口头文学转化为书面文本,然后按书面文学的概念框架和学术范式进行研究,正是这种书面范式的积习,导致民间文艺学学科独立性的丧失。民俗学试图摆脱民间文艺学以书面文本为中心的书面范式,走向田野研究,但因为放弃了对文本的理解和对意义的追寻而使自己混迹于人类学和社会学,学科独立性愈发模糊。本文指出,惟有在走向田野的同时,以对民间口头文本的理解为中心,实现从书面范式、田野范式向口头范式的转换,才能真正确立民间文艺学和民俗学的学科独立地位。【关键词】民间文艺学民俗文化口头文学民间文化一学科独立已经成为中国民间文艺学从业者的心病,从北大歌谣运动算起,这门学科在中国尽管已经有八十多年的历史了,却从来没有获得一块真正属于自己的园地,在1949年后,它先是寄身中国语言文学的篱下,后又借居社会学的地盘,一直...
· 从书面范式到口头范式:论民间文艺学的范式转换与学科独立
【内容提要】传统民间文艺学尽管认识到民间文学是口头文学,却从来没有把民间文学当成口头文学看待和研究,而是首先把口头文学转化为书面文本,然后按书面文学的概念框架和学术范式进行研究,正是这种书面范式的积习,导致民间文艺学学科独立性的丧失。民俗学试图摆脱民间文艺学以书面文本为中心的书面范式,走向田野研究,但因为放弃了对文本的理解和对意义的追寻而使自己混迹于人类学和社会学,学科独立性愈发模糊。本文指出,惟有在走向田野的同时,以对民间口头文本的理解为中心,实现从书面范式、田野范式向口头范式的转换,才能真正确立民间文艺学和民俗学的学科独立地位。【关键词】民间文艺学民俗文化口头文学民间文化一学科独立已经成为中国民间文艺学从业者的心病,从北大歌谣运动算起,这门学科在中国尽管已经有八十多年的历史了,却从来没有获得一块真正属于自己的园地,在1949年后,它先是寄身中国语言文学的篱下,后又借居社会学的地盘,一直...
· 马尔科·范巴斯滕
生涯球员时代球会范巴斯滕出生于荷兰的乌得勒支,青年时代为阿贾克斯青年军成员。他于1982年首次于荷甲联赛上阵,并取得职业生涯中第一球。后来,阿贾克斯开始重用范巴斯滕,为攻击核心。在1982至1985年间各球季,他在联赛射入59球,协助球会赢得三次荷甲冠军;1983年赢得荷兰杯冠军,当届还是双料冠军。及后范巴斯滕于1984至1987年间,连续四季成为联赛神射手。这在足球史上是极罕见的。其后1985-1986年球季攻入37球,不仅是范巴斯滕在职业生涯之中最多的入球,更获得欧洲金靴奖。而在1987年中的欧洲优胜者杯决赛中“一箭定江山”,以1:0击败东德的莱比锡火车头,为球会得到14年以来的第一个欧洲冠军。1987年,范巴斯滕与路德·古利特一同转会至意甲的AC米兰,但因伤患关系,首季范巴斯滕只上阵联赛11场,入3球。至伤愈后AC米兰签入弗兰克·里杰卡尔德,与范巴斯滕以及路德·古利特成为“荷兰三剑客

关于我们

关注族谱网 微信公众号,每日及时查看相关推荐,订阅互动等。

APP下载

下载族谱APP 微信公众号,每日及时查看
扫一扫添加客服微信