介绍

扩展巴科斯-瑙尔范式(Extended Backus–Naur Form,EBNF)是一种用于描述计算机编程语言等正式语言的与上下文无关语法的元语法(metasyntax)符号表示法。简而言之,它是一种描述语言的语言。它是基本巴科斯范式(BNF)元语法符号表示法的一种扩展。

最初由尼克劳斯·维尔特开发,最常用的EBNF变体由标准是 ISO-14977 所定义。

EBNF的基本语法形式如下,这个形式也被叫做production:

左式(LeftHandSide) = 右式(RightHandSide).

左式也被叫做 非终端符号(non-terminal symbol),而右式则描述了其的组成。

终端符号与非终端符号

终端符号(Terminal symbols):形成所描述的语言的最基本符号。所描述语言的标点符号(不是EBNF自己的)会被左右加引号(它们也是终端符号),而其他终端符号会用粗体(这边因不方便加粗,就不加粗了)打印。

非终端符号:是用于描述语法的变量,它必须被定义在一个production中。或说,它们必须出现在某个地方的production的左式中。

符号

下表是 推荐标准ISO/IEC 14977 所定义的符号:

约定

1 .使用了如下约定:

EBNF的每个元标识符(meta-identifier)都被写为用连字符(“-“,hyphens)连接起来的一个或多个单词;

以 “-symbol” 结束的元标识符是EBNF的终端符号。

2 .用普通字符表示的EBNF操作符按照优先级(顶部为最高优先级)排序为:

*repetition-symbol(重复符)

-except-symbol(除去符)

, concatenate-symbol(连接符)

| definition-separator-symbol

= defining-symbol(定义符)

; terminator-symbol(结束符)

. terminator-symbol(结束符)

3 .以下的括号对(bracket pairs)能够改变优先级,括号对间也有优先级(顶部为最高优先级):

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

扩展

除了标准的定义,在FREESCALE文档中还使用了以下约定:

计数重复:任何由”{“和”}”括起来并后跟一个上标x的东西必须准确地重复出现x次。x也可能是一个非终端字符。比如下例中,Stars相当于四个星号:

Stars = {“*”}4.

字节数:见到任何紧跟着由一对中括号“[”和“]”括起来的数字n的标识符,都应该认为它是一个高位字节在前的二进制数,并且字节数为n,如:

Struct=RefNo FilePos[4].

在一些例子中,我们会使用””括起来一些文本。这些文本是 元文本(meta–literal),它们的位置应该被它们所描述的东西替代掉,如,对于 < any char >,它的位置可以插入任意字符。

示例

以下提供一些示例以直观的理解EBNF。

digit excluding zero = "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9" ;

digit = "0" | digit excluding zero ;

natural number = digit excluding zero, { digit } ;

integer = "0" | [ "-" ], natural number ;

digit excluding zero 可以是 1到9任意一个字符,digit则扩展为0到9任意一个字符。

natural number可以是1、2、…、10、…、12345、…,因为{}代表重复任意次,包括0次。

integer则可以是0或者可能带个负号的自然数。

这是用EBNF描述的EBNF自身语法:

Production = NonTerminal "=" Expression ".".

Expression = Term {"|" Term}.

Term = Factor {Factor}.

Factor = NonTerminal

| Terminal

| "(" Expression ")"

| "[" Expression "]"

| "{" Expression "}".

Terminal = Identifier | “"“ “"“.

NonTerminal = Identifier.

非终端符号可以是任意你喜欢的名字,而终端符号则要不然是出现在被描述的语言中的标识符,要不然就是任何被引号括起来的字符序列。

然后Factor(参数)可以是终端字符、非终端字符、三种括号中任意一种括起来的表达式。

Term(术语)由起码一个Factor组合而成……

用EBNF描述的一个只能赋值的类PASCAL编程语言:

