小C语言--词法分析程序

来源:互联网 发布:执业医师题库软件 编辑:程序博客网 时间:2024/05/16 17:07
#include<iostream>#include<stdio.h>#include<string.h>using namespace std;char key[6][10]={"int","main","for","if","else","while"};void check(char p[]){    int i=0;    int j=0;    if(p[0]>='0'&&p[0]<='9')    {        printf("(integer,%s)\n",p);        j=1;    }    else    {        for(i=0;i<6;i++)        {            if(strcmp(p,key[i])==0)            {                printf("(keyword,%s)\n",key[i]);                j=1;                break;            }        }    }    if(!j) printf("(identifier,%s)\n",p);}int main(){    char p[2005];    while(gets(p))    {        int i =0;        char f[2005];        int j=0;        for(i=0;p[i]!='\0';i++)        {            if(p[i]==' '||p[i]=='\t'||p[i]=='\n')            {                if(j!=0)                {                    f[j]='\0';                    check(f);                    j=0;                }            }            else if(p[i]=='+'||p[i]=='-'||p[i]=='*'||p[i]=='/')            {                if(j!=0)                {                    f[j]='\0';                    check(f);                    j=0;                }                printf("(operator,%c)\n",p[i]);            }            else if(p[i]=='='&&p[i+1]=='='||p[i]=='<'&&p[i+1]=='='||p[i]=='>'&&p[i+1]=='='||p[i]=='!'&&p[i+1]=='=')            {                if(j!=0)                {                    f[j]='\0';                    check(f);                    j=0;                }                printf("(operator,%c%c)\n",p[i],p[i+1]);                i++;            }            else if(p[i]=='='||p[i]=='<'||p[i]=='>')            {                if(j!=0)                {                    f[j]='\0';                    check(f);                    j=0;                }                printf("(operator,%c)\n",p[i]);            }            else if(p[i]=='{'||p[i]=='}'||p[i]=='('||p[i]==')'||p[i]==','||p[i]==';')                {                    if(j!=0)                    {                        f[j]='\0';                        check(f);                        j=0;                    }                    printf("(boundary,%c)\n",p[i]);                }                else                {                    f[j++]=p[i];                }        }    }    return 0;}
原创粉丝点击