?? sandizhi.c
字號:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<math.h>
#include<ctype.h>
char input[200],mech[10]; /*input,存放最先輸入的字符串,在輸入的過程中,就進行了預處理*/
char ech[100][10];
char echattr[100][10];
char nch[10];
char Fplace[10],Eplace[10],Tplace[10],TTplace[10],EEplace[10],E1place[10],E2place[10],idplace[10],Splace[10],Snext[10],Ctrue[10],Cfalse[10],Sbegin[10];
char S1next[10],S2next[10];
char Fcode[50],Ecode[50],Tcode[50],TTcode[50],EEcode[50],E1code[50],E2code[50],idcode[50],Scode[50],Ccode[50];
int temp=1;
int label=0;
int stack;
int nuattr;
int flag=0;
char attr[10];
int number=0;
int now;
void init(char *ch)
{
char newc[10];
newc[0]=NULL;
strcpy(ch,newc);
}
int S();
int SS();
int E();
int C();
int CC();
int T();
int TT();
int EE();
int F();
int scan();
void newtemp(char *ch)
{
sprintf(attr,"%d",temp);
strcpy(ch,"t");
strcat(ch,attr);
temp++;
}
void newlabel(char *ch)
{
sprintf(attr,"%d",label);
strcpy(ch,"L");
strcat(ch,attr);
label++;
}
main()
{
int i=0,j=0,t;
char c;
char c1[2];
char b[20];
FILE* fp;
c1[1]='\0';
printf("請輸入要分析的文件:");
scanf("%s",b);
fp=fopen(b,"a+");
do
{
c=fgetc(fp);
if(c==' ')
{
if(i==0)
{
while(c==' ')
{
c=fgetc(fp);
}
input[i]=c;
i++;
}
else
{
while(c==' ')
{
c=fgetc(fp);
}
input[i]=' ';
i++;
input[i]=c;
i++;
}
}
else
{
input[i]=c;
i++;
}
}while(c!='$'); ///////////////////////////////
fclose(fp);
i=0;
while(input[i]!='$')
{
c1[0]=input[i];
if(c1[0]=='+'||c1[0]=='-'||c1[0]=='*'||c1[0]=='/'||c1[0]=='>'||c1[0]=='<'||c1[0]=='='||c1[0]=='('||c1[0]==')')
{
if(strlen(mech)!=0)
{
t=scan(mech);
if(t==15)
{
sprintf(attr,"%d",nuattr);
strcpy(echattr[j],attr);
strcpy(mech,"int10");
}
if(t==16)
{
sprintf(attr,"%d",nuattr);
strcpy(echattr[j],attr);
strcpy(mech,"int16");
}
if(t==17)
{
sprintf(attr,"%d",nuattr);
strcpy(echattr[j],attr);
strcpy(mech,"int8");
}
if(t==18)
{
strcpy(echattr[j],attr);
strcpy(mech,"i");
}
strcpy(ech[j],mech);
strcpy(echattr[j],attr);
j++;
init(mech);
strcat(mech,c1);
t=scan(mech);
if(t==15)
{
sprintf(attr,"%d",nuattr);
strcpy(echattr[j],attr);
strcpy(mech,"int10");
}
if(t==16)
{
sprintf(attr,"%d",nuattr);
strcpy(echattr[j],attr);
strcpy(mech,"int16");
}
if(t==17)
{
sprintf(attr,"%d",nuattr);
strcpy(echattr[j],attr);
strcpy(mech,"int8");
}
if(t==18)
{
strcpy(echattr[j],attr);
strcpy(mech,"i");
}
strcpy(ech[j],mech);
strcpy(echattr[j],attr);
j++;
init(mech);
}
else
{
strcat(mech,c1);
t=scan(mech);
if(t==15)
{
sprintf(attr,"%d",nuattr);
strcpy(echattr[j],attr);
strcpy(mech,"int10");
}
if(t==16)
{
sprintf(attr,"%d",nuattr);
strcpy(echattr[j],attr);
strcpy(mech,"int16");
}
if(t==17)
{
sprintf(attr,"%d",nuattr);
strcpy(echattr[j],attr);
strcpy(mech,"int8");
}
if(t==18)
{
strcpy(echattr[j],attr);
strcpy(mech,"i");
}
strcpy(ech[j],mech);
strcpy(echattr[j],attr);
j++;
init(mech);
}
i++;
continue;
}
if(c1[0]==' ')
{
if(strlen(mech)!=0)
{
t=scan(mech);
if(t==15)
{
sprintf(attr,"%d",nuattr);
strcpy(echattr[j],attr);
strcpy(mech,"int10");
}
if(t==16)
{
sprintf(attr,"%d",nuattr);
strcpy(echattr[j],attr);
strcpy(mech,"int16");
}
if(t==17)
{
sprintf(attr,"%d",nuattr);
strcpy(echattr[j],attr);
strcpy(mech,"int8");
}
if(t==18)
{
strcpy(echattr[j],attr);
strcpy(mech,"i");
}
strcpy(ech[j],mech);
strcpy(echattr[j],attr);
j++;
init(mech);
}
}
else
{
strcat(mech,c1);
}
i++;
}
if(strlen(mech)!=0)
{
t=scan(mech);
if(t==15)
{
sprintf(attr,"%d",nuattr);
strcpy(echattr[j],attr);
strcpy(mech,"int10");
}
if(t==16)
{
sprintf(attr,"%d",nuattr);
strcpy(echattr[j],attr);
strcpy(mech,"int16");
}
if(t==17)
{
sprintf(attr,"%d",nuattr);
strcpy(echattr[j],attr);
strcpy(mech,"int8");
}
if(t==18)
{
strcpy(echattr[j],attr);
strcpy(mech,"i");
}
strcpy(ech[j],mech);
strcpy(echattr[j],attr);
j++;
}
strcpy(ech[j],"$");
number=j+1;
now=0;
j=S();
printf("\nL0:\t// S.next");
if(j==1)
{
printf("\ntrue\n");
}
else
{
printf("\nfalse\n");
}
j=0;
getch();
}
int scan(char *ch)
{
char *k1="if";
char *k2="then";
char *k3="else";
char *k4="while";
char *k5="do";
char *k6="+";
char *k7="-";
char *k8="*";
char *k9="/";
char *k10=">";
char *k11="<";
char *k12="=";
char *k13="(";
char *k14=")";
int judge;
int i=1,k;
int answer=0;
if(strcmp(ch,k1)==0)
{
strcpy(attr,ch);
return 1;
}
if(strcmp(ch,k2)==0)
{
strcpy(attr,ch);
return 2;
}
if(strcmp(ch,k3)==0)
{
strcpy(attr,ch);
return 3;
}
if(strcmp(ch,k4)==0)
{
strcpy(attr,ch);
return 4;
}
if(strcmp(ch,k5)==0)
{
strcpy(attr,ch);
return 5;
}
else
{
if(strcmp(ch,k6)==0)
{
strcpy(attr,ch);
return 6;
}
if(strcmp(ch,k7)==0)
{
strcpy(attr,ch);
return 7;
}
if(strcmp(ch,k8)==0)
{
strcpy(attr,ch);
return 8;
}
if(strcmp(ch,k9)==0)
{
strcpy(attr,ch);
return 9;
}
if(strcmp(ch,k10)==0)
{
strcpy(attr,ch);
return 10;
}
if(strcmp(ch,k11)==0)
{
strcpy(attr,ch);
return 11;
}
if(strcmp(ch,k12)==0)
{
strcpy(attr,ch);
return 12;
}
if(strcmp(ch,k13)==0)
{
strcpy(attr,ch);
return 13;
}
if(strcmp(ch,k14)==0)
{
strcpy(attr,ch);
return 14;
}
else
{
if(isdigit(ch[0])==2) ///////
{
if(strlen(ch)>1)
{
if(strlen(ch)>2)
{
if(ch[1]=='x')
{
i=2;
judge=1;
while(ch[i]!=NULL)
{
if(isxdigit(ch[i])==0)
{
judge=0;
}
i++;
}
if(judge==1)
{
for(i=2;i<strlen(ch);i++)
{
if(ch[i]>='0'&&ch[i]<='9')
{
k=ch[i]-'0';
}
else
{
k=ch[i]-'W';
}
answer=answer+k*pow(16,strlen(ch)-i-1);
}
nuattr=answer;
return 16;
}
else
{
strcpy(attr,ch);
return 18;
}
}
}
if(ch[0]=='0')
{
i=1;
judge=1;
while(ch[i]!=NULL)
{
if(isxdigit(ch[i])==0)
{
judge=0;
}
i++;
}
if(judge==1)
{
for(i=0;i<strlen(ch);i++)
{
k=ch[i]-'0';
answer=answer+k*pow(8,strlen(ch)-i-1);
}
nuattr=answer;
return 17;
}
}
else
{
i=1;
judge=1;
while(ch[i]!=NULL)
{
if(isxdigit(ch[i])==0)
{
judge=0;
}
i++;
}
if(judge==1)
{
for(i=0;i<strlen(ch);i++)
{
k=ch[i]-'0';
answer=answer+k*pow(10,strlen(ch)-i-1);
}
nuattr=answer;
return 15;
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -