本篇文章给大家谈谈c语言类bnf,以及c语言数据类型对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。
本文目录一览:
1、c语言double什么意思2、关于C语言中,类的功能,定义和使用方法3、C++中类型说明符、类型限定符、类型修饰符的区别是什么?希望分别介绍一下4、求C语言编译原理语法分析程序5、BNF范式介绍6、C语言的种类
c语言double什么意思
double意思为一对,一双;双重地;酷似的人;把…对折;变成两倍;增加一倍。
double可作形容词、副词、动词用。
double(双精度浮点型)是计算机使用的一种资料型别。
比起单精度浮点数(float),double(双精度浮点数)使用64位(8字节)来储存一个浮点数。它可以表示十进制的15或16位有效数字,负值取值范围为-1.7976E+308到-4.94065645841246544E-324,正值取值范围为4.94065645841246544E-324到1.797693E+308一站式出国留学攻略
关于C语言中,类的功能,定义和使用方法
类就是一种东西的集合,类中的成员就是这种东西的属性。
类的定义方法:
class 类名(自己随便起)
{
数据类型 成员属性;
};
C++中类型说明符、类型限定符、类型修饰符的区别是什么?希望分别介绍一下
怎么说呢……你可以用来定义变量的基本都是说明符,譬如int、char、double。
volatile、const等是限定符,你能不能对它做点啥,它啥时候有啥时候没,放在那里,跟这个有关。
修饰符是修饰说明符的,unsigned、short等等,这两个可以用来修饰int。
不过unsigned和short也可以定义变量……只是一种简化的写法
求C语言编译原理语法分析程序
#include iostream
using namespace std;
#define m 45
#define n 100
#define t 10
int main()
{
FILE *fp;
char filename[20],c[n];
printf(“Type the file name which you want to open:”);
scanf(“%s”,filename);
fp=fopen(filename,”r+”); /*以r-只读方式打开指定文件*/
if((fp=fopen(filename,”r”))==NULL) /*文件不存在输出错误*/
{cout”文件不存在!”endl;exit(-1);}
cout”文件中内容如下:”endl;
for(int j=0;!feof(fp);j++){
c[j]=fgetc(fp);//从流中读取字符
}
char keyword[m][t]={“include”,”int”,”string”,”cout”,”cin”,”auto”,”break”,”case”,”char”,”class”,”const”,
“continue”,”default”,”delete”,”do”,”double”,”else”,”enum”,”extern”,”float”,”for”,”friend”,”if”,”inline”,
“int”,”long”,”new”,”operator”,”private”,”protected”,”public”,”register”,”return”,”short”,”sizeof”,”static”,
“struct”,”switch”,”template”,”this”,”typedef”,”union”,”virtual”,”void”,”while”};//关键字数组
char a[t],*p=c,*q=a,*s=a;
bool w=0,r=0;
int i=0;
for(i=0;i10;i++)a[i]=NULL;//初始化临时数组
while (*p !=NULL){
q=s=a;
if((*p=’a’*p=’z’)||(*p=’A’*p=’Z’)||*p==’_’){//识别标识符
*q=*p;p++;q++;
while ((*p=’a’*p=’z’)||(*p=’A’*p=’Z’)||(*p=’0’*p=’9′)||*p==’_’){
*q=*p;p++;q++;
}
for(i=0;im;i++)if(strcmp(keyword[i],a)==0){r=1;break;}
if(r==1){cout”关键字为:”;r=0;}
else cout”标识符为:”;
while(s!=q){
cout*s;
s++;
}
coutendl;
for(i=0;it;i++)a[i]=NULL;
}
else if(*p==’\”){//识别字符常量
p++;
while(*p!=’\”){
*q=*p;
p++;
q++;
}
cout”字符常量为:”;
while(s!=q){
cout*s;
s++;
}
coutendl;
for(i=0;it;i++)a[i]=NULL;
p++;
}
else if(*p==’\”‘){//识别字符串常量
p++;
while(*p!=’\”‘){
*q=*p;
p++;
q++;
}
cout”字符串常量为:”;
while(s!=q){
cout*s;
s++;
}
coutendl;
for(i=0;it;i++)a[i]=NULL;
p++;
}
else if(*p==’+’||*p==’-‘||*p==’*’||*p==’/’||*p==’=’||*p==’%’||*p==’/’){//识别运算符
cout”运算符为:”*p;
coutendl;
p++;
}
else if(*p==’;’||*p==’,’){//识别分解符
cout”分界符为:”*p;
coutendl;
p++;
}
else if(*p=’0’*p=’9′){
s=q=a;
*q=*p;p++;q++;
while(*p=’0’*p=’9’||*p==’.’){
*q=*p;p++;q++;
}
while(s!=q){
if(*s==’.’){w=1;break;}//识别实型常量
s++;
}
s=a;
if(w ==1){
cout”实型常量为:”;
while(s!=q){
cout*s;
s++;
}
for(i=0;it;i++)a[i]=NULL;
}
else {
cout”整型常量为:”;
while(s!=q){//识别整型常量
cout*s;
s++;
}
for(i=0;it;i++)a[i]=NULL;
}
coutendl;
}
else p++;
}
return 0;
}
BNF范式介绍
巴科斯范式 以美国人巴科斯(Backus)和丹麦人诺尔(Naur)的名字命名的一种形式化的语法表示方法,用来描述语法的一种形式体系,是一种典型的元语言。又称巴科斯-诺尔形式(Backus-Naur form)。它不仅能严格地表示语法规则,而且所描述的语法是与上下文无关的。它以递归方式描述语言中的各种成分,凡遵守其规则的程序就可保证语法上的正确性。它具有语法简单,表示明确,便于语法分析和编译的特点。
BNF表示语法规则的方式为:非终结符用尖括号括起。每条规则的左部是一个非终结符,右部是由非终结符和终结符组成的一个符号串,中间一般以“::=”分开。具有相同左部的规则可以共用一个左部,各右部之间以直竖“|”隔开。
所谓非终结符就是语言中某些抽象的概念不能直接出现在语言中的符号,终结符就是可以直接出现在语言中的符号。
BNF表示语法基本结构为 :
non-terminal ::= replacement
non-terminal意为非终止符,就是说我们还没有定义完的东西,还可以继续由右边的replacement,也就是代替物来进一步解释、定义。
BNF关键字及含义 :
: 内包含的为必选项。
[ ] : 内包含的为可选项。
{ } : 内包含的为可重复0至无数次的项。
| : 表示在其左右两边任选一项,相当于”OR”的意思。
::= : 是“被定义为”的意思
“…” : 术语符号
[…] : 选项,最多出现一次
{…} : 重复项,任意次数,包括 0 次
(…) : 分组
| : 并列选项,只能选一个
斜体字: 参数,在其它地方有解释
例子:C语言的声明语句可以用BNF这样描述 :
声明语句 ::= 类型标识符; | 类型标识符[数字];
这一句中声明语句这个非终结符被定义成了两种形式(上面用|隔开的两部分),同时在这里引入了三个终结符: 分号; 左方括号[,右方括号 ]。
类型 ::= 简单类型 | 指针类型 | 自定义类型
指针类型 ::= 简单类型 * | 自定义类型 *
简单类型 ::= int|char|double|float|long|short|void
自定义类型 ::= enum标识符|struct标识符|union标识符|标识符
到这里就基本上把类型定义清楚了。
数字 ::= 0x十六进制数字串 | 0八进制数字串 | 十进制数字串
十六进制数字串 ::= 十六进制数字 | 十六进制数字串十六进制数字
八进制数字串 ::= 八进制数字 | 八进制数字串八进制数字
十进制数字串 ::= 十进制数字 | 十进制数字串十进制数字
十六进制数字 ::= 十进制数字 | 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里面下划线是被当做字母看待的(也就是说能用字母的地方都可以用下划线)。
参考资料:
1. 巴科斯范式
2. BNF范式学习
C语言的种类
C语言只有一种,独一无二。C语言最新的标准是C11。
C11标准是 ISO/IEC 9899:2011 – Information technology — Programming languages — C 的简称 ,曾用名为C1X。C11标准是C语言标准的第三版,前一个标准版本是C99标准。2011年12月8日,国际标准化组织(ISO)和国际电工委员会(IEC) 旗下的C语言标准委员会(ISO/IEC JTC1/SC22/WG14)正式发布了C11标准 。C11标准的最终定稿的草案是免费开放的,为N1570[3] ,但是正式标准文件需要198瑞士法郎 。
C++,Java,C#等语言,只是在部分语法上与C有相似之处。因为它们基本上都是从C那里继承了一些东西。但它们的不同之处更多。C语言是一门通用计算机编程语言,应用广泛。C语言的设计目标是提供一种能以简易的方式编译、处理低级存储器、产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言。
关于c语言类bnf和c语言数据类型的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。