您好,欢迎访问三七文档
BNF范式简介席圣渠2014/10/24巴科斯范式(BNF范式)是一种用于描述给定语言语法的形式化符号规范,很多编程语言的语法规则都是通过BNF范式来定义的。BNF的基本思想是一个符号可以被满足给定规则的一系列符号替换,它以递归的方式描述语言中的各种成分,从一个起始符号开始,通过不断的符号替换,就可以得到多种多样并且符合语法规则的程序。我们以C语言为例。在C语言中,语句可以分为五个种类,即表达式语句、控制语句、复合语句、调用语句和空语句。那么,我们可以说:语句是表达式语句或者控制语句或者复合语句或者调用语句或者空语句这句话的含义很清楚,接下来,我们尝试用符号来表达这句话的意思,可能是:Stmt::=ExpStmt|CondStmt|CompStmt|FuncStmt|SEMI上述符号化的表述方式,就是BNF范式的表达方式,每一个符号的含义与自然语言的描述一一对应。现在,语句已经被定义好了,但是我们还不清楚每一类语句,比如表达式语句的含义。因此,我们继续定义表达式语句:表达式语句是表达式分号其对应的符号化表示为:ExpStmt::=ExpSEMI就像这样,表达式语句也被定义好了,这就是文章刚开头指出的,递归的方式。只要不断的定义下去,就能得到一种语言的整体的描述。那么,问题就来了,递归的定义什么时候终止呢?其实,只要符号被表述成具体的内容就可以了,比如说分号或者加号就是具体的内容,更具体的例子就是:Type::=int|float即类型Type这个抽象符号可以被字符串int或者float替换,由于int和float都是具体的表述,我们的递归定义也就可以终止了。一般的BNF范式的表述规则如下:1.在双引号中的字(word)代表着这些字符本身。2.方括号([])内包含的为可选项。3.大括号({})内包含的为可重复0至无数次的项。4.竖线(|)表示在其左右两边任选一项,相当于OR的意思。5.::=是“被定义为”的意思。我们用这些规则,简单的表述一下C语言中的if语句:IF::=ifELSE::=elseLP::=(RP::=)IfStmt::=IFLPCompareExpRPStmt[ELSEStmt]其中CompareExp表示比较表达式,Stmt表示语句,这里就不递归定义了。好了,关于BNF范式的基本知识,我们就讲完了,下面来说说这次作业。1.不需要递归定义所有符号,比如变量可以直接用Var表示,递归定义Var就不需要了。但是,请确保符号的含义能通过其名字猜测出来。2.BNF的表述规则尽可能符合规范,但不做强制要求。3.增加一条表述规则,大括号后边紧跟加号({}+)表示,大括号内部包含的内容至少1次。以上内容应该可以帮助你完成作业了,如果依然有疑问,我会在QQ上尽力解答。祝好~
本文标题:c语言bnf范式
链接地址:https://www.777doc.com/doc-7224917 .html