{
if(ch==bound[i]) {
return i+1; } } return 0; }
int Isoperate(char ch) //判断是否为运算符 { int i;
for(i=0;i<4;i++) {
if(ch==operate[i]) {
return i+3; } } return 0; }
int main() { {
printf(\文件未找到!\\n\ } else{
while(!feof(fp)){
if(isspace(ch=fgetc(fp))); else{
sour[q]=ch; q++; } } } int p=0;
printf(\输入句子为:\\n\ for(p;p<=q;p++)
FILE *fp; int q=0,m=0; char sour[200]=\
printf(\请将源文件置于以下位置并按以下方式命名:F:\\\\2.txt\\n\
if((fp=fopen(\
{
printf(\ }
printf(\ int state=0,nowlen=0;
BOOLEAN OK=TRUE,ERR=FALSE; int i,flagpoint=0; for(i=0;i if(sour[i]=='#') tokenlist[m].code=='#'; switch(state) { case 0: ch=sour[i]; if(Isbound(ch)) { if(ERR) { printf(\无法识别\\n\ ERR=FALSE; OK=TRUE; } else if(!OK) { printf(\标识符\\n\ tokentemp.code=10; tokentemp.ch[10]=nowword[10]; tokenlist[m]=tokentemp; m++; OK=TRUE; } state=4; } else if(IsDigit(ch)) { if(OK) { memset(nowword,0,strlen(nowword)); nowlen=0; nowword[nowlen]=ch; nowlen++; state=3; OK=FALSE; break; }else { nowword[nowlen]=ch; nowlen++; } } else if(IsLetter(ch)) { if(OK) { memset(nowword,0,strlen(nowword)); nowlen=0; nowword[nowlen]=ch; nowlen++; OK=FALSE; }else { nowword[nowlen]=ch; nowlen++; } } else if(Isoperate(ch)) { if(!OK) { printf(\标识符\\n\ tokentemp.code=10; tokentemp.ch[10]=nowword[10]; tokenlist[m]=tokentemp; m++; OK=TRUE; } printf(\运算符\\n\ tokentemp.code=Isoperate(ch); tokentemp.ch[10]=ch; tokenlist[m]=tokentemp; m++; } break; case 3: if(IsLetter(ch)) { printf(\错误\\n\ nowword[nowlen]=ch; nowlen++; ERR=FALSE; state=0; break; } if(IsDigit(ch=sour[i])) { nowword[nowlen]=ch; nowlen++; } else if(sour[i]=='.'&&flagpoint==0) { flagpoint=1; nowword[nowlen]=ch; nowlen++; } else { printf(\数字\\n\ i--; state=0; OK=TRUE; tokentemp.code=20; tokentemp.ch[10]=nowword[10]; tokenlist[m]=tokentemp; m++; } break; case 4: i--; printf(\界符\\n\ tokentemp.code=Isbound(ch); tokentemp.ch[10]=ch; tokenlist[m]=tokentemp; m++; state=0; OK=TRUE; break; } } printf(\值为%d\\n\ int t=0; tokenlist[m+1].code='r'; m++; for(t;t printf(\值为%d\\n\ } LL1(); printf(\值为%d\\n\ if(op+1==m) printf(\ else printf(\ return 0; } void LL1() { STack s; init(&s); push(&s,'#'); push(&s,'E'); char ch; int flag=1; do { pop(&s,&ch); printf(\输出栈顶为%c\\n\ printf(\输出栈顶为%d\\n\ printf(\当前p值为%d\\n\ if((ch=='(')||(ch==')')||(ch=='+')||(ch=='-')||(ch=='*')||(ch=='/')||(ch==10)||(ch==20)) { if(tokenlist[op].code==1||tokenlist[op].code==20||tokenlist[op].code==10||tokenlist[op].code==2||tokenlist[op].code==3||tokenlist[op].code==4||tokenlist[op].code==5||tokenlist[op].code==6) op++; else { printf(\ exit(0); } } else if(ch=='#') { if(tokenlist[op].code==0) flag=0;