实验一 源程序的输入和扫描
学时数:2
[实验
内容
财务内部控制制度的内容财务内部控制制度的内容人员招聘与配置的内容项目成本控制的内容消防安全演练内容
]:
1、 编制一个源程序的输入、扫描程序,从文件中每次读入一行到输入缓冲区(可以用字符数组实现);然后从缓冲区中依次取出字符显示在屏幕上。
2、从文件每次读入一行到输入缓冲区的功能(可以用字符数组实现)用一个子程序实现。
[实验目的]:
1、通过编制一个源程序的输入、扫描程序,熟悉和了解从文件中读入数据到输入缓冲区的过程。
[实验步骤]:
1、准备: 用TC、VC++等开发工具;确定被处理的语言的语法特点(初步确定,可使用现成语言如Pascal、C等)。编好程序,写好实验
报告
软件系统测试报告下载sgs报告如何下载关于路面塌陷情况报告535n,sgs报告怎么下载竣工报告下载
。
2、上机:输入源程序,修改、调试,运行。
编程思想:
采用一个子程序实现的形式。
(1)程序判断源文件是否为NULL,如果是,则输出错误提示!如果不是,则进入循环。
(2)调用子程序readbuffer(),每次读入一个字符给字符变量,如果字符变量的内容不是回车符,则把字符变量的内容存入数组buffer(),然后读入下一字符,再判断再存入数组,直到一行全存入数组,然后返回主程序,用输出语句输出刚才存入数组的一行字符;
(3)如果没有到文件尾,则重复第(2)步,直到文件结束,则退出主程序,完成任务!
[程序要求]:
1) 首先在E盘上建立一个A.c文件,文件内容如下:
A.c文件内容:
main()
{ int a,b ,c;
a = 10; b=20;
c=a+b;
}
2)然后用C语言编写 一个输入、扫描程序,实现将E盘上建立的文件内容读入缓冲区,并在屏幕上输出该文件内容,要求运行的输出结果与输入的文件内容相同。运行和调式程序,看输出的文件内容是否和输入的格式一样。
本次实验主要熟悉用C语言实现文件的输入和输出过程,目的就是让同学了解如何实现从键盘输入字符串并写入文件中,然后从文件中读出字符,并按照输入的格式输出在屏幕上。
源程序: 输入、扫描程序源代码(仅供参考):
# include
# include
# include
int i;
FILE *fp;
char buffer[256];
//声明变量
int readbuffer() //读字符子程序开始
{
int j=0;
char ch;
while(j<256)
{
ch=fgetc(fp);
if (ch=='\n') //字符变量的内容是回车符吗?
{
i=j;return 0; //是回车符,保存字符个数返回0。
} // if
buffer[j]=ch; //不是回车符,把字符变量的内容存入数组buffer(),字符个数加1。
++j;
} // While
return 1;
} //子程序结束
main() //main()开始
{
if((fp=fopen("d:\\a.c","r"))==NULL) //文件是否为NULL,这里的路径必须用两个斜杠’\\’ ,其中一个是C语言中的格式符。
{
printf("THE FILE DOESN’T OPEN!"); //如果是,则输出错误提示。
exit(0);
}
while(!feof(fp)) //到文件尾否,到文件尾feof()函数则返回非零值,循环结束。
{
int j;
j=0;
readbuffer(); //如果没有到文件尾,则读入一个字符
while(j
设计
领导形象设计圆作业设计ao工艺污水处理厂设计附属工程施工组织设计清扫机器人结构设计
要求:利用状态图或状态表相关理论,利用有限自动机理论。
2、 功能要求:输入一个单行无空格的字符串(以“#”号结束),如果该字符串是一个合法的输入,则显示“接受”,否则显示“不接受”。
3、 输入/输出示例(以无符号定点实数为例):(1)输入:“3.14”,输出:“接受”;(2)输入:“3.1.4”,输出:“不接受”;(3)输入:“3ab”,输出:“不接受”。
[实验提示]:
1、无符号数的BNF描述如下:
0.<无符号数> ∷=<无符号数整数> | <无符号数实数>
1.<无符号数实数> ∷=<无符号数整数>.<数字串>[E<比例因子>] | <无符号数整数>[E<比例因子>]
2.<比例因子>∷=<有符号数整数>
3.<有符号数整数>∷=[<正负号>]<无符号数整数>
4.<正负号> ∷=+|-
5.<无符号数整数> ∷=<数字串>
6.<数字串> ∷= <数字>{<数字>}
7.<数字> ∷= 0|1|2|…|9
2、根据G[<无符号数>]文法构造成状态转换图(有穷自动机),见图1。
图1
例:一个无符号定点小数的有穷自动机状态图:见图2
图2
3、构造状态矩阵;将有穷自动机的状态S1 S2 ……Sn及输入的字a1 a2 ……am 构成一个n*m的矩阵。
1)根据状态矩阵设计出一个词法
分析
定性数据统计分析pdf销售业绩分析模板建筑结构震害分析销售进度分析表京东商城竞争战略分析
程序识别无符号数。
2)扫描无符号数,根据文法给出无符号数出错的位置。
[实验报告]:
1、写出无符号数词法分析的思想。
2、画出算法流程图。
3、写出调试程序出现的问题及解决的方法。
4、打印实验报告及程序清单。
5、报告给出测试的结果。
根据有限自动机原理设计出无符号定点小数的状态表:
行的下标值表示当前状态;列的下标值表示输入的字符即数字或小数点(设0表示数字,1 表示小数点)。
列行
0
数字
1
小数点
0
1
2
1
1
2
2
3
-1
3
3
-1
第0列上的元素值表示为输入数字的后继状态;第1列上的元素值为输入小数点的后继状态;
第i行(也就是行号)表示第i个状态,该行上对应列上的元素值是输入数字或小数点的后继状态。
有了状态表后就可以构造出一个两维数组state,从状态表可以看出这是一个4行2列的数组。
例:在程序中设计一个两维数组state来构造一个静态状态表,将状态表中的数赋予两维数组。
State[4][2]={{1,2},{1,2},{3,-1},{3,-1}};
状态表中行0,1,2,3表示状态,-1表示没有此状态,其中1表示整数部分的状态,2表示小数点的状态,3表示小数部分的状态。
程序中设变量S为为状态,初始状态s=0,d变量表示输入的字符,当输入字符是0-9的数字d=0,输入字符是小数点则d=1。根据状态s和d就可以取出他的后继状态s=state[s][d],判断后继状态s的值就可识别无符号定点实数。
设置一个表示终态标志数组int Q[s ] = {0,1,0,1};其中列号表示状态,对应的元素值为终态标志,0非终态,1终态。
从状态图中可以看到,只有在1和3状态下(也就是在输入数字时)出现正常结束,所以一列和三列上对应的元素值设为1。
试验示例:有限自动机的运行
程序功能:
利用状态表和有限自动机的运行原理,识别一个输入串是否为一个有效的无符号定点实数。
例: 输入:1#
输出:接受
输入:3.14#
输出:接受
输入:3ab#
输出:不接受
输入:1.2.3
输出:不接受
输入数据要求: 不能有空格,以'#'结束(在本程序也可以不用'#'结束)。
输出要求: 如果是无符号定点实数,显示“接受”;否则显示“不接受”。
注:同学们可以将状态表改变成识别“无符号实数”的有限自动机的状态表,编写程序、调试、运行。
实验三 词法分析处理(查添符号表)
学时数:4
[实验内容]:
1、查添符号表(标识符为以字母开头的字母数字串)。
2、读入标识符,若表中已有该标识符,则取出其在表中的位置,输出该标识符极其编号;否则产生一个新的编号,连同标识符一起添入名表;最后输出标识符表。
[实验目的]:
1、 了解符号表的几种结构,掌握符号表的存取方法。
2、 了解编译时如何对标识符进行处理。
3、掌握词法扫描,查填符号表.
[实验要求]:
1、 从键盘上输入标识符,标识符之间用逗号隔开,最后以分号结束(也可以用其他符号做结束标志)。 如:a1,b,x1,x2,y,ac2;
2、编号从100开始,最后输出的标识符不能有重复出现;
3、标识符的长度必须小于或等于8个字符。
[实验步骤]:
1、 根据标识符的文法规则,画出标识符的状态转换图。
2、 画出读取标识符的程序框图。
3、 写出程序,上机调试并输出结果。
[实验提示]:
1、标识符的BNF描述如下:
0.<标识符> ∷=<字母> { <字母> | <数字>}
1.<字母>∷=A|B|C|…|Z|a|b|c|…|z
2. <数字> ∷= 0|1|2|…|9
2、画出标识符的状态转换图,设计出一个词法分析程序识别出标识符。