永发信息网

编译原理中的词法分析需要进行错误报告吗

答案:2  悬赏:70  手机版
解决时间 2021-12-18 19:35
编译原理中的词法分析需要进行错误报告吗?还是应该一并在语法分析中给出。
如果需要,那么需要判断哪几类错误?
最佳答案
词法分析中需要进行处理和报告的错误为:源程序中出现的不符合文法的字符,标识符等等。
这些一定要在词法分析中完成,搁到后面会很麻烦。
其余错误,如类型不匹配,返回值出错,语句语法错误等,在语法分析过程中进行。
全部回答
编译的词法分析,一般是先画一个状态转换图,一般是有多少分支,就有多少if语句,分支里面再分(可能有循环语句)。注意记住词的类别和词的字符串,请以以下代码为例,理会一下词法分析的大致过程。 while(s[i]!='#') { while(s[i]==' '||s[i]=='\t'||s[i]=='\n') { if(s[i]=='\n') line++; i++; } if(s[i]=='#') break; j=i; if(s[i]>='a'&&s[i]<='z'||s[i]>='a'&&s[i]<='z') { i++; while(s[i]>='a'&&s[i]<='z'||s[i]>='a'&&s[i]<='z'||s[i]>='0'&&s[i]<='9') i++; if((i-j)==2&&s[j]=='i'&&s[j+1]=='f') { strcpy(dancishuzu[dancigeshu].name,"if"); dancishuzu[dancigeshu].bianhao=4; dancigeshu++; } else if((i-j)==3&&s[j]=='i'&&s[j+1]=='n'&&s[j+2]=='t') { strcpy(dancishuzu[dancigeshu].name,"int"); dancishuzu[dancigeshu].bianhao=2; dancigeshu++; } else if((i-j)==3&&s[j]=='f'&&s[j+1]=='o'&&s[j+2]=='r') { strcpy(dancishuzu[dancigeshu].name,"for"); dancishuzu[dancigeshu].bianhao=6; dancigeshu++; } else if((i-j)==4&&s[j]=='m'&&s[j+1]=='a'&&s[j+2]=='i'&&s[j+3]=='n') { strcpy(dancishuzu[dancigeshu].name,"main"); dancishuzu[dancigeshu].bianhao=1; dancigeshu++; } else if ((i-j)==4&&s[j]=='c'&&s[j+1]=='h'&&s[j+2]=='a'&&s[j+3]=='r') { strcpy(dancishuzu[dancigeshu].name,"char"); dancishuzu[dancigeshu].bianhao=3; dancigeshu++; } else if ((i-j)==4&&s[j]=='e'&&s[j+1]=='l'&&s[j+2]=='s'&&s[j+3]=='e') { strcpy(dancishuzu[dancigeshu].name,"else"); dancishuzu[dancigeshu].bianhao=5; dancigeshu++; } else if ((i-j)==5&&s[j]=='w'&&s[j+1]=='h'&&s[j+2]=='i'&&s[j+3]=='l'&&s[j+4]=='e') { strcpy(dancishuzu[dancigeshu].name,"while"); dancishuzu[dancigeshu].bianhao=7; dancigeshu++; } else{ dancishuzu[dancigeshu].bianhao=10; count=0; while(j='0'&&s[i]<='9') { while(s[i]>='0'&&s[i]<='9') i++; dancishuzu[dancigeshu].bianhao=11; count=0; while(j') { if(s[i+1]=='=') { dancishuzu[dancigeshu].bianhao=28; strcpy(dancishuzu[dancigeshu].name,">="); dancigeshu++; i+=2; } else { i++; dancishuzu[dancigeshu].bianhao=26; strcpy(dancishuzu[dancigeshu].name,">"); dancigeshu++; } } else if(s[i]=='<') { if(s[i+1]=='=') { dancishuzu[dancigeshu].bianhao=29; strcpy(dancishuzu[dancigeshu].name,"<="); dancigeshu++; i+=2; } else { i++; dancishuzu[dancigeshu].bianhao=27; strcpy(dancishuzu[dancigeshu].name,"<"); dancigeshu++; } } else if(s[i]=='!'&&s[i+1]=='=') { dancishuzu[dancigeshu].bianhao=31; strcpy(dancishuzu[dancigeshu].name,"!="); dancigeshu++; i+=2; } else { printf("\nline:%derror!",line); i++; return; } }
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
如图,过矩形ABCD的四个顶点作对角线AC、BD的
请教高手怎么利用花生壳软件实现远程监控?
Fendi的童装怎么样?中国哪里可以买到
从店家的销量上来看苹果iphone6plus深空灰和
冬,像一双倦游的翅膀,悄悄地在暮色里归去。
iphone拆过还能拿去售后维修吗
清安派出所地址在哪?我要去那里办事
我是职业学校毕业的可以报考什么样的大学
有没有谁骑电动车会打瞌睡的
查定征收、查验征收和定期定额征收有什么本质
我是学建筑的,主要从事土建这方面,想找一份
华硕(ASUS)E402BP悟空本比其他两千多块版本多
依次填入下面一段文字横线处的语句,衔接最恰
小小百家讲坛观后感350字2015年9月20日
爱情公寓4里一菲对诺澜嚷:我就是喜欢曾小贤
推荐资讯
法师单手武器附魔问题
六扇门风云紫霞神功要9层要多少修为
宋茜有外八字吗
单选题目前我国污染范围最大、中心强度最高的
劳动者上年每月的工资为3300元,如果劳动者所
在一个圆形水池的中央修建一个半径6米的圆形
弹吉他的男生帅还是打篮球,踢足球的男生帅?
山东单县天瑞花园小区怎么样?房价多少?貌似是
想给电动车换块新电池,超威和天能哪个好呢?
单选题孔子曰:“知之者不如好之者,好之者不
阳光让我们看到了多彩的世界,星光让我们知道
电话中的话筒和听筒的作用是A.话筒、听筒都是
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?