词法分析
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了词法分析相关的知识,希望对你有一定的参考价值。
4.运行结果及分析
一般必须配运行结果截图,结果是否符合预期及其分析。
(截图需根据实际,截取有代表性的测试例子)
3.主要程序段及其解释:
实现主要功能的程序段,重要的是程序的注释解释。
#include<stdio.h>
#include<string.h>
#include<iostream>
char pro[80],gain[8];
char ch;
int syn,p,m=0,n,row,sum=0;
char *rwtab[6]={"begin","if","then","while","do","end"};
void scaner()
{
for(n=0;n<8;n++) gain[n]=NULL;
ch=pro[p++]; /将数组中的字符逐个取出/
while(ch==‘ ‘)
{
ch=pro[p];
p++;
}
if((ch>=‘a‘&&ch<=‘z‘)||(ch>=‘A‘&&ch<=‘Z‘)) /对输入的字符串的a~z和A~Z进行识别/
{
m=0;
while((ch>=‘0‘&&ch<=‘9‘)||(ch>=‘a‘&&ch<=‘z‘)||(ch>=‘A‘&&ch<=‘Z‘))
{
gain[m++]=ch;
ch=pro[p++];
}
gain[m++]=‘\\0‘;
p--;
syn=10;/当字符为a~z和A~Z,0~9时,syn为10/
for(n=0;n<6;n++) //将识别出来的字符和已定义的标示符作比较
if(strcmp(gain,rwtab[n])==0)
{
syn=n+1;//得出相应种别
break;
}
}
else if((ch>=‘0‘&&ch<=‘9‘)) //数字 {
{
sum=0;
while((ch>=‘0‘&&ch<=‘9‘))
{
sum=sum*10+ch-‘0‘;
ch=pro[p++];
}
}
p--;
syn=11;
if(sum>100000)
syn=-1;
}
else switch(ch) //其他字符 {
case‘<‘:m=0;gain[m++]=ch;
ch=pro[p++];
if(ch==‘>‘)
{
syn=21;
gain[m++]=ch;
}
else if(ch==‘=‘)
{
syn=22;
gain[m++]=ch;
}
else
{
syn=23;
p--;
}
break;
case‘>‘:m=0;gain[m++]=ch;
ch=pro[p++];
if(ch==‘=‘)
{
syn=24;
gain[m++]=ch;
}
else
{
syn=20;
p--;
}
break;
case‘:‘:m=0;gain[m++]=ch;
ch=pro[p++];
if(ch==‘=‘)
{
syn=18;
gain[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;
}
}
int main()
{
p=0;
row=1;
cout<<"Please input string:"<<endl;
do
{
cin.get(ch);
pro[p++]=ch; /ch录入数组中/
}
while(ch!=‘#‘); /*输入分析的词*/
p=0;
do
{
scaner(); /*对每个字符进行分析返回syn值,确定种别*/
switch(syn)
{
case 11: cout<<"("<<syn<<","<<sum<<")"<<endl; break;
case -1: cout<<"Error in row "<<row<<"!"<<endl; break;
case -2: row=row++;break;
default: cout<<"("<<syn<<","<<token<<")"<<endl;break;
}
}
while (syn!=0);/当函数返回syn=0时,结束!/
}
四、实验总结
心得体会,实验过程的难点问题及其解决的方法。
通过这次实验,让我加深了对词法分析的理解,一开始的时候有点明白,但是不知如何完成实验,通过上网查阅资料,并对其研究与理解,明白了怎么完成这个实验,在这个实验的过程中,我深刻地理解了词法分析的意义与作用,使我得到了很大的锻炼。
以上是关于词法分析的主要内容,如果未能解决你的问题,请参考以下文章