?? lian.c
字號(hào):
s[length-i1]='\0';
strcpy(s,c1);
return 'i';
}
}
break;
case 17:
c=nextchar(&i1,s);
if(digit(c))
state=18;
else
{
strcpy(c1,&s[i1]);
s[length-i1]='\0';
strcpy(s,c1);
return 'i';
}
break;
case 18:
if(i1==length-1)
state=19;
else
{
c=nextchar(&i1,s);
if(digit(c))
state=18;
else
{
strcpy(c1,&s[i1]);
s[length-i1]='\0';
strcpy(s,c1);
return 'i';
}
}
break;
case 19:
strcpy(c1,&s[i1]);
s[length-i1]='\0';
strcpy(s,c1);
return 'i';
case 20:
strcpy(c1,&s[i1]);
s[length-i1]='\0';
strcpy(s,c1);
return 'i';
case 21:
strcpy(c1,&s[i1]);
s[length-i1]='\0';
strcpy(s,c1);
return 'i';
case 22:
if(i1==length-1)
state=25;
else
{
c=nextchar(&i1,s);
if(c=='+')
state=26;
else
{
strcpy(c1,&s[i1]);
s[length-i1]='\0';
strcpy(s,c1);
return '+';
}
}
break;
case 23:
if(i1==length-1)
state=27;
else
{
c=nextchar(&i1,s);
if(c=='=')
state=28;
else
{
strcpy(c1,&s[i1]);
s[length-i1]='\0';
strcpy(s,c1);
return '-';
}
}
break;
case 24:
c=nextchar(&i1,s);
strcpy(c1,&s[i1]);
s[length-i1]='\0';
strcpy(s,c1);
return '{';
case 25:
c=nextchar(&i1,s);
strcpy(c1,&s[i1]);
s[length-i1]='\0';
strcpy(s,c1);
return 'i';
case 26:
c=nextchar(&i1,s);
strcpy(c1,&s[i1]);
s[length-i1]='\0';
strcpy(s,c1);
return '&';
case 27:
c=nextchar(&i1,s);
strcpy(c1,&s[i1]);
s[length-i1]='\0';
strcpy(s,c1);
return '-';
case 28:
c=nextchar(&i1,s);
strcpy(c1,&s[i1]);
s[length-i1]='\0';
strcpy(s,c1);
return 'i';
case 29:
c=nextchar(&i1,s);
strcpy(c1,&s[i1]);
s[length-i1]='\0';
strcpy(s,c1);
return '*';
case 30:
c=nextchar(&i1,s);
strcpy(c1,&s[i1]);
s[length-i1]='\0';
strcpy(s,c1);
return '}';
case 31:
c=nextchar(&i1,s);
strcpy(c1,&s[i1]);
s[length-i1]='\0';
strcpy(s,c1);
return '(';
case 32:
c=nextchar(&i1,s);
strcpy(c1,&s[i1]);
s[length-i1]='\0';
strcpy(s,c1);
return ')';
case 33:
c=nextchar(&i1,s);
strcpy(c1,&s[i1]);
s[length-i1]='\0';
strcpy(s,c1);
return '[';
case 34:
c=nextchar(&i1,s);
strcpy(c1,&s[i1]);
s[length-i1]='\0';
strcpy(s,c1);
return ']';
case 35:
c=nextchar(&i1,s);
strcpy(c1,&s[i1]);
s[length-i1]='\0';
strcpy(s,c1);
return '/';
case 36:
c=nextchar(&i1,s);
strcpy(c1,&s[i1]);
s[length-i1]='\0';
strcpy(s,c1);
return ';';
default:
return '0';
}
}
}
return '$';
}
/*int printf1(char s[],struct TTT ttt[],int i1,int k2)
{
int case1,th,k1;
char s4[10];
k2=i1;
th=to_next(s,i1,k2);
for(case1=0;case1<14;case1++)
{
if(strcmp(s,ttt[case1].f)==0)
th=30;
}
switch(th)
{
case 0:
printf("編譯錯(cuò)誤\n");
break;
case 2:
printf("小于等于號(hào)\n");
break;
case 3:
printf("不等于號(hào)\n");
break;
case 4:
printf("小于號(hào)\n");
break;
case 5:
printf("等于號(hào)\n");
break;
case 7:
printf("大于等于號(hào)\n");
break;
case 8:
printf("大于號(hào)\n");
break;
case 11:
printf("標(biāo)識(shí)符");
i1--;
for(k1=0;k1<=i1;k1++)
s4[i1]=s[i1];
printf("%s",s4);
strcpy(s4,"i");
break;
case 19:
printf("浮點(diǎn)數(shù)\n");
i1--;
for(k1=0;k1<=i1;k1++)
s4[i1]=s[i1];
printf("%s",s4);
strcpy(s4,"i");
break;
case 20:
printf("整數(shù)\n");
i1--;
for(k1=0;k1<=i1;k1++)
s4[i1]=s[i1];
printf("%s",s4);
strcpy(s4,"i");
break;
case 21:
printf("定點(diǎn)數(shù)\n");
i1--;
for(k1=0;k1<=i1;k1++)
s4[i1]=s[i1];
printf("%s",s4);
strcpy(s4,"i");
break;
case 24:
printf("括號(hào)\n");
i1--;
s4[i1]=s[i1];
printf("%c",s4[i1]);
break;
case 25:
printf("加號(hào)\n");
i1--;
s4[i1]=s[i1];
printf("%c",s4[i1]);
break;
case 26:
printf("加等號(hào)\n");
break;
case 27:
printf("減號(hào)\n");
i1--;
s4[i1]=s[i1];
printf("%c",s4[i1]);
break;
case 28:
printf("減等號(hào)\n");
break;
case 29:
printf("關(guān)鍵字\n");
i1--;
for(k1=0;k1<=i1;k1++)
s4[i1]=s[i1];
printf("%s",s4);
strcpy(s4,"i");
break;
case 30:
printf("乘號(hào)\n");
i1--;
s4[i1]=s[i1];
printf("%c",s4[i1]);
break;
default:
printf("不合法符號(hào)\n");
break;
}
k2=i1;
return k2;
}*/
void setnull(struct zhan *p)
{
p->top=-1;
}
void push(struct zhan *p,char x)
{
p->top++;
p->str[p->top]=x;
p->str[p->top+1]='\0';
}
char pop(struct zhan *p)
{
char b;
b=p->str[p->top];
p->str[p->top]='\0';
p->top--;
return b;
}
void wenfa(char *s,struct zhan *p,struct liu *p1,struct TTT ttt[])
{
int m=0,d=0,a=0,i=0,j=0,of=1,t=0,k2=0,xunhuan=1,k;
char w,c;
char s2[15]="#SERTYFAMOPKXQ";
char s3[22]="#ia+-*/()ftebwr;<&=$";
char s4[43]="";
while(xunhuan==1)
{
c=to_next(s,ttt);
p1->liu1[k2++]=c;
if(p1->liu1[k2-1]=='$')
{
p1->liu1[k2]='\0';
xunhuan=0;
}
}
k=strlen(p1->liu1);
printf("%-8s",p->str);
printf("%-6s",s);
printf("\n");
while(p->str[p->top]!='$')
{
if(p->str[p->top]=='#'||p->str[p->top]=='i'||p->str[p->top]=='='||p->str[p->top]=='+'||p->str[p->top]=='-'||p->str[p->top]=='('||p->str[p->top]==')'||p->str[p->top]=='a'||p->str[p->top]=='*'||p->str[p->top]=='/'||p->str[p->top]=='f'||p->str[p->top]=='t'||p->str[p->top]=='e'||p->str[p->top]=='b'||p->str[p->top]=='w'||p->str[p->top]=='r'||p->str[p->top]==';'||p->str[p->top]=='<'||p->str[p->top]=='&'||p->str[p->top]=='$')
{
if((p->str[p->top])==p1->liu1[m])
{
printf("%-8s",p->str);
for(t=0;t<m;t++)
printf(" ");
for(t=m;t<k;t++)
printf("%c",p1->liu1[t]);
printf("\n");
pop(p);
m++;
}
else
{
of=0;
break;
}
}
else
{
while((s2[i]!=p->str[p->top])&&(i<15))
i++;
while((s3[j]!=p1->liu1[m])&&(j<20))
j++;
if((strcmp(table[i][j],"#")==0)||(j==22))
{
of=0;
break;
}
if((strcmp(table[i][j],"#")!=0)&&(j!=22))
{
d=strlen(table[i][j]);
strcpy(s4,table[i][j]);
printf("%-8s",p->str);
for(t=0;t<m;t++)
printf(" ");
for(t=m;t<k;t++)
printf("%c",p1->liu1[t]);
w=pop(p);
if(strcmp(table[i][j],"#")!=0)
printf(" %c->%s",w,table[i][j]);
printf("\n");
for(a=d-1;a>=0;a--)
push(p,s4[a]);
}
}
i=0;
j=0;
}
if(of==1)
printf("LL(1)分析成功\n");
else
printf("此算法無(wú)法運(yùn)算\n");
printf("\n\n");
}
main()
{
struct zhan *p;
struct liu *p1;
char s[MAX];
char h;
int /*ph=1*/xunhuan=1;
struct TTT ttt[14]={"if","else","for","while","long","int","float","double","char","switch","case","do","return","break"};
do
{
p1=malloc(sizeof(struct liu));
p=malloc(sizeof(struct zhan));
setnull(p);
push(p,'$');
push(p,'S');
printf("請(qǐng)輸入字符:");
gets(s);
strcat(s,"$");
wenfa(s,p,p1,ttt);
printf("是否測(cè)試下一個(gè)單詞,是輸入y,不是輸入n:");
h=getchar();
getchar();
printf("\n\n");
}while(h=='y');
}
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -