利用const定义正规常数

5.利用const定义正规常数

常指针

要把指针变量中的值(也就是地址)声明为常量,采用以下语法:

<类那些>*const<指针名>[=<初值>]

这样定义的指针变量中存放的指针是个常量,称为常指针。定义后,该指针指向固定的内存单元,不能再指向其他内存单元,通过它可以修改所指单元里存放的内容。例如:

Char *const pc=ABCD;

Pc[3]=a;合法,指针指向的对象可以修改

Pc=QWER;不可以,指针的指向不可以修改

指向常量的常指针

实验一 词法分析程序的构造 (一)实验目的 1、了解词法分析的任务。 2、掌握构造识别各类单词自动机的方法及过程。 3、掌握符号表的建立及单词的分类方法。 4、掌握词法分析程序的基本原理与构造方法。 (二)实验内容 对于给定的符合C语言文法所定义的一段程序,使用高级语言c编写程序完成下列内容: 1、该程序能接受(识别)所有的标识符。 5、该程序能接受(识别)所有的常数(至少包含整数)。 6、该程序能接受(识别)C语言中定义的所有关键字(按照32个来做) 7、该程序能接受(识别)C语言中的所有界符。 8、该程序能接受(识别)识别C语言中的所有运算符。 (三)实验指导 1、单词的正规文法及正规式示例。 正规文法如图1-1所示: 图1-1 单词正规文法示例 正规式: 标识符:l(l|d)*; 无符号整数:dd* 2、编写函数:利用C语言单词正规式的状态转换图,设计并编写程序识别 输入的源程序(source.txt)。 从DFA的开始状态出发,依次扫描输入符号串的每个字符,每扫描到一个字符,根据DFA状态图跳转到对应的状态,若输入符号串的所有符号被识别后到达终态,以二元式(类别码,符号串)【常数】或三元式(类别码,符号串,地址)【关键字、标识符、运算符、常数、界符】的形式写入名为result.txt的文件中。 (1)C语言单词正规式的状态转换图示例如图1-2所示。 图1-2 状态转换图示例 (2)将一段(不少于5行)的c语言编写的程序存入source.txt中。 (3)使用适当的存储结构存储关键字表、界符表、运算符表、标识符表。 ①关键字表 auto break case char const continue default do double else enum extern float for goto if int long register return short signed sizeof static struct switch typedef union unsigned void volatile while ②界符表:" ' [ ] { } ( ) ; , : | & ③运算符表:+ - * / > < = ④标识符表【程序创建,动态增加】 (4)从名为source.txt的文件中读取字符,识别出符号串及其类型。【关键字、标识符、运算符、常数、界符】。 (5)对于识别出的标识符,将其写入名为id.txt的文件中,对于每个识别出 的符号串,以二元式(类别码,符号串)【常数】或三元式(类别码,符号串,地址)【关键字、标识符、运算符、常数、界符】的形式写入名为result.txt的文件中。 【说明】 我们假定类型 1-关键字;2-标识符;3-运算符;4-常数;5-界符 ①对于识别出来的关键字,将其三元式(1,符号串,该关键字在关键字表 中的位置)写入result.txt中,例如如果识别出来的关键字是int,则其三元式为(1,int,17)。 ②对于识别出来的标识符,将其写入标识符表中,例如如果识别出来的标 识符是a,则将其写入标识符表中;并将其三元式(2,符号串,该标识符在标识符表中的位置)写入result.txt中。 ③对于识别出来的运算符,将其三元式(3,符号,该运算符在运算符表中 的位置)写入result.txt中,例如如果识别出来的运算符是*,则其三元式为(3,*,3)。 ④对于识别出来的常数,将其二元式(4,符号串)写入result.txt中,例如 如果识别出来的常数是3.14,则其三元式为(4,3.14)。 ⑤对于识别出来的界符,将其三元式(5,符号,该界符在界符表中的位置) 写入result.txt中,例如如果识别出来的运算符是{,则其三元式为(5,{,5)。 ⑥将标识符表的内容写入id.txt中。 【说明】在result.txt中每写一个二元式或三元式就换行,在id.txt中每写一 个标识符就换行。 (6)对于不符合给定C语言文法规则的符号串给出错误提示。 【示例演示】 例如:若source.txt中的内容为 int a=0; int i; float b=1.55; 则id.txt的内容为: a i b result.txt的内容为: (1 , int , 17) (2 , a , 1) (3 , = , 7) (4 , 0) (5 , ; , 9) (1 , int , 17) (2 , i ,2) (5 , ; , 9) (1 , float ,
最新发布
04-03
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值