接口定义语言IDL与扩展巴科斯-瑙尔范式EBNF

引言

巴科斯范式(BNF: Backus-Naur Form 的缩写)是由 John Backus 和 Peter Naur 首先引入的用来描述计算机语言语法的符号集。
BNF规则定义如下:

  • ::= 表示产生式,“被定义为”的意思.左边是非终结符或元变量,右边是终结符一一一些事先规定好的符号,这些符号可能是简单的单词或者在其他
    BNF式子中作为非终结符。有些BNF式子中是用冒号代替:= 。每个产生式就是一个子树,在写编译器时,每个子树对应一个解析函数。
  • 叶子节点,叫做终结符
  • "..." 双引号中的内容表示字符本身,而double_quote用来代表双引号。之所以用双引号包上是因为部分符号在BNF中表达特定的意思。看BNF需要把双引号拿掉再看。有些BNF式子中是用单引号代替双引号。
  • 在双引号外的内容(有可能有下划线)代表着 语法部分
  • | 竖线表示左右任选一项(选1),相当于"OR"的意思
  • < > 尖括号内包含的为必选项; 表示非叶子节点,叫做非终结符 Non-terminal symbols ,如果一个非终结符出现在生成规则的右边,这意味着会有另一条生成规则来解释代替它的位置。考虑如下生成规则:
  • [ ] 方括号内包含的为可选(可不选)(选0:1)
  • { } 花括号内包含的为可重复0至无数次的(选0:n)
  • ( ) 圆括号表示分组

 

一、EBNF扩展巴科斯-瑙尔范式

Refer:理解 BNF 范式_笔记大全_设计学院 (python100.com)

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

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

1.1 文法规则(Production Rules生成式)

语法规则(Production rules):由非终结符和终结符组成的表示语法结构的规则。

<BNF规则> ::= <符号> "::=" <表示式>> ["| " <表示式>>] "." ;

其中,符号是非终结符号,表示式由符号和终结符号(或其他符号)组成。在表示式中,非终结符号使用尖括号括起来,终结符号使用引号括起来。 当多个表示式出现在一起时用竖线分隔,最后以一个点号结尾。

终端符号与非终端符号

非终端符号(Nonterminal symbols):即,规则名。是用于描述语法结构的变量(语法单元),它必须被定义在一个production中,可以根据产生式规则进行替换。或说,它们必须出现在某个地方的production的左式中,用<>尖括号括起来,表示语法规则的左侧。
终端符号(Terminal symbols):形成所描述语言的最基本符号。 所描述语言的标点符号(不是EBNF自己的)会被左右加引号(它们也是终端符号),而其他终端符号会用粗体(这边因不方便加粗,就不加粗了)打印。用引号括起来,表示语法规则的右侧。终结符是构成实际句子的基本符号,是语言中的实际词汇或符号。

所谓非终结筱就是语言中某些抽象的概念不能真接出现在语竟中的符号,终结符就是可以真接出现在语言史的符号。

1.2  BNF基本符号

 

开始  
> 结束  
或者or 代表左右两项任选一项 Alternatively
( )  组合 代表内包含的所有项为一组,用来控制表达式的优先级


 1.3 BNF元字符

a-z, A-Z 字母  
0-9 数字  
下划线  
&  与and  
非not  

 

1.4 EBNF符号

<text> 非终结符号|规则名 代表语法单元 Nonterminal
::= 定义为 代表左侧由右侧定义 Is defined to be (left part of the rule is defined to be right part of the rule)
::+      Is added as alternative (left part of the rule is completed with right part of the rule as a new alternative)
"text"  终端字符串 代表着字符字面意思本身 

Literal

双引号中的"word",代表着这些字符本身。而double_quote用来代表双引号。在双引号外的字(有可能有下划线)代表着语法部分

前项重复0-n 前面的语法单元,可重复0至n任意次的项。 The preceding syntactic unit can be repeated zero or more times
前项重复1-n 前面的语法单元,可重复1至n任意次的项。 The preceding syntactic unit must be repeated at least once
? 前项重复出现0-1次    
       
< >  必选项1 封闭的语法单元,必选出现1次的项  
{ }  重复项0-n 封闭的语法单元,可重复0至n任意次的项。 The enclosed syntactic units are grouped as a single syntactic unit
[ ]  可选项0-1 封闭的语法单元,出现0|1次的项  The enclosed syntactic unit is optional – may occur zero or one time
       
连接符    
; 结束符    
       

 

(*...*) 注释

//:单行注释的起始标记
/* */:多行注释的包裹标记

␣:忽略符
ε:空,什么都没有


?...? 特殊序列
- 除外

... 表示术语符号。
斜体字: 参数。

 

二、IDL 接口定义语言(The Interface Definition Language)

 

Refer: Interface Definition Language (omg.org)

 

 

 

 

 

posted @ 2024-01-18 14:40  suntroop  阅读(84)  评论(0)    收藏  举报