实验一词法分析报告

实验一、词法分析实验

专业:商业软件工程三班       姓名:郑锦诚      学号:201506110198

一、        实验目的

词法分析是编译的第一阶段,它的主要任务是从左至右逐个字符地对源程序进行扫描,产生一个个单词序列,用于语法分析。

二、        实验内容和要求

让用户输入一段程序段,然后逐个读取字符,将它们拼在一起,获取一个有意义的单词或符号,识别出单词或符号种别以及自身的值,并输出。

三、        实验方法、步骤及结果测试

  1. 1.      源程序名:压缩包文件(rarzip)中源程序名词法分析.c

可执行程序名:词法分析.exe

  1. 2.      原理分析及流程图

主要总体设计问题:本次实验程序是用顺序存储结构,关键函数为mor,没有参数,也没有返回值,全用全局变量来实现运行代码,多次使用循环语句while、do whlie以及for,也使用了判断语句if、else判断是否为符号时使用了switch语句进行执行判断。

  1. 3.      主要程序段及其解释:

void mor()//主要函数的调用

{

sum=0;  //先把sum赋值为0

ch=a[p++];  //把有程序段数组a的字符赋给ch,p再加一

m=0;      //把m赋值为0

while((ch==‘ ‘)||(ch==‘\n‘)||(ch==‘\t‘))   ch=a[p++];  //判断ch是否为空格,若是则进行判断下一个字符,p再加一

if(((ch<=‘z‘)&&(ch>=‘a‘))||((ch<=‘Z‘)&&(ch>=‘A‘)))

{//判断字符ch是否是字母,若是则赋值给数组b,ch指向判断下一个字符是否是字母或是数字,并且p加一

while(((ch<=‘z‘)&&(ch>=‘a‘))||((ch<=‘Z‘)&&(ch>=‘A‘))||((ch>=‘0‘)&&(ch<=‘9‘)))

{

b[m++]=ch;

ch=a[p++];

}

p--; //循环结束后,p减一,为了防止漏掉字符

syn=10; //先把syn赋值为10,再进行判断是否是保留字或是关键字

b[m++]=‘\0‘;//并把数组b的下一位赋值为\0,这样防止系统出现混乱

for(n=0;n<6;n++)  //循环6次进行判断是否为保留字

if(strcmp(b,word[n])==0)    //关键字数组比较,相同则表示为关键字,种别码即为下标值加一

{

syn=n+1;

return;

}

}

else if((ch>=‘0‘)&&(ch<=‘9‘))  //或者字符ch是数字的

{

while((ch>=‘0‘)&&(ch<=‘9‘))  //再次判断下一个字符是否为数字

{

sum=sum*10+ch-‘0‘;    //将字符型转化为整形sum

ch=a[p++];  //字符ch指向下一个程序段数组a的字符

}

p--;  //循环结束后,p减一,为了防止漏掉字符

syn=11;  //数字的种别码是11

}

else    //else语句内识别除关键字、标识符、数字以外的其他字符

{

switch(ch)

{

case ‘+‘:  //字符ch是+的,syn赋值为13

syn=13;

b[m++]=ch;  //字符ch指向程序段数组a的下一个字符,p加一

break;

case ‘-‘:   /字符ch是-的,syn赋值为14

syn=14;

b[m++]=ch;//字符ch指向程序段数组a的下一个字符,p加一

break;

case ‘*‘:

syn=15;

b[m++]=ch;//字符ch指向程序段数组a的下一个字符,p加一

break;

case ‘/‘:

syn=16;

b[m++]=ch; /字符ch指向程序段数组a的下一个字符,p加一

break;

case ‘:‘:

b[m++]=ch;

ch=a[p++];//字符ch指向程序段数组a的下一个字符,p加一

if(ch==‘=‘)  //判断字符ch是否为=,若是则赋值到数组b中

{

syn=18;

b[m++]=ch;

}

else  //否则赋值为18,再p减一

{

syn=18;

p--;

}

break;

case ‘!‘: //为!则结束程序

syn=-2;

break;

default:  //输入一个错误的字符的时候

syn=-1;

break;

}

}

b[m++]=‘\0‘;  //把数组b的下一位赋值为\0

}

  1. 4.      运行结果及分析

结果符合预期,词法分析程序先识别字母if进行判断,符合字符数组Word的保留字进行输出种别码以及自身的值,遇到空格就指向下一位,从而执行i,以此类推,当识别到!时程序结束。

四、        实验总结

难点问题:1.编译时出现死循环或不循环。

2.输入保留字或关键字时,输出的结果没有符合预期,有时保留字变成关键字,关键字变成保留字。

解决方法:1.循环嵌套出错以及循环条件&&,||的不规范使用导致的,已修改好。

2.在数组b的下一位等于\0,就可以解决了。

心得体会:经过这次的实践,我认识到自己的不足以及粗心,在今后的学习道路上相信会更加的出彩,多找到自己的不足,才能更好的加强自己的能力。

时间: 2024-10-12 03:28:30

实验一词法分析报告的相关文章

实验一&#160;&#160;词法分析程序045

实验一  词法分析程序实验 专业 计算机科学与技术   姓名 邹汉辉  学号 201508030045 一.实验目的 1. 编制一个词法分析程序 二. 实验内容和要求 1. 输入:源程序字符串 2. 输出:二元组(种别,单词本身) 3. 待分析语言的词法规则 三. 实验方法.步骤及结果测试 1.  源程序名:压缩包文件(rar或zip)中源程序名 cifafenxi.c 可执行程序名:cifafenxi.exe 2.  原理分析及流程图 3.  主要程序段及其解释: #include<stdio

哈工大软件学院编译原理实验1——词法分析

这次实验被"过来人"们定位非常easy,实验内容例如以下: ----------------------------------------------------------------------------------- 对例如以下工作进行展开描写叙述 (1) 给出语言的词法规则描写叙述 · 标识符.keyword.整常数.字符常数.浮点常数 · 单界符:+,-,×,;,- · 双界符:/*,:=,>=,<=,!=,- · 凝视 (2) 针对这样的单词的状态转换图和程

20172304 《程序设计与数据结构》实验三总结报告

20172304 <程序设计与数据结构>实验三总结报告 课程:<程序设计与数据结构> 班级:1723 姓名:段志轩 学号:20172306 实验教师:王志强 助教:刘伟康和张旭升 实验日期:2018年5月28日 必修/选修: 必修 实验内容 实验一代码规范(http://www.cnblogs.com/rocedu/p/4795776.html), Eclipse的内容替换成IDEA 参考 (http://www.cnblogs.com/rocedu/p/6371315.html#

实验一 词法分析实验报告

实验一.词法分析实验 专业:商业软件工程2班  姓名 别博文  学号201606110175 一. 实验目的        编制一个词法分析程序. 二. 实验内容和要求 对字符串表示的源程序,从左到右进行扫描和分解,根据词法规则,识别出一个一个具有独立意义的单词符号,以供语法分析之用 发现词法错误,则返回出错信息.. 三. 实验方法.步骤及结果测试  源程序名:压缩包文件(rar或zip)中源程序名 ceshi.c 可执行程序名:ceshi.exe 主要程序段及其解释: 实现主要功能的程序段,重

实验一词法分析实验报告

一.        实验目的 (1)    理解词法分析在编译程序中的作用. (2)    加深对有穷自动机模型的理解. (3)    掌握词法分析程序的实现方法. (4)    用C语言对一个简单语言的子集编制一个一遍扫锚的编译理解,掌握编译程序的实现方法和技术. 二.        实验内容和要求 1,待分析的简单语言的词法 2,各种单词符号对应的种别码. 3,词法分析程序的功能(输入,输出). 三.        实验方法.步骤及结果测试 1.      源程序名:压缩包文件(rar或zi

实验1 词法分析

格式说明:排版时注意按此模板的字体,字号和行距. 报告提交和打印输出时请去掉此框. 实验一.词法分析实验 商软1班   周展鹏  201506110114 一.        实验目的        通过设计一个词法分析程序,对词法进行分析,加强对词法的理解,掌握对程序设计语言的分解和理解. 二.        实验内容和要求 在原程序中输入源代码 对字符串表示的源程序 从左到右进行扫描和分解 根据词法规则 识别出一个一个具有独立意义的单词符号 以供语法分析之用 发现词法错误,则返回出错信息 在

实验一词法分析程序

一.        实验目的 编制一个词法分析程序 二.        实验内容和要求 输入:源程序字符串 输出:二元组(种别,单词本身) 待分析语言的词法规则 三.        实验方法.步骤及结果测试 1.      源程序名:压缩包文件(rar或zip)中源程序名 cifafenxi.c  cifafenxi.exe 2.      原理分析及流程图 3.      主要程序段及其解释: do { scanf("%s\n",input); i=0; while(input[i]

0930 实验一 词法分析

一.实验目的: 编写一个词法分析程序 二.实验要求: ①输入源程序字符串 ②输出二元组(种别,单词符号本身) 三.各种单词符号对应的种别码(删减版) 四.程序代码 1 #include<stdio.h> 2 #include<string.h> 3 void F(char c,char b); 4 void word(char a[]); 5 void number(char a[]); 6 int i; //定义全局变量i 7 int s=1; //用来记录是否存在非法字符 8

github实验三结对报告

一.题目简介 本项目需要实现一个具有四则运算的计算器,能够实现基本的加.减.乘.除运算,以及其他的辅助功能(阶乘.正弦.余弦.指数运算):界面简洁实用,模拟Windows中的计算器程序,要提供主要的设计思路.类的设计.本程序中Calculator是主类,main方法里会建立一个Calculator对象.Signs,Clear,Num,Dot类为内部类,是一个监听器类. 二.代码地址 https://github.com/ZHANGPING88/Calculator 三.结对分工情况 本次实验是我