?? lian.c
字號:
#include "stdio.h"
#include "string.h"
#include "stdlib.h"
#define MAX 100
char *table[14][20]={"#","i","a","+","-","*","/","(",")","f","t","e","b","w","r",";","<","&","=","$",
"S","i=E","a","#","#","#","#","#","#","fESO","#","","#","wES","r(i=EP","","#","#","#","",
"E","TR","#","#","#","#","#","TR","#","#","#","eC","b","#","#","","#","#","#","",
"R","","#","ATR","ATR","#","#","#","","#","#","","eS","#","#","","#","#","","",
"T","FY","#","#","#","#","#","FY","#","#","#","","#","#","#","","#","#","","",
"Y","","#","","","MFY","MFY","#","","#","#","","eS","#","#","","#","#","=E","",
"F","i","#","#","#","#","#","(E)","#","#","","#","#","#","#","","#","#","#","",
"A","#","#","+","-","#","#","#","#","#","#","","#","#","#","","#","#","","",
"M","#","#","#","#","*","/","#","#","#","#","","#","#","#","","#","#","#","",
"O","#","SB","#","#","#","#","#","#","#","#","eS","#","#","#","","#","#","#","",
"P","#","#","#","#","#","#","#","#","#","#","","#","#","#",";K","#","#","#","",
"K","i<EX","#","#","#","#","#","#","#","#","#","","#","#","#","","","#","#","",
"X","#","#","#","#","#","#","#","#","#","#","","#","#","#",";Q","#","#","#","",
"Q","i&)S","#","#","#","#","#","#","#","#","#","","#","#","#","","#","","#",""};
struct zhan
{
char str[50];
int top;
};
struct TTT
{
char f[50];
};
struct liu
{
char liu1[50];
};
recover()
{
printf("編譯錯誤!");
}
int fail(int start)
{
switch(start)
{
case 0: start=9;break;
case 9: start=12;break;
default:
printf("編譯錯誤!");
}
return start;
}
int digit(char c)
{
if(('0'<=c)&&(c<='9'))
return 1;
else
return 0;
}
int letter(char c)
{
if(('a'<=c&&c<='z')||('A'<=c&&c<='Z'))
return 1;
else
return 0;
}
char nextchar(int *k,char s[])
{
(*k)++;
return(s[*k]);
}
char guanjianzi(int x)
{
switch(x)
{
case 0:
return 'f';
case 1:
return 'e';
case 2:
return 'r';
case 3:
return 'w';
default:
return '0';
}
}
char to_next(char s[],struct TTT ttt[])
{
int state=0,start=0,length=0,i1=-1,k1,x=0,case1,x1;
int control=1;
char c,b;
char c1[50],c2[50];
length=strlen(s);
while(s[0]!='$')
{
while(control)
{
switch(state)
{
case 0:
c=nextchar(&i1,s);
if(c==' '||c=='\t'||c=='\n')
{
c=nextchar(&i1,s);
strcpy(c1,&s[i1]);
s[length-i1]='\0';
strcpy(s,c1);
i1=-1;
state=0;
}
else
{
if(c=='<')
state=1;
else
{
if(c=='=')
state=5;
else
{
if(c=='>')
state=6;
else
{
if(c=='+')
state=22;
else
{
if(c=='-')
state=23;
else
{
if(c=='{')
state=24;
else
{
if(c=='}')
state=30;
else
{
if(c=='(')
state=31;
else
{
if(c==')')
state=32;
else
{
if(c=='[')
state=33;
else
{
if(c==']')
state=34;
else
{
if(c=='*')
state=29;
else
{
if(c=='/')
state=35;
else
{
if(c==';')
state=36;
else
{
state=fail(state);
i1=-1;
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
break;
case 1:
if(i1==length-1)
state=4;
else
{
c=nextchar(&i1,s);
if(c=='=')
state=2;
else
{
if(c=='>')
state=3;
else
{
strcpy(c1,&s[i1]);
s[length-i1]='\0';
strcpy(s,c1);
control=0;
return '<';
}
}
}
break;
case 2:
c=nextchar(&i1,s);
strcpy(c1,&s[i1]);
s[length-i1]='\0';
strcpy(s,c1);
return 'i';
case 3:
c=nextchar(&i1,s);
strcpy(c1,&s[i1]);
s[length-i1]='\0';
strcpy(s,c1);
return 'i';
case 4:
c=nextchar(&i1,s);
strcpy(c1,&s[i1]);
s[length-i1]='\0';
strcpy(s,c1);
return '<';
case 5:
c=nextchar(&i1,s);
strcpy(c1,&s[i1]);
s[length-i1]='\0';
strcpy(s,c1);
return '=';
case 6:
if(i1==length-1)
state=8;
else
{
c=nextchar(&i1,s);
if(c=='=')
state=7;
else
{
strcpy(c1,&s[i1]);
s[length-i1]='\0';
strcpy(s,c1);
control=0;
return 'i';
}
}
break;
case 7:
c=nextchar(&i1,s);
strcpy(c1,&s[i1]);
s[length-i1]='\0';
strcpy(s,c1);
return 'i';
case 8:
c=nextchar(&i1,s);
strcpy(c1,&s[i1]);
s[length-i1]='\0';
strcpy(s,c1);
return 'i';
case 9:
c=nextchar(&i1,s);
if(letter(c))
state=10;
else
{
state=fail(state);
i1=-1;
}
break;
case 10:
if(i1==length-1)
state =11;
else
{
c=nextchar(&i1,s);
if(letter(c)||digit(c))
state=10;
else
{
for(k1=0;k1<i1;k1++)
c2[k1]=s[k1];
c2[k1]='\0';
strcpy(c1,&s[i1]);
s[length-i1]='\0';
strcpy(s,c1);
for(case1=0;case1<14;case1++)
{
if(strcmp(c2,ttt[case1].f)==0)
{
x1=0;
break;
}
else
{
x++;
x1=1;
}
}
if(x1==0)
{
b=guanjianzi(x);
return b;
}
else
{
control=0;
return 'i';
}
}
}
break;
case 11:
strcpy(c1,&s[i1]);
s[length-i1]='\0';
strcpy(s,c1);
return 'i';
case 12:
c=nextchar(&i1,s);
if(digit(c))
state=13;
else
{
strcpy(c1,&s[i1]);
s[length-i1]='\0';
strcpy(s,c1);
return 'i';
}
break;
case 13:
if(i1==length-1)
state=20;
else
{
c=nextchar(&i1,s);
if(digit(c))
state=13;
else
{
if(c=='.')
state=14;
else
{
if(c=='E'||c=='e')
state=16;
else
{
strcpy(c1,&s[i1]);
s[length-i1]='\0';
strcpy(s,c1);
return 'i';
}
}
}
}
break;
case 14:
c=nextchar(&i1,s);
if(digit(c))
state=15;
else
{
strcpy(c1,&s[i1]);
s[length-i1]='\0';
strcpy(s,c1);
return 'i';
}
break;
case 15:
if(i1==length-1)
state=21;
else
{
c=nextchar(&i1,s);
if(digit(c))
state=15;
else
{
if(c=='E'||c=='e')
state=16;
else
{
strcpy(c1,&s[i1]);
s[length-i1]='\0';
strcpy(s,c1);
return 'i';
}
}
}
break;
case 16:
c=nextchar(&i1,s);
if(digit(c))
state=18;
else
{
if(c=='+'||c=='-')
state=17;
else
{
strcpy(c1,&s[i1]);
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -