首页 > 代码库 > 词法分析实验报告-201506110151-董广枢

词法分析实验报告-201506110151-董广枢

实验一、词法分析

专业:商业软件工程二班   姓名 董广枢 学号201506110151

一、        实验目的

 

   编制一个词法分析程序

 

二、        实验内容和要求

1、输入:源程序字符串

2、输出:二元组(种别,单词本身)

3、待分析语言的词法规则

 

 

 

三、        实验方法、步骤及结果测试

#include <stdio.h>

#include <string.h> 

char prog[80],

token[8],ch;

int syn,p,m,n,sum;

char *rwtab[6]={"begin","if","then","while","do","end"};

scaner();

main()

{p=0;

printf("\n 请输源代码以 ‘#‘结束: \n"); 

do{   

       scanf("%c",&ch); 

       prog[p++]=ch; 

}while(ch!=‘#‘);

p=0;  

do{   

       scaner();  

       switch(syn)  

       {

              case 11:printf("( %-10d%5d )\n",sum,syn);     

              break;   

              case -1:printf("you have input a wrong string\n");   

              getch();    

              exit(0); 

              //拼数  syn=11 返回对不同符号给出相应的syn报错拼字符串是否关键字?

              //syn为对应关键字的单词种别码  syn=10

             

       default: printf("( %-10s%5d )\n",token,syn);   

              break;   

       }    

}while(syn!=0);  

getch();

}  

scaner()

       sum=0;   

       for(m=0;m<8;m++)

              token[m++]=NULL;

              ch=prog[p++];   

              m=0;   

       while((ch==‘ ‘)||(ch==‘\n‘))ch=prog[p++]; 

       if(((ch<=‘z‘)&&(ch>=‘a‘))||((ch<=‘Z‘)&&(ch>=‘A‘)))  

       {

              while(((ch<=‘z‘)&&(ch>=‘a‘))||((ch<=‘Z‘)&&(ch>=‘A‘))||((ch>=‘0‘)&&(ch<=‘9‘))) 

       {

                     token[m++]=ch;     

      

                     ch=prog[p++];   

       }    

       p--;   

       syn=10;     

       for(n=0;n<6;n++) 

              if(strcmp(token,rwtab[n])==0) 

              { syn=n+1;     

              break;     

              }     

       }   

       else if((ch>=‘0‘)&&(ch<=‘9‘))  

       { while((ch>=‘0‘)&&(ch<=‘9‘))  

       { sum=sum*10+ch-‘0‘;     

       ch=prog[p++];   

       }  

       p--;  

       syn=11;   

       }   

       else switch(ch)   

       { case ‘<‘:token[m++]=ch;     

       ch=prog[p++];       

       if(ch==‘=‘)     

       {

              syn=22;          

              token[m++]=ch;     

       }       

       else      

       {

              syn=20;      

              p--;

             

       }       

       break;  

    case ‘>‘:token[m++]=ch;   

              ch=prog[p++];      

              if(ch==‘=‘)       

              {

                     syn=24;       

                    

                     token[m++]=ch;     

              }      

              else       

              {

                     syn=23;        

                     p--;      

              }      

              break;   

       case ‘+‘: token[m++]=ch; 

              ch=prog[p++];  

        if(ch==‘+‘)     

        {

                     syn=17;  

                     token[m++]=ch;  

              }   

              else   

              {

                     syn=13;  

            p--;   

              }     

              break; 

       case ‘-‘:token[m++]=ch;  

        ch=prog[p++];   

              if(ch==‘-‘)        

              {

                     syn=29; 

                     token[m++]=ch; 

              }      

              else      

              {

                     syn=14;    

                     p--;     

              }       

              break;    

       case ‘!‘:ch=prog[p++]; 

              if(ch==‘=‘)      

              {

                     syn=21;   

                     token[m++]=ch;   

        }     

              else      

              {

                     syn=31;

                     p--;      

              }       

              break;   

    case ‘=‘:token[m++]=ch;      

              ch=prog[p++];      

              if(ch==‘=‘)     

              {

                     syn=25;   

            token[m++]=ch;   

              }           else 

              {

                     syn=18;     

                     p--;      

              }        

              break;    

       case ‘*‘: syn=15;    

        token[m++]=ch;    

              break;   

       case ‘/‘: syn=16;     

              token[m++]=ch;        

              break;   

       case ‘(‘: syn=27;     

              token[m++]=ch;     

              break;   

       case ‘)‘: syn=28;   

              token[m++]=ch;   

        break; 

    case ‘{‘: syn=5;  

              token[m++]=ch;   

        break;    

       case ‘}‘: syn=6;    

        token[m++]=ch;   

        break;   

       case ‘;‘: syn=26;    

              token[m++]=ch;     

              break;  

       case ‘\"‘: syn=30;       

              token[m++]=ch;     

              break;   

       case ‘#‘: syn=0;    

        token[m++]=ch;    

              break;   

       case ‘:‘:syn=17;  

              token[m++]=ch;

              break; 

       default: syn=-1;  

              break;    

   }    

   token[m++]=‘\0‘; 

   }

 技术分享

 

 

 

 

 

 

 

 

四、        实验总结

 

一开始会觉得很难,会陌生,枯燥,但是通过书本和同学的帮助,还有网上的资料查询还是勉强能完成。

词法分析实验报告-201506110151-董广枢