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

📄 实验一.txt

📁 一个c++de的词法分析此程序可以通过读一个文本文件来进行词法分析
💻 TXT
字号:

      #include<iostream.h>
      #include<fstream.h>
      #include<string.h>
     #include<stdio.h>
       int a=0,b=0,c=0,d=0,e=0,f=0,g=0,h=0,i,j=0,m=0,l=0,p=0;
      char line[200];
       char *BSF[100],*NUM[100],*BLZ2[100],*YSF[100],*JF[100];
       char *BLZ1[13]={"begin","call","const","do","end","if","odd",
                      "procedure","read","then","var","while","write"};
      void findkey(char *word)
     {
       int find=0;
         for(int n=0;n<13;n++)
        {
            if((strcmp(word,BLZ1[n]))==0)
            {
             BLZ2[c]=word;
              c++;
               find++;
               break;
            }
     22    }
   if(find==0)
   {
      BSF[a]=word;
      a++;
   }
}
void print()
{
    cout<<"------------------"<<endl
        <<"After analsying:"<<endl
        <<"------------------"<<endl;
    cout<<"标识符:"<<endl;
    for(int k=0;k<a;k++)
         cout<<"BSF["<<k<<"]= "<<BSF[k]<<endl;
    cout<<"\n数字:"<<endl;
    for(int k=0;k<b;k++)
         cout<<"NUM["<<k<<"]= "<<NUM[k]<<endl;
    cout<<"\n保留字:"<<endl;
    for(int k=0;k<c;k++)
         cout<<"BLZ["<<k<<"]= "<<BLZ2[k]<<endl;
    cout<<"\n运算符:"<<endl;
    for(int k=0;k<d;k++)
         cout<<"YSF["<<k<<"]= "<<YSF[k]<<endl;
    cout<<"\n界符:"<<endl;
    for(int k=0;k<e;k++)
         cout<<"JF["<<k<<"]= "<<JF[k]<<endl;
}
char getch()
{
   char ch0;
   if(m<=l)
   {
      ch0=line[m];
      m++;
      return  ch0;
   }
   else
   {
      print();
      exit(0);
   }
}
void getsym()
{
    char *number;
    char *ch;
    char num[200],cha[200],ys[200],bj[200];
    if(j==0)
    {
       *ch=getch();
       j++;
    }
    while(*ch==' '|| *ch=='\n'|| *ch=='\t')
          *ch=getch();
    if(*ch>='0' && *ch<='9')
    {
       i=f;
       while(*ch>='0' && *ch<='9')
       {
          num[f]=*ch;
          f++;
          *ch=getch();
       }
       num[f]='\0';
       f++;
       number=&num[i];
       NUM[b]=number;
       b++;
    }
    else
    if(*ch>='a' && *ch<='z')
    {
       i=g;
       while((*ch>='a' && *ch<='z')||(*ch>='0' && *ch<='9'))
       {
           cha[g]=*ch;
           g++;
           *ch=getch();
       }
       cha[g]='\0';
       g++;
       findkey(&cha[i]);
    }
    else
    if(*ch=='='||*ch=='+'||*ch=='-'||*ch=='*'||*ch=='/'||*ch=='#')
    {
       i=h;
       ys[h]=*ch;
       h++;
       ys[h]='\0';
       h++;
       YSF[d]=&ys[i];
       d++;
       *ch=getch();
    }
    else
    if(*ch=='>'||*ch=='<'||*ch==':')
    {
       i=h;
       ys[h]=*ch;
       h++;
       *ch=getch();
       if(*ch=='=')
       {
          ys[h]=*ch;
          h++;
          ys[h]='\0';
       }
       else
          ys[h]='\0';
       h++;
       YSF[d]=&ys[i];
       d++;
       *ch=getch();
    }
    else
    if(*ch=='('||*ch==')'||*ch==','||*ch=='.'||*ch==';')
    {
       i=p;
       bj[p]=*ch;
       p++;
       bj[p]='\0';
       p++;
       JF[e]=&bj[i];
       e++;
       *ch=getch();
    }
}
int main()
{
    ifstream fin("test.txt");
    char letter;
    while(!fin.eof())
    {
        letter=fin.get();
        line[l]=letter;
        if(letter=='.')
           break;
        l++;
    }
    cout<<"-----------------------"<<endl
        <<"The source programme:"<<endl
        <<"-----------------------"<<endl
        <<line<<endl;
    while(1)
    {
        getsym();
    }
}

⌨️ 快捷键说明

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