资源简介

用C语言编写一个PL/0词法分析器,为语法语义分析提供单词,使之能把输入的字符串形式的源程序分割成一个个单词符号传递给语法语义分析,并把分析结果(基本字,运算符,标识符,常数以及界符)输出。

资源截图

代码片段和文件信息


/////***************************词法分析程序***********************************///

#include                  
#include                 
#include                  
#include  
////*******************************************************************************////
char *rwtab[35]={“main““printf““scanf““else““if““auto““double““int““struct“
              “break““long““switch““case““enum““register““typedef““char“
  “extern““return““union““const““float““short““unsigned““continue“
  “for““signed““void““default““goto““sizeof““volatile““do““while““static“};/*关键字定义*/
char prog[300]={‘\0‘};/*缓冲区*/
char ch;
int   p;        /*p是缓冲区prog的指针*/

////****************************关键字匹配函数************************************////

int checkup(char *Token){       

      int i;
      for(i=0;i<35;i++)
           if(strcmp(Tokenrwtab[i])==0)
               return 1;
      return 0;
}

////****************************输出函数****************************************////

void output(int kchar *Token)     
{
switch(k)
{
case 0:printf(“判断符:%s\t“Token);break;
case 1:printf(“运算符:%s\t“Token);break;
case 2:printf(“分隔符:%s\t“Token);break;
case 3:printf(“占位符:%s\t“Token);break;
case 4:printf(“不识别:%s\t“Token);break;
case 5:printf(“不合法:%s\t“Token);break;
case 6:printf(“标识符:%s\t“Token);break;
case 7:printf(“关键字:%s\t“Token);break;
case 8:printf(“常数:%s\t\t“Token);break;
case 9:printf(“kong\t“);break;
}

}

////*****************************扫描函数****************************************////

void scaner()                 
{
   int m=0;         /*m是token的指针*/
   char  token[12]={‘\0‘};      /*存放构成单词符号的字符串*/
   int flag=1;             /*标记是否为合法标志符*/

   ch=prog[p++];

   while(ch==‘ ‘||ch==‘\n‘)    /*屏蔽掉空格和换行*/
        ch=prog[p++];
    
     if(isalpha(ch))           /*字符串首部为字母字符时*/
 {
 while(isalnum(ch))    /*判断字符串第二个为字母或数字*/
{
           token[m++]=ch;
           ch=prog[p++];
}
 p--;
if(checkup(token)==1) output(7token);/*关键字输出*/

else  output(6token);                  /*标识符输出*/
 }
    else
         if(isdigit(ch))    /*ch是数字字符*/
 {
            while(isdigit(ch))    /*ch是数字字符*/
{
token[m++]=ch;
                ch=prog[p++];
}

while(isalpha(ch)) /*若字符串是以数字开头的标识符则不合法*/
{
token[m++]=ch;
ch=prog[p++];
flag=0;
}
p--;
if(flag==0) output(5token);/*不合法标识符输出*/
else  output(8token);          /*常数输出*/
 }
        else 
            switch(ch){
  

评论

共有 条评论