c语言bnf范式

BNF 范式简介

席圣渠 2014/10/24

巴科斯范式(BNF 范式)是一种用于描述给定语言语法的形式化符号规范,很多编程语言的语法规则都

是通过 BNF 范式来定义的。BNF 的基本思想是一个符号可以被满足给定规则的一系列符号替换,它以

递归的方式描述语言中的各种成分,从一个起始符号开始,通过不断的符号替换,就可以得到多种多样

并且符合语法规则的程序。

我们以 C 语言为例。在 C 语言中,语句可以分为五个种类,即表达式语句、控制语句、复合语句、调用

语句和空语句。那么,我们可以说:

语句 是 表达式语句 或者 控制语句 或者 复合语句 或者 调用语句 或者 空语句

这句话的含义很清楚,接下来,我们尝试用符号来表达这句话的意思,可能是:

Stmt ::= ExpStmt | CondStmt | CompStmt | FuncStmt | SEMI

上述符号化的表述方式,就是 BNF 范式的表达方式,每一个符号的含义与自然语言的描述一一对应。

现在,语句已经被定义好了,但是我们还不清楚每一类语句,比如表达式语句的含义。因此,我们继续

定义表达式语句:

表达式语句 是 表达式 分号

其对应的符号化表示为:

ExpStmt ::= Exp SEMI

就像这样,表达式语句也被定义好了,这就是文章刚开头指出的,递归的方式。只要不断的定义下去,

就能得到一种语言的整体的描述。那么,问题就来了,递归的定义什么时候终止呢?其实,只要符号被

表述成具体的内容就可以了,比如说分号或者加号就是具体的内容,更具体的例子就是:

Type ::= "int" | "float"

即类型Type 这个抽象符号可以被字符串 int 或者 float 替换,由于int 和 float 都是具体的表述,我们的

递归定义也就可以终止了。

一般的 BNF 范式的表述规则如下:

1. 在双引号中的字( "word" )代表着这些字符本身。

2. 方括号( [ ] ) 内包含的为可选项。

3. 大括号( { } ) 内包含的为可重复0 至无数次的项。

4. 竖线( | )表示在其左右两边任选一项,相当于"OR"的意思。

5. ::= 是“被定义为”的意思。

我们用这些规则,简单的表述一下 C 语言中的 i 语句:

IF ::= "if"

ELSE ::= "else"

LP ::= "("

RP ::= ")"

IfStmt ::= IF LP CompareExp RP Stmt [ELSE Stmt]

其中 CompareExp 表示比较表达式,Stmt 表示语句,这里就不递归定义了。

好了,关于 BNF 范式的基本知识,我们就讲完了,下面来说说这次作业。

1. 不需要递归定义所有符号,比如变量可以直接用Var 表示,递归定义 Var 就不需要了。但是,请

确保符号的含义能通过其名字猜测出来。

2. BNF 的表述规则尽可能符合规范,但不做强制要求。

3. 增加一条表述规则,大括号后边紧跟加号( { }+ )表示,大括号内部包含的内容至少 1 次。

以上内容应该可以帮助你完成作业了,如果依然有疑问,我会在QQ 上尽力解答。

祝好~

c语言 bnf,c语言bnf范式.pdf相关推荐

  1. Python语言语法描述规范BNF介绍

    Python语言语法描述规范BNF介绍 读官方的 Python 语言参考(The Python Language Reference)需要了解BNF. BNF(Backus Normal Form:巴 ...

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

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

  3. 语法规范:BNF与ABNF 巴斯克范式

    语法规范:BNF与ABNF 巴斯克范式 BNF  巴科斯范式(BNF: Backus-Naur Form 的缩写)是由 John Backus 和 Peter Naur 首先引入的用来描述计算机语言语 ...

  4. BNF(巴科斯范式)

    BNF 巴科斯范式(BNF: Backus-Naur Form 的缩写)是由 John Backus 和 Peter Naur 首次引入一种形式化符号来描述给定语言的语法(最早用于描述ALGOL 60 ...

  5. 知识库递归编程java和prolog代码;逻辑语言Prolog简介(附24555字PDF发“递归prolog简介”下载)

    知识库递归编程java和prolog代码:逻辑语言Prolog简介(附24555字PDF发"递归prolog简介"下载) 数据简化DataSimp 今天 数据简化DataSimp导 ...

  6. R语言ggplot2可视化指定保存到pdf的图像的具体尺寸、保证缩放的一致性:使得绘图元素(文本、点大小等)在设计上都具有相同的绝对大小、设置全局数据点大小、主题格式、设置图像保存的具体尺寸

    R语言ggplot2可视化指定保存到pdf的图像的具体尺寸.保证缩放的一致性:使得绘图元素(文本.点大小等)在设计上都具有相同的绝对大小.设置全局数据点大小.主题格式.设置图像保存的具体尺寸 目录

  7. python123九宫格输入法_《啊哈C语言-2016最新修正版》.pdf

    <啊哈C语言-2016最新修正版>.pdf | 啊哈C语言| 后续内容还请关注 [ ] [ ] [[ 网站首页 ]] [ ] [ ] [[ 网站问答 ]] /qa [ ] [ ] [[ 新 ...

  8. 啊哈C语言,c语言编程入门书籍及PPT(PDF版)下载网址

    啊哈C语言,c语言编程入门书籍 啊哈C语言,c语言编程入门书籍_啊哈c语言-C其他资源-CSDN下载 小学生坐在马桶上都能读懂的C语言书(啊哈C语言最新版) 小学生坐在马桶上都能读懂的C语言书(啊哈C ...

  9. c语言指针的概念和作用,指针:C语言的重要概念和特色.pdf

    指针:C语言的重要概念和特色.pdf 一 指 针 :C语 言 的 重 要 概 念 和 特 色 令 小怀 (定西工贸中等专业学校 ,甘肃 陇西 748100) 摘 要 :指针是C语 言的精髓部分 .也是 ...

  10. c语言源程序自动评判系统,C语言源程序的自动评判系统.pdf

    C语言源程序的自动评判系统.pdf · 6 · ComputerEraNo.4 2010 C五口吉I====I源程序的自动评判系统 余梓唐 (义乌工商学院计算机系,浙江 义乌 322000) 摘 要: ...

最新文章

  1. 我看过的密码学方面的好文章
  2. 爬虫9-淘宝商品信息定向爬虫
  3. 注意力机制中的Q、K和V的意义
  4. 流式计算框架Storm后台启动命令(避免新开窗口)
  5. python-study-12
  6. having and group by
  7. phpexcel常见问题的解决办法
  8. Centos8.4 配置本地镜像yum源
  9. 学习笔记(01):MySQL数据库运维与管理-02-设置系统变量
  10. pt-query-digest分析mysql日志
  11. mac mysql57 配置文件_Mac 的mysql5.7没有配置文件,如何解决only_full_group_by 问题
  12. python中strptime函数_python datetime中strptime用法详解
  13. 【Linux-shell】shell脚本基础语法练习
  14. 自建机房与IDC机房对比
  15. matlab shapley函数,合作博弈shapley值讲解.ppt
  16. 第一篇博客,shader练习
  17. 使用Python读取网易邮箱大师客户端的所有邮件
  18. C#实现监控网络流量
  19. (翻译)斑马纹模式(Alternating Row Colors)
  20. Spring学习笔记(六)。Spring自动装配,按名称自动装配:byName,按类型自动装配:byType,@Autowired,@Qualifier,@Resource

热门文章

  1. Leetcode3:最长不重复子串
  2. html a去掉下划线
  3. c linux ping 实现
  4. 【恩墨学院】航空业走向发展黄金期,P2P线下金融实现线上大迁徙
  5. 三相永磁同步电机六个扇区的波形
  6. 反射型XSS靶场练习
  7. idea如何更改编辑器字体大小和框字体大小
  8. matlab 二维数组声明,Matlab字符串函数及二维数组
  9. Android 判断一个点是否在封闭的Path内或不规则的图形内
  10. html5标题标语,五一活动标语(精选30句)