首页 > 编程知识 正文

数据库bcnf范式(2nf,3nf,bcnf的区别和联系)

时间:2023-05-04 06:51:25 阅读:67223 作者:858

BNF规定是导出规则(生成式)的集合,写如下。

符号:=使用符号的表达式此处的符号是非终结符号,但表达式由一个符号串或多个以竖线“|”分隔的符号串组成,表示选择,并且整个符号串可能替代左端的符号。 从未出现在左端的符号称为终结符号。

基本原理

BNF就像一场数学游戏。 从称为开始标记的符号开始,在实例中经常用s表示。 然后,给出替换前面符号的规则。 BNF语法定义的语言只是字符串的集合。 你可以按照以下规则写。 这些规则称为书写规范(生产式规则),形式如下。

symbol :=备用1 |备用2 .

每个规则声明:=左侧的符号必须被右侧的选项之一替换。 替换项用“|”拆分。 也可以用" :="替换" :=",但含义相同)。 置换项通常有两个符号和终止符号。 之所以被称为终结符,是因为没有对他们的书写规范。 他们是书写过程的结束。 (符号通常被称为非终结符号,也有人称为非终端。

BNF是jmddg格式的缩写,在计算机的史前时代(1950s ),有一位大师。 他奠定了现代计算机的基础,在他的老年人的众多成就中,他发明了形式语言的研究和高级语言FORTRAN。 为了纪念他的老人,我们把他提出的一组描述语言的方法称为BNF。 它递归描述语言中的各种成分,遵守该规则的程序保证语法上的正确性。 BNF因其简洁、明了、科学而被广泛接受,成为描述各种编程语言的最常用工具。 实际上,BNF很简单,=表示定义|表示或方括号()中的非终结符

非终结符号是指语言中抽象概念不直接出现在语言中的符号,终结符号是指直接出现在语言中的符号。

例如,c语言的声明语句可以用BNF编写如下:

语句:=声明类型标识符; |类型标识符[数字]

在该语句中,声明语句这一非终结符号被定义为两种形式(以上用|分隔的两个部分),同时在此引入了三个终结符号:分号。 左括号[,右括号]。

类型:=简单类型|指针类型|自定义类型

指针类型:=简单类型* |自定义类型*

简单类型:3360=int

自定义类型:=枚举标识符|结构标识符|union标识符|标识符

到目前为止,基本上已经明确定义了类型。

数字:3360=0x16十六进制数字串|08进制数字串|十进制字符串

十六进制字符串:3360=16十六进制|十六进制字符串十六进制

八进制数字串

::= <八进制数字> | <八进制数字串><八进制数字> 
  <十进制数字串> ::= <十进制数字> | <十进制数字串><十进制数字> 
  <十六进制数字> ::= <十进制数字> | A | B | C | D | E | F 
  <十进制数字> ::= <八进制数字> | 8 | 9 
  <八进制数字> ::= 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 
  到这里就把<数字>定义清楚了 

  <标识符> ::= <字母> | <标识符> <字母数字串> 
  <字母数字串> ::= <字母>|<十进制数字>|<字母数字串><字母>|<字母数字串><十进制数字> 
  <字母> ::= _ | <大写字母> | <小写字母> 
  <小写字母> ::= a|b|c|d|e|f|g|h|i|j ……  
  <大写字母> ::= A|B|C|D|E|F|G|H|I|J …… 
  到此为止整个声明语句就定义完了(就是说已经没有非终结符了)。

         虽然看起来很繁,但前面定义的各种非终结符都可以很容易的在别的地方重用。比如,函数声明可以定义成下面的样子: 
  <函数声明语句> ::= <类型><标识符>(<形参表>); 
  <形参表> ::= <类型><标识符> | <形参表>,<形参表> 
  只用两句就描述完了,所以BNF实际上比用自然语言要简练得多(整个C语言只用一二百句就可以描述清楚),而且相当的精确,不会有自然语言中那种模棱两可的表达。如果你对BNF比较敏感的话,会发现C里面的标识符不能由数字开头,而且在C里面下划线是被当做字母看待的(也就是说能用字母的地方都可以用下划线)。
  另外,还有一种EBNF就没有正宗的BNF这么爽了,也有很多人在用,前面的那些递归的定义被写成了{}。
   有一段时间PASCAL爱好者们喜欢用一个叫语法图的东西,画出来很难看,但功能和BNF差不多,现在好象已经没多少人用了。
     近几年流行另一种东西: 
  digit = one of 0 1 2 3 4 5 6 7 8 9 
  这里非终结符digit用斜体表示,one of是这种方法里定义的一个量词(常用斜黑体)。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。