(* 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 ? ;

对应的语法正确的程序如下:

PROGRAM DEMO1

BEGIN

A:=3;

B:=45;

H:=-100023;

C:=A;

D123:=B34A;

BABOON:=GIRAFFE;

TEXT:="Hello world!";

END.

参考文献

[1] Freescale semiconductor. HC(S)08/RS08 and S12(X) Build Tools Utilities Manual. 2010

[2] Extended Backus–Naur form. https://en.wikipedia.org/wiki/Extended_Backus%E2%80%93Naur_form

ebnf范式_(4条消息)扩展巴科斯范式(EBNF)简介相关推荐

  1. java 范式 问号_巴科斯范式和扩展巴科斯范式

    巴科斯范式(也称为巴科斯-瑙尔范式.巴克斯-诺尔范式)即 BNF 是一种用于表示上下文无关文法的语言,上下文无关文法描述了一类形式语言.尽管巴科斯范式也能表示一部分自然语言的语法,它还是更广泛地使用于 ...

  2. 【编译器学习】EBNF扩展巴科斯范式学习总结

    EBNF扩展巴科斯范式学习总结 是一种描述计算机编程语言且与上下文无关(没有前置条件)的语法的一种语法表达式.简而言之,就是描述语言语法的规范. EBNF的基本语法形式如下: 左手边(LeftHand ...

  3. 扩展巴科斯范式(EBNF)简介

    介绍 扩展巴科斯-瑙尔范式(Extended Backus–Naur Form,EBNF)是一种用于描述计算机编程语言等正式语言的与上下文无关语法的元语法(metasyntax)符号表示法.简而言之, ...

  4. 扩展巴科斯范式 EBNF

    EBNF Extended Backus–Naur Form 定义: 代码,如由终结符即可视字符.数字.标点符号.空白字符等组成的计算机程序的源代码. | 竖杠表示可供选择, "-" ...

  5. 什么是BNF EBNF 巴科斯范式及其扩展 BNF Augmented BNF

    什么是BNF范式,什么又是EBNF范式? 巴科斯范式及其扩展 BNF & Augmented BNF                 什么是巴科斯范式?      巴科斯范式(BNF: Bac ...

  6. 语法分析:LL(1)语法分析的实现及扩展的巴科斯范式

    终于港到实现.. LL(1)文法与LL(1)分析 当一个文法满足以下条件时,称这个语法为LL(1)语法,LL(1)语法可以通过LL(1)的分析方法进行分析 文法不含有左递归 同一非终结符的FIRST集 ...

  7. 巴科斯范式(BNR范式,Backus-Naur Form)

    前言: 当你搜索看到这篇文章时,我想你已经有了 动机来了解什么是巴科斯范式(BNR范式,Backus-Naur Form).对于本人而言,我是因为需要看一门编程语言的IEEE标准文档而需要了解BNR范 ...

  8. CS【1】:巴科斯范式(BNF: Backus-Naur Form)介绍与例子

    太幸运了,今天考试刚刚考到,把笔记放出来哦 有时间更新一下原题 巴科斯范式 (BNF: Backus-Naur Form 的缩写)描述计算机语言语法的符号集 在双引号中的字("word&qu ...

  9. 巴科斯范式(Backus-Naur Form, BNF)

    什么是巴科斯范式(Backus-Naur Form, BNF) 描述语言的语法规则 游戏规则 在双引号中的东西代表它本身 双引号外的字代表语法 <必选项> [可选项] {0次或多次} | ...

最新文章

  1. TVM部署和集成Deploy and Integration
  2. Transformer在CV领域有可能替代CNN吗?还有哪些应用前景?
  3. Ansible详解(二)
  4. NIO详解(十一):线程间通信管道Pipe
  5. suse linux 光纤卡重置,SUSE Linux下查看光纤卡号和操作系统的版本
  6. 中国软件开发工程师之痛
  7. SpringSecurity认证流程回顾
  8. PMP之项目资源管理---管理风格
  9. LinearLayout和RelativeLayout 区别
  10. 如何输入一个整数逆序输出_如何匹配DSP输入输出信号
  11. 转载自《读者》--您也吻我一下好吗
  12. 推荐系统系列教程之十四:经典模型融合方法----线性模型和树模型的组合拳
  13. c语言广播程序,C语言socket编程---udp通信及广播
  14. PIE SDK导出图片
  15. Java基础小常识-final,抽象类,接口-(11)
  16. 文字转语音功能,MacOS只需两行代码
  17. 单片机练习 - 计时器
  18. 深度学习面试基础--BN层
  19. 车牌识别系统论文python_车牌识别系统的设计与实现毕业论文
  20. 微信小程序引入 vant UI组件库

热门文章

  1. 2020-05-19:催收核心业务是什么?
  2. 规则引擎和流程引擎我该怎么理解
  3. 系统类型中的:标准、VHD和VHDX是什么?
  4. 【软考高项】01考试简介
  5. 微信小程序开发——五星好评
  6. java的eclipse_Java中Eclipse的使用
  7. 奇迹MU服务器架设完整教程
  8. 清爽聊天无多余功能!抖音聊天工具上线
  9. 云呐|资产管理系统平台,固定资产平台解决方案
  10. fifa18 服务器维护,fifa18链接服务器