****2015年11月23日19:11:43
2_基本词法语法规则
2-1-1字符集
三字符序列
eg:“??(” <=>“ [”//以两个问号加一个符号来替换另一个符号,共有九个
2-1-2词法元素
编译器对字符序列进行词法分析,被特定规则分解为记号(程序中具有语义的最基本组成单元)
记号分类:标识符,关键字,常量(含字符串常亮),运算符,标点符号;
编译器从左到右收集字符,尽量建立最长的记号,即使结果并不能构成有效的c语言程序
相邻记号可以用空白符或注释句隔开
eg:
分析:
sum=x+y;//sum、=、x、+、y共五个记号
x+++++y;//x、++、++、+、y共五个字符,无效c语法,而x++ + ++y是有效语句
…………………………………………………………………………………………
2-2语法规则
实数的BNF范式://等价于<实数>::=<整数部分>.<小数部分>|.<小数部分>
<实数>::=<整数部分>.<小数部分>
<整数部分>::=<数字>|<整数部分><数字>
<小数部分>::=<数字>|<数字><小数部分>
<数字>::=0|1|2|3|4|5|6|7|8|9
实数的EBNF范式:
<实数>::=[<整数部分>].<小数部分>
………………………………………………………………………………………………………
2-3-1标识符的BNF范式:
<标识符>::=<字母>|<字母数字>
<字母数字>::=<数字>|<字母>
<字母>::=<小写字母>|<大写字母>
<大写字母>::=A|B|C|D|……|Z
<小写字母>::=a|b|c|d|……|z
<数字>::=0|1|2|3|4|5|6|7|8|9
2-3-2关键字
即保留字,系统赋予的特定含义的并有专门用途的标识符,不能作为普通标识符给变量函数或标号等命名,可作为宏名(预处理发生在这些关键字之前)
2-3-3空白符
即空白字符:空格符,制表符,换行符,换页符,注释符(五种)
作用:分隔字符
2-4-1数据类型的分类
基本类型: 整型 字符型 浮点型 复数类型
导出类型: 指针 数组 结构 联合
空类型
2-4-2基本类型的名字
char变量用于保存8位的ASCII码字符,也可储存8位二进制数
2-4-3
在不要求大整数的情况下可用字符型代替整型,整型也可以表示字符,只不过用格式控制符控制一下
2-4-5
浮点类型的存储方式
在计算机中,用二进制分别存储实数的符号位,
有效数字位(1<=尾数<2,原码中省略1),
指数位(阶码,用移码表示,float偏移值为127,如果阶码等于3,则保存成130即10000010)
即:二进制浮点数V = (-1)^s * M * 2^e
//s符号位,M尾数,即有效数字,e指数位(阶码)
float型====符号区(1bit)指数区(8bit)尾数区(23bit)====
位数决定精度(float约7位,double约15位)
阶码决定范围(float 10^+-38 | double 10^+-308)
在值的可表示范围之内,整数一定是精确表示,浮点数的表示只可能是近似的;
不能使用==、!=运算符比较float和double类型的数据
2-5-1
文字常量
整型浮点型常量可以使用后缀来指定其类型(U无符号UL无符号长L长LL长长ULL无符号长长)eg:0XFUL
字符常量是一个整数,其值为该字符在ASCII字符集中的字符码。
单引号即定界符,是字符常量的标志。
图形字符,转义字符(以反斜线开头的特殊字符序列)
'\0'常用于表示一个字符串结束,ASCII值为0,不等同于空格
字符串常量:
"字符序列",字符序列可以是图形符号,可以是转义序列,单引号可以用图形符号表示,双引号和反斜线必须用转义序列表示
“3'40\"\t”指“ 3 ' 4 0 " \t ”共6个字符。
书写字符串时不能中途换行,要想将长字符串分行写要用行连接,即续行符连接:
"hello,\
how are you?"
字符串常量就是字符数组,末尾自动填'\0'作为字符串结束的标志
==##strlen(s)函数用来返回字符串s的长度##==
int strlen(char s[])
{
int i;
i = 0;
while(s[i] != '\0')
++i;
return(i);
}
int main ()
{
printf("%d\n",strlen("world") );
return 0;
}
2-5-2符号常量
即标识符,给文字常量,各类型变量定义的名字
定义方法:
1、用# define指令定义一个符号常量;(文本替换,没有存储空间)
# define 标识符 常量
2、用const声明语句定义一个符号常量;(有