c语言 bnf,c语言bnf范式.pdf
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相关推荐
- Python语言语法描述规范BNF介绍
Python语言语法描述规范BNF介绍 读官方的 Python 语言参考(The Python Language Reference)需要了解BNF. BNF(Backus Normal Form:巴 ...
- 什么是BNF EBNF 巴科斯范式及其扩展 BNF Augmented BNF
什么是BNF范式,什么又是EBNF范式? 巴科斯范式及其扩展 BNF & Augmented BNF 什么是巴科斯范式? 巴科斯范式(BNF: Bac ...
- 语法规范:BNF与ABNF 巴斯克范式
语法规范:BNF与ABNF 巴斯克范式 BNF 巴科斯范式(BNF: Backus-Naur Form 的缩写)是由 John Backus 和 Peter Naur 首先引入的用来描述计算机语言语 ...
- BNF(巴科斯范式)
BNF 巴科斯范式(BNF: Backus-Naur Form 的缩写)是由 John Backus 和 Peter Naur 首次引入一种形式化符号来描述给定语言的语法(最早用于描述ALGOL 60 ...
- 知识库递归编程java和prolog代码;逻辑语言Prolog简介(附24555字PDF发“递归prolog简介”下载)
知识库递归编程java和prolog代码:逻辑语言Prolog简介(附24555字PDF发"递归prolog简介"下载) 数据简化DataSimp 今天 数据简化DataSimp导 ...
- R语言ggplot2可视化指定保存到pdf的图像的具体尺寸、保证缩放的一致性:使得绘图元素(文本、点大小等)在设计上都具有相同的绝对大小、设置全局数据点大小、主题格式、设置图像保存的具体尺寸
R语言ggplot2可视化指定保存到pdf的图像的具体尺寸.保证缩放的一致性:使得绘图元素(文本.点大小等)在设计上都具有相同的绝对大小.设置全局数据点大小.主题格式.设置图像保存的具体尺寸 目录
- python123九宫格输入法_《啊哈C语言-2016最新修正版》.pdf
<啊哈C语言-2016最新修正版>.pdf | 啊哈C语言| 后续内容还请关注 [ ] [ ] [[ 网站首页 ]] [ ] [ ] [[ 网站问答 ]] /qa [ ] [ ] [[ 新 ...
- 啊哈C语言,c语言编程入门书籍及PPT(PDF版)下载网址
啊哈C语言,c语言编程入门书籍 啊哈C语言,c语言编程入门书籍_啊哈c语言-C其他资源-CSDN下载 小学生坐在马桶上都能读懂的C语言书(啊哈C语言最新版) 小学生坐在马桶上都能读懂的C语言书(啊哈C ...
- c语言指针的概念和作用,指针:C语言的重要概念和特色.pdf
指针:C语言的重要概念和特色.pdf 一 指 针 :C语 言 的 重 要 概 念 和 特 色 令 小怀 (定西工贸中等专业学校 ,甘肃 陇西 748100) 摘 要 :指针是C语 言的精髓部分 .也是 ...
- c语言源程序自动评判系统,C语言源程序的自动评判系统.pdf
C语言源程序的自动评判系统.pdf · 6 · ComputerEraNo.4 2010 C五口吉I====I源程序的自动评判系统 余梓唐 (义乌工商学院计算机系,浙江 义乌 322000) 摘 要: ...
最新文章
- 我看过的密码学方面的好文章
- 爬虫9-淘宝商品信息定向爬虫
- 注意力机制中的Q、K和V的意义
- 流式计算框架Storm后台启动命令(避免新开窗口)
- python-study-12
- having and group by
- phpexcel常见问题的解决办法
- Centos8.4 配置本地镜像yum源
- 学习笔记(01):MySQL数据库运维与管理-02-设置系统变量
- pt-query-digest分析mysql日志
- mac mysql57 配置文件_Mac 的mysql5.7没有配置文件,如何解决only_full_group_by 问题
- python中strptime函数_python datetime中strptime用法详解
- 【Linux-shell】shell脚本基础语法练习
- 自建机房与IDC机房对比
- matlab shapley函数,合作博弈shapley值讲解.ppt
- 第一篇博客,shader练习
- 使用Python读取网易邮箱大师客户端的所有邮件
- C#实现监控网络流量
- (翻译)斑马纹模式(Alternating Row Colors)
- Spring学习笔记(六)。Spring自动装配,按名称自动装配:byName,按类型自动装配:byType,@Autowired,@Qualifier,@Resource