文档详情

实验一词法分析实验报告

cn****1
实名认证
店铺
DOC
108KB
约9页
文档ID:498179606
实验一词法分析实验报告_第1页
1/9

实验一 词法分析一、实验目的通过设计编制调试一个具体的词法分析程序,加深对词法分析原理的理解并掌握在对程序设计语言源程序进行扫描过程中将其分解为各类单词的词法分析方法编制一个读单词过程,从输入的源程序中,识别出各个具有独立意义的单词,即基本保留字、标识符、常数、运算符、分隔符五大类并依次输出各个单词的内部编码及单词符号自身值〔遇到错误时可显示"Error",然后跳过错误部分继续显示二、实验要求使用一符一种的分法关键字、运算符和分界符可以每一个均为一种标识符和常数仍然一类一种三、实验内容功能描述:1、    待分析的简单语言的词法〔1    关键字:begin  if   then   while   do   end〔2    运算符和界符::=   +   –   *   /   <   <=   <>   >   >=   =   ;   <   >   #〔3 其他单词是标识符〔ID和整型常数〔NUM,通过以下正规式定义:ID=letter〔letter| digit*NUM=digit digit *〔4    空格由空白、制表符和换行符组成空格一般用来分隔ID、NUM,运算符、界符和关键字,词法分析阶段通常被忽略。

2、  各种单词符号对应的种别码图 1程序结构描述:变量初始化忽略空格是否输入结束? 返回 是 否 是 调用scanner<>字母拼字符串数 其他运算符、 符号界符等符号是否关键字?返回拼数 否对不同符号给出相应的syn值报错syn=10 是syn=1111syn为对应关键字的单词种别码图 2四、实验结果输入begin x:=9: if x>9 then x:=2*x+1/3; end # 后经词法分析输出如下序列:<:17><= 18><9 11><;26>…… 如图3所示:图3输入private x:=9;if x>0 then x:=2*x+1/3; end#后经词法分析输出如下序列:<:17><= 18><9 11><;26>…… 如图4所示:图4显然,private是关键字,却被识别成了标示符,这是因为图1中没有定义private关键字的种别码,所以把private当成了标示符。

输入private x:=9;if x>0 then x:=2*x+1/3; end#后经词法分析输出如下序列:<:17><= 18><9 11><;26>…… 如图5所示图5显然,没有在图一中定义种别,所以输出了"Error in row 1!"的报错信息五、词法分析程序的C语言程序源代码void scaner<>{/* 共分为三大块,分别是标示符、数字、符号,对应下面的 if else if 和 else */if<='a'&&ch<='z'>||='A'&&ch<='Z'>> //可能是标示符或者变量名 { m=0;while<='0'&&ch<='9'>||='a'&&ch<='z'>||='A'&&ch<='Z'>> { token[m++]=ch; ch=prog[p++]; } token[m++]='\0'; p--; syn=10;for //将识别出来的字符和已定义的标示符作比较, if==0> { syn=n+1;break; } }elseif<='0'&&ch<='9'>> //数字 { { sum=0;while<='0'&&ch<='9'>> { sum=sum*10+ch-'0'; ch=prog[p++]; } } p--; syn=11;if32767> syn=-1; }elseswitch //其他字符 {case'<':m=0;token[m++]=ch; ch=prog[p++];if'> { syn=21; token[m++]=ch; }elseif { syn=22; token[m++]=ch; }else { syn=23; p--; }break;case'>':m=0;token[m++]=ch; ch=prog[p++];if { syn=24; token[m++]=ch; }else { syn=20; p--; }break;case':':m=0;token[m++]=ch; ch=prog[p++];if { syn=18; token[m++]=ch; }else { syn=17; p--; }break;case'*':syn=13;token[0]=ch;break;case'/':syn=14;token[0]=ch;break;case'+':syn=15;token[0]=ch;break;case'-':syn=16;token[0]=ch;break;case'=':syn=25;token[0]=ch;break;case';':syn=26;token[0]=ch;break;case'<':syn=27;token[0]=ch;break;case'>':syn=28;token[0]=ch;break;case'#':syn=0;token[0]=ch;break;case'\n':syn=-2;break;default: syn=-1;break; }}六、实验总结这个实验花费了一节课的时间,通过本次试验,让我了解到如何设计、编制并调试词法分析程序,加深对词法分析原理的理解;熟悉了构造词法分析程序的相关原理,。

这个程序只能识别特定的几个关键字,假如想要识别另外的关键字还要再一次修改源程序,程序的扩展性不高,还需要改进!. .。

下载提示
相似文档
正为您匹配相似的精品文档