📄 main.c
字号:
{
printf("%s ",expression13[j]);
fprintf(out,"%s ",expression13[j]);
}
printf("\n");
fprintf(out,"\n");
break;
case 14:
for(j = 9;j > 1;j--)
{
push(expression14[j],&st) ;
}
for(j =0;j < 10;j++)
{
printf("%s ",expression14[j]);
fprintf(out,"%s ",expression14[j]);
}
printf("\n");
fprintf(out,"\n");
break;
case 15:
for(j = 5;j > 1;j--)
{
push(expression15[j],&st) ;
}
for(j =0;j < 6;j++)
{
printf("%s ",expression15[j]);
fprintf(out,"%s ",expression15[j]);
}
printf("\n");
fprintf(out,"\n");
break;
case 16:
/*for(j = 2;j > 1;j--)
{
push(expression16[j],&st) ;
}*/
for(j =0;j < 3;j++)
{
printf("%s ",expression16[j]);
fprintf(out,"%s ",expression16[j]);
}
printf("\n");
fprintf(out,"\n");
break;
case 17:
for(j = 3;j > 1;j--)
{
push(expression17[j],&st) ;
}
for(j =0;j < 4;j++)
{
printf("%s ",expression17[j]);
fprintf(out,"%s ",expression17[j]);
}
printf("\n");
fprintf(out,"\n");
break;
case 18:
for(j = 3;j > 1;j--)
{
push(expression18[j],&st) ;
}
for(j =0;j < 4;j++)
{
printf("%s ",expression18[j]);
fprintf(out,"%s ",expression18[j]);
}
printf("\n");
fprintf(out,"\n");
break;
case 19:
/*for(j = 2;j > 1;j--)
{
push(expression19[j],&st) ;
}*/
for(j =0;j < 3;j++)
{
printf("%s ",expression19[j]);
fprintf(out,"%s ",expression19[j]);
}
printf("\n");
fprintf(out,"\n");
break;
case 20:
for(j = 3;j > 1;j--)
{
push(expression20[j],&st) ;
}
for(j =0;j < 4;j++)
{
printf("%s ",expression20[j]);
fprintf(out,"%s ",expression20[j]);
}
printf("\n");
fprintf(out,"\n");
break;
case 21:
for(j = 4;j > 1;j--)
{
push(expression21[j],&st) ;
}
for(j =0;j < 5;j++)
{
printf("%s ",expression21[j]);
fprintf(out,"%s ",expression21[j]);
}
printf("\n");
fprintf(out,"\n");
break;
case 22:
/*for(j = 2;j > 1;j--)
{
push(expression22[j],&st) ;
}*/
for(j =0;j < 3;j++)
{
printf("%s ",expression22[j]);
fprintf(out,"%s ",expression22[j]);
}
printf("\n");
fprintf(out,"\n");
break;
case 23:
for(j = 3;j > 1;j--)
{
push(expression23[j],&st) ;
}
for(j =0;j < 4;j++)
{
printf("%s ",expression23[j]);
fprintf(out,"%s ",expression23[j]);
}
printf("\n");
fprintf(out,"\n");
break;
case 24:
for(j = 4;j > 1;j--)
{
push(expression24[j],&st) ;
}
for(j =0;j < 5;j++)
{
printf("%s ",expression24[j]);
fprintf(out,"%s ",expression24[j]);
}
printf("\n");
fprintf(out,"\n");
break;
case 25:
/*for(j = 2;j > 1;j--)
{
push(expression25[j],&st) ;
}*/
for(j =0;j < 3;j++)
{
printf("%s ",expression25[j]);
fprintf(out,"%s ",expression25[j]);
}
printf("\n");
fprintf(out,"\n");
break;
case 26:
for(j = 2;j > 1;j--)
{
push(expression26[j],&st) ;
}
for(j =0;j < 3;j++)
{
printf("%s ",expression26[j]);
fprintf(out,"%s ",expression26[j]);
}
printf("\n");
fprintf(out,"\n");
break;
case 27:
for(j = 2;j > 1;j--)
{
push(expression27[j],&st) ;
}
for(j =0;j < 3;j++)
{
printf("%s ",expression27[j]);
fprintf(out,"%s ",expression27[j]);
}
printf("\n");
fprintf(out,"\n");
break;
case 28:
for(j = 4;j > 1;j--)
{
push(expression28[j],&st) ;
}
for(j =0;j < 5;j++)
{
printf("%s ",expression28[j]);
fprintf(out,"%s ",expression28[j]);
}
printf("\n");
fprintf(out,"\n");
break;
case 29:
for(j = 3;j > 1;j--)
{
push(expression29[j],&st) ;
}
for(j =0;j < 4;j++)
{
printf("%s ",expression29[j]);
fprintf(out,"%s ",expression29[j]);
}
printf("\n");
fprintf(out,"\n");
break;
case 30:
for(j = 2;j > 1;j--)
{
push(expression30[j],&st) ;
}
for(j =0;j < 3;j++)
{
printf("%s ",expression30[j]);
fprintf(out,"%s ",expression30[j]);
}
printf("\n");
fprintf(out,"\n");
break;
default:
error("push stack wrong!");
}
}
/* create all wrong information */
void error(char *m)
{
fprintf(stderr,"%s\n",m);
getch();
exit(1); /* Not well-balanced exit */
}
// syntax analyze
void parse()
{
makeNull(&st);
push("$",&st);
push("Program",&st);
int m,n,ip = 0;
char * X,*Y;
do{
int tp = top(&st);
X = st.elements[tp];
Y = inToken[ip];
m = indenX(X);
n = indenT(Y);
/*
printf("top = %d\n",tp);
printf("X == %s \n",X);
printf("Y == %s \n",Y);
printf("m == %d \n",m);
printf("n == %d \n",n);
printf("indenT(X) == %d \n",indenT(X));
getch();
//*/
if(indenT(X))
{
if(!strcmp(X,inToken[ip]))
{
pop(&st);
ip++;
}
else
{
error(" syntax error ");
}
}
else
{
if(anaTable[m][n] != -1)
{
printf("%d\n",k++);
pop(&st);
showExp(anaTable[m][n]);
}
else
{
error(" syntax error ");
}
}
}while(strcmp(X,"$"));
}
int main()
{
char c[2];/*用于存放一个读入的字符和一个'\0' ,以方便加入str */
int i;
int num;
c[1] = '\0';
for(i=0;i<1000;i++)
{
strcpy(inToken[i],"$");
}
in = fopen("source.txt", "r");
if (in==NULL)
{
printf("can not open the files source.c\n");
}
else
{
out = fopen("out.txt", "w");
if (out==NULL)
{
printf("无法创建文件out.txt\n");
}
else
{
c[0] = fgetc(in);/*先读一个字符 */
while(!feof(in))
{
switch(c[0])
{
/*以下三个字符用于分割标志符*/
case ' ':FindKey();break;/*空格*/
case '\t':FindKey();break;/*制表符*/
case '\n':FindKey();line++;break;/*换行符 标记行数line加1*/
case '+':FindKey();
hand_addop('+');
break;
case '-':FindKey();
hand_addop('-');
break;
case '*':FindKey();
hand_mulop('*');
break;
case '/':FindKey();
hand_mulop('/');
break;
/*可能会出现>=或是<=的情况,需要探察下一个字符*/
case '<':FindKey();
hand_relop('<');
break;
case '>':FindKey();
hand_relop('>');
break;
case '=':FindKey();
hand_fuhao('=');
break;
/*读下一位,看看是不是"!=",如果不是,则把'!'加入到待分析的字符串中*/
case '!':FindKey();
hand_fuhao('!');
break;
case ';':FindKey();
hand_fuhao(';');
break;
case ',':FindKey();
hand_fuhao(',');
break;
case '(':FindKey();
hand_fuhao('(');
break;
case ')':FindKey();
hand_fuhao(')');
break;
case '{':FindKey();
hand_fuhao('{');
break;
case '}':FindKey();
hand_fuhao('}');
break;
default:strcat(str, c);/*这里可以很方便的将刚读的字符加入到str */
/*因为strcat只能链接两个字符串! */
}
c[0] = fgetc(in);/*继续读一个字符 */
}
}
}
printf("\n\n\ntoken table:\n");
fprintf(out,"\n\n\ntoken table:\n");
for(i=0;i<number;i++)
{
if(link[i].Isfirst==0){}
else if(IsFuhao(link[i].type[0])||IsKey(link[i].data))
{
printf("%s %s\n",link[i].data,link[i].type);
fprintf(out,"%s %s\n",link[i].data,link[i].type);
}
else
{
printf("%s %s%d\n",link[i].data,link[i].type,i);
fprintf(out,"%s %s%d\n",link[i].data,link[i].type,i);
}
/*fprintf(out,"%s %s%d\n",link[i].data,link[i].type,i); */
}
printf("\n\n");
fprintf(out,"\n\n");
fprintf(out,"the output token is\n");
for(i=0;i<tokennumber;i++)
{
fprintf(out,"%s ",inToken[i]);
printf("%s ",inToken[i]);
}
fprintf(out,"\n\n\nwen fa fen xi:\n\n");
printf("\n\nwen fa fen xi:\n");
parse();
system("pause");
return 0;
printf("\nHave succesfully done the operation!");
getch();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -