⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cpp2.cpp

📁 简单的LL(1)的分析
💻 CPP
📖 第 1 页 / 共 2 页
字号:
				    L[i]=c;
					i=i+1;
                    break;
				   }
		   case 4:
			   state=fail();
			   break;
		   case 5:
			   c=nextchar();
			   if(c=='-')
			   {L[i]=c;
			    i=i+1;
				state=6;
				break;
			   }
			   else
				   if(isdigit(c))
				   {L[i]=c;
				    i=i+1;
					state=7;
					break;
				   }
				   else
				   {state=fail();
				    e=e-1;
					break;
				   }
		   case 6:
			   c=nextchar();
			   if(isdigit(c))
			   {L[i]=c;
				i=i+1;
			    state=7;
				break;
			   }
			   else
				   if(c=='#')
				   {L[i]='\0';
				    printf("%s  符号\n",L);
                    int t;
                    for(t=0;t<10;t++)
                    two[v].name[t]=L[t];
                    two[v].address=1;
                    v=v+1;
					j=1;
					break;
				   }
				   else
					   if(c==' ')
					   {L[i]='\0';
					    printf("%s  符号\n",L);
                        int n;
                        for(n=0;n<10;n++)
                        two[v].name[n]=L[n];
                        two[v].address=1;
                        v=v+1;
						i=0;
						state=14;
						break;
					   }
					   else
					   {L[i]=c;
					    i=i+i;
					    state=13;
                        break;
					   }
		    case 7:
				c=nextchar();
				if(c=='.')
				{L[i]=c;
				 i=i+1;
				 state=8;
				 break;
				}
				else
				    if(isdigit(c))
					{L[i]=c;
					 i=i+1;
					 state=7;
					 break;
					}
					else
						if(c=='#')
						{L[i]='\0';
						 digit(L);//拼数,打印,存表(两张表)
						 j=1;
						 break;
						}
						else
							if(c==' ')
							{L[i]='\0';
							 digit(L);
							 i=0;
							 state=14;
							 break;
							}
							else
								if(c=='e')
								{L[i]=c;
								 i=i+1;
								 state=10;
								 break;
								}
								else
								{L[i]=c;
								 i=i+1;
								 state=13;
								 break;
								}
			case 8:
				c=nextchar();
				if(isdigit(c))
				{L[i]=c;
				 i=i+1;
				 state=9;
				 break;
				}
				else
					if(c=='#')
					{L[i]='\0';
					 printf("%s   错误\n",L);
					 j=1;
					 break;
					}
					else
						if(c==' ')
						{L[i]='\0';
						 printf("%s   错误\n",L);
						 i=0;
						 state=14;
						 break;
						}
						else
						{L[i]=c;
						 i=i+1;
						 state=13;
						 break;
						}
			case 9:
				c=nextchar();
				if(c=='e')
				{L[i]=c;
				 i=i+1;
				 state=10;
				 break;
				}
				else
					if(isdigit(c))
					{L[i]=c;
					 i=i+1;
					 state=9;
					 break;
					}
					else
						if(c=='#')
						{L[i]='\0';
						 digit(L);
						 j=1;
						 break;
						}
						else
							if(c==' ')
							{L[i]='\0';
							 digit(L);
							 i=0;
							 state=14;
							 break;
							}
							else
							{L[i]=c;
							 i=i+1;
							 state=13;
							 break;
							}
			case 10:
				c=nextchar();
				if(c=='-')
				{L[i]=c;
				 i=i+1;
				 state=11;
				 break;
				}
				else
					if(isdigit(c))
					{L[i]=c;
					 i=i+1;
					 state=12;
					 break;
					}
					else
						if(c=='#')
						{L[i]='\0';
						 printf("%s   错误\n",L);
						 j=i;
						 break;
						}
						else
							if(c==' ')
							{L[i]='\0';
							 printf("%s   错误\n",L);
							 i=0;
							 state=14;
							 break;
							}
							else
							{L[i]=c;
							 i=i+1;
							 state=13;
							 break;
							}
			case 11:
				c=nextchar();
				if(isdigit(c))
				{L[i]=c;
				 i=i+1;
				 state=12;
				 break;
				}
				else
					if(c=='#')
					{L[i]='\0';
					 printf("%s   错误\n",L);
					 j=1;
					 break;
					}
					else
						if(c==' ')
						{L[i]='\0';
						 printf("%s   错误\n",L);
						 i=0;
						 state=14;
						 break;
						}
						else
						{L[i]=c;
						 i=i+1;
						 state=13;
						 break;
						}
			case 12:
				c=nextchar();
				if(isdigit(c))
				{L[i]=c;
				 i=i+1;
				 state=12;
				 break;
				}
				else
					if(c=='#')
					{L[i]='\0';
					 digit(L);
					 j=1;
					 break;
					}
					else
						if(c==' ')
						{L[i]='\0';
						 digit(L);
						 i=0;
						 state=14;
						 break;
						}
						else
						{L[i]=c;
						 i=i+1;
						 state=13;
						 break;
						}
			case 13:
				c=nextchar();
				if(c=='#')
				{L[i]='\0';
				 printf("%s    错误\n",L);
				 j=1;
				 break;
				}
				else
					if(c==' ')
					{L[i]='\0';
					 printf("%s    错误\n",L);
					 i=0;
					 state=14;
					 break;
					}
					else
					{L[i]=c;
					 i=i+1;
					 state=13;
					 break;
					}
			case 14:
				state=fail();
				break;
			case 15:
				c=nextchar();
				if(p=isyunsuanfu1(c))//判断是否为单运算符
				{L[i]=c;
                 i=i+1;
				 state=16;
				 break;
				}
				else
				{state=fail();
				 e=e-1;
				 break;
				}
			case 16:
				c=nextchar();
				if(isyunsuanfu1(c))
				{L[i]=c;
				 i=i+1;
				 state=17;
				 break;
				}
				else
					if(c=='#')
					{L[i]='\0';
					 yunsuanfu(L,p);//输出运算符并存表
					 j=1;
					 break;
					}
					else
						if(c==' ')
						{L[i]='\0';
						 yunsuanfu(L,p);
						 i=0;
						 state=19;
						 break;
						}
						else
						{L[i]=c;
						 i=i+1;
						 state=18;
						 break;
						}
			case 17:
				c=nextchar();
				if(c=='#')
				{L[i]='\0';
				 if(q=isyunsuanfu2(L))//判断是否为复合运算符
				     yunsuanfu(L,q);
				 else
                     printf("%s    错误\n",L);
				 j=1;
				 break;
				}
				else
					if(c==' ')
					{L[i]='\0';
					 if(q=isyunsuanfu2(L))//判断是否为复合运算符
				         yunsuanfu(L,q);
				     else
                         printf("%s    错误\n",L);
					 i=0;
					 state=19;
                     break;
					}
					else
					{L[i]=c;
					 i=i+1;
					 state=18;
					 break;
					}
			case 18:
				c=nextchar();
				if(c=='#')
				{L[i]='\0';
				 printf("%s    错误\n",L);
				 j=1;
				 break;
				}
				else
					if(c==' ')
					{L[i]='\0';
					 printf("%s    错误\n",L);
					 i=0;
					 state=19;
					 break;
					}
					else
					{L[i]=c;
					 i=i+1;
					 state=18;
					 break;
					}
			case 19:
				state=fail();
				break;
            case 20:
				c=nextchar();
				if(h=isjiefu(c))//判断是否为界符
				{L[i]=c;
				 i=i+1;
				 state=21;
				 break;
				}
				else
				{L[i]=c;
				 i=i+1;
				 state=22;
				 break;
				}
			case 21:
				c=nextchar();
				if(c=='#')
				{L[i]='\0';
				 jiefu(L,h);//输出界符并保存
				 j=1;
				 break;
				}
				else
					if(c==' ')
					{L[i]='\0';
				     jiefu(L,h);
					 i=0;
					 state=23;
				     break;
					}
					else
					{L[i]=c;
					 i=i+1;
                     state=22;
					 break;
					}
			case 22:
				c=nextchar();
				if(c=='#')
				{L[i]='\0';
				 printf("%s   错误\n",L);
				 j=1;
				 break;
				}
				else
					if(c==' ')
					{L[i]='\0';
					 printf("%s    错误\n",L);
					 i=0;
					 state=23;
					 break;
					}
					else
					{L[i]=c;
					 i=i+1;
					 state=22;
					 break;
					}
			case 23:
				state=fail();
				break;
			         
		}
  if(j==1)
  break;
	}
}





void main()
{printf("输入文件名:");
 char L[15];
 scanf("%s",L);
 printf("*******************************************************************************\n");
 FILE *fp;
 if((fp=fopen(L,"rb"))==NULL)
 {printf("\n%s 文件无法打开",L);
  return;
 }
 char c='$';
 int i=0;
 while((c!='#')&&(i<200))
 {
	 if(fread(&c,sizeof(c),1,fp)!=1)
	 {printf("\n%s 文件读入错误",L);
	  break;
	 }
   if((c==13)||(c==10))
	   c=' ';
    A[i]=c;
	 
   i=i+1;
 }
 fclose(fp);
 printf("原代码:\n");
 printf("%s\n",A);
 printf("******************************************************************************\n");
 printf("分析结果:\n");
 nexttaken();
 printf("*******************************************************************************");
 printf("标识符表:\n");
 int x;
 for(x=1;x<r;x++)
      printf("%s\n",C[x]);
 printf("*******************************************************************************\n");
 printf("常数表:\n");
 int z;
 for(z=1;z<u;z++)
	 printf("%f\n",D[z]);
 printf("*******************************************************************************\n");
 printf("二元组:\n");
 int y;
 for(y=0;y<v;y++)
      printf("%s    %d\n",two[y].name,two[y].address);
}



⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -