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

📄 fifth.c

📁 词法分析器代码,用c语言编写 词法分析器代码,用c语言编写
💻 C
字号:
# include <stdio.h>
# include <string.h>
# include <ctype.h>
char prog[80],token[8];
char ch;
int syn,p,m,n,sum,kk;
char *rwtab[6]={"begin","if","then","while","do","end"};
void main()
{
   p=0;
  printf("\n please input string: \n");
  do
    {   
     scanf("%c",&ch);     
     prog[p]=ch;
     p++;
    }while(ch!='#');
 p=0;
 scaner();
 lrparser();
 getch();
}

scaner()
{
   for(n=0;n<8;n++)   
       token[n]=NULL;

   ch=prog[p++];


   while(ch==' ')
     {
       ch=prog[p++];
     }
   


   if(isalpha(ch))
    { m=0;
      while(isalpha(ch) || isdigit(ch))
       {
        token[m++]=ch;
        ch=prog[p++];
       } 
      token[m++]='\0';
      p--;
      syn=10;
      for(n=0;n<6;n++)
           if(strcmp(token,rwtab[n])==0)
        {
          syn=n+1;
          break;
        }
    }
    else if(isdigit(ch))
      { sum=0;
        while(isdigit(ch))
        { 
          sum=sum*10+ch-'0';
          ch=prog[p++];
        }
        p--;
        syn=11;
      }
    else
      switch(ch)
    {
      case '<':
          m=0;token[m++]=ch;

          ch=prog[p++];
          if(ch=='>')
            {
            syn=21;
            token[m++]=ch; 
            }
              else if(ch=='=')
            {
            syn=22;
            token[m++]=ch;
            }
          else 
            {
            syn=20;
            p--;
            }
      case '>':
            m=0;token[m++]=ch;
            ch=prog[p++];
           if(ch=='=')
             {
               syn=24;
               token[m++]=ch;
             }
           else
            {
            syn=23;
            p--;
            }
          break;
      case ':':
            m=0;token[m++]=ch;
            ch=prog[p++];
            if(ch=='=')
            {
             syn=18;
             token[m++]=ch;
            }
           else
            {
             syn=25;
             p--;
            }
           break;

      case '+':
           syn=13;token[0]=ch;break;

      case '-':
           syn=14;token[0]=ch;break;
      case '*':
           syn=15;token[0]=ch;break;

      case '/':
               syn=16;token[0]=ch;break;
      
      case '=':
           syn=25;token[0]=ch;break;
          case ';': 
           syn=26;token[0]=ch;break;
      case '(': 
           syn=27;token[0]=ch;break;
      case ')': 
           syn=28;token[0]=ch;break;

      case '\n':
           syn=29;token[0]=ch;break;
      case '#':
               syn=0;
           token[0]=ch;
               break;

      default: syn=-1;
        }
 }

lrparser()
{

    if(syn==1)
    {
        scaner();
        yucu();  
        if(syn==6)
    	{
          scaner();
            if(syn==0 && (kk==0))
    		{
                printf("success\n");   
    		}
    	}
        else 
    	{
            if(kk!=1) 
    		{
                printf("Error!!  Missing 'end'in the statement!\n");	
            	kk=1;
    		}
    	}
    }
    else
    {
         printf("Error!! 'begin' is required\n");   
         kk=1;
    }
    return ;
}

yucu()
{
    statement();  
    
    while(syn==26)
    {
        scaner();
        statement();	
    }
    return ;
}

statement()
{
    if(syn==10)
    {
        scaner();
        if(syn==18)
    	{
            scaner();
            expression();
    	}
        else
    	{
            printf("Error!! ':=' is required!\n"); 
        	kk=1;
    	}
        return;
    }
}

expression()
{
    term();  
    while(syn==13 || syn==14)
    {
        scaner();
        term();  
    }
    return;
}   

term()
{
    factor();  
    while(syn==15 || syn==16)
    {
        scaner();
        factor();
    }
    return;
}
factor()
{
    if(syn==10 || syn==11)
    {
        scaner();
    }
    else if(syn==27)
    {
        scaner();
        expression();  
        if(syn==28)
    	{
            scaner();

    	}
        else
    	{
          printf("Error!! ')' is required!\n");	
          kk=1;
    	}
    }
    else
    {
        printf("Error !!Something wrong with the expression!\n"); 
        kk=1;
    }
    return ;
}

⌨️ 快捷键说明

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