使用C语言实现词法分析

C语言实现词法分析

所用软件

Dev-C++
or
Microsoft Visual C++

代码块

#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 please input a string(end with '#'):/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 need input a string\n");
          getch();
          exit(0);
      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';
    }

使用方法

直接创建一个C语言文件,将代码块复制粘贴,使用编译器打开即可。

效果图

C语言实现词法分析

  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值