永发信息网

修改词法分析器代码

答案:1  悬赏:20  手机版
解决时间 2021-03-30 17:02
修改词法分析器代码
最佳答案
把你改了好几处细小的地方。。你自己看看是否已经满足你的需求
#include"stdio.h"
#include"string.h"
#include"ctype.h"
#include"stdlib.h"

char prog[100],token[10],ch;
int syn,p,m,n,sum;
char *rwtab[9]={"int","void","main","if","then","while","do","continue","break"};
void scaner();
main()
{
p=0;
printf(" please input a string (end with '#'): \n");
scanf("%c",&ch);
while(ch!='#')
{
prog[p++]=ch;
scanf("%c",&ch);
}
p=0;
do
{
scaner();
switch(syn)
{
case 3:printf("( %d %13d )\n",syn,sum);
break;
case -1:printf("you have input a wrong string\n");
getchar();
exit(0);
default: printf("( %d %s )\n",syn,token);
break;
}
}while(prog[p]!=0);
}

void scaner()
{
sum=0;
for(m=0;m<10;m++)
token[m]=0;
ch=prog[p];
m=0;
while((ch==' ')||(ch=='\n'))
{
ch=prog[++p];
syn=-1;
}
if(isalpha(ch))
{
while(isalpha(ch))
{
token[m++]=ch;
ch=prog[++p];
}
syn=2;
for(n=0;n<9;n++)
if(strcmp(token,rwtab[n])==0)
{
syn=1;
break;
}
}
else if(isdigit(ch))
{
while(isdigit(ch))
{
sum=sum*10+ch-'0';
ch=prog[++p];
}
syn=3;
}
else switch(ch)
{
case '+': syn=4;
token[m++]=ch;
p++;
token[m++]='\0';
break;
case '\"': syn=5;
token[m++]=ch;
p++;
token[m++]='\0';
break;
}
}
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
求四季变化的FLASH的动画。。。。拜托
为什么石头的长和宽是2dm?
佛教右旋海螺如何分辨
当兵体检的时候测视力时乱比,故意做一些事情
当|x|十2=|x一2|时,写出x的两个值
83年牡丹牌香烟卖多少钱一包?
我喜欢的女孩子老是喜欢在我的身边,提她的男
中国联通庵东营业厅在哪里啊,我有事要去这个
1吨每小时污水处理设备多少钱
苹果7公开版能用电信卡吗
饮用泡一年土布袋蛇酒还有毒吗?
请问日志返回200跟304有什么区别
圣维特卡本尼苏维翁红葡萄酒怎么样
大雷灯具窗帘地址在哪,我要去那里办事
杰仔商店(沙涌大街)在哪里啊,我有事要去这个
推荐资讯
美发55/43和5/43什么区别
安徽哪里有好玩的地方
经常用冷风吹头好不好?
寻仙手游蓝田日暖时装怎么获得方法途径介绍
拖地时在地上发现的 想问这是什么呢?蟑螂粪
百田森女鞋都是真皮的吗?
膝盖太黑了,怎么快速简单的让膝盖变白
做烩面要加多少食用碱
大家对即将读研的新生有哪些建议和忠告
lol峡谷之巅怎么30级的最新相关信息
mn2+和clo3-反应生成什么
在鑫灵睿买了个金镶玉 是抽奖 抽了2000抵用卷
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?