首页 > 其他 > 详细

1013 词法分析

时间:2015-10-14 00:16:19      阅读:254      评论:0      收藏:0      [点我收藏+]
#include<stdio.h>
#include<string.h>
#include<ctype.h>
#define m 500

struct KEYWORD
{
    char keyword[20];
};
typedef struct KEYWORD keyword;
int main()
{
    keyword key[6];
    int i=0,j=0;
    char a[m],b[m];
    strcpy(key[0].keyword,"begin");
    strcpy(key[1].keyword,"if");
    strcpy(key[2].keyword,"then");
    strcpy(key[3].keyword,"while");
    strcpy(key[4].keyword,"do");
    strcpy(key[5].keyword,"end");
 
    printf("Please input the code and end with‘#‘:");
    gets(a);
    while(a[i]!=‘\0‘)
    {
        j=0;
        if(isalpha(a[i]))
        {
            while((a[i]!=‘ ‘)&&(a[i]!=‘\0‘))
            {
              if(isalpha(a[i]))
				{
                 b[j]=a[i];
                 j++;
                 i++;
                }
                else
					break;
            }
            if((a[i]==‘ ‘)||(a[i]==‘\0‘))
            {
                b[j]=‘\0‘;
				if(strcmp(b,key[0].keyword)==0)
					printf("(1,\"begin\")\n");
                else if(strcmp(b,key[1].keyword)==0)
                    printf("(2,\"if\")\n");
                else if(strcmp(b,key[2].keyword)==0)
                    printf("(3,\"then\")\n");
                else if(strcmp(b,key[3].keyword)==0)
                    printf("(4,\"while\")\n");
                else if(strcmp(b,key[4].keyword)==0)
                    printf("(5,\"do\")\n");
                else if(strcmp(b,key[5].keyword)==0)
                    printf("(6,\"end\")\n");
                else
                    printf("(10,\"%s\")\n",b);
			}
            else
            {
                b[j]=‘\0‘;
                printf("(10,\"%s\")\n",b);
                i--;
            }
        }
 
        else if(isdigit(a[i]))
        {
            while(isdigit(a[i]))
            {
                 b[j]=a[i];
                 j++;
                 i++;
            }
            b[j]=‘\0‘;
            printf("(11,\"%s\")\n",b);
            i--;
        }
        else
        {
            switch(a[i])
            {
            case ‘+‘:
                printf("(13,\"%c\")\n",a[i]);break;
            case ‘-‘:
                printf("(14,\"%c\")\n",a[i]);break;
            case ‘*‘:
                printf("(15,\"%\")\n",a[i]);break;
            case ‘/‘:
                printf("(16,\"%c\")\n",a[i]);break;
            case ‘:‘:
                if(a[i+1]==‘=‘)
				{
                   printf("(18,\":=\")\n");i++;break;
				}
                else
                   printf("(17,\"%c\")\n",a[i]);break;
            case ‘<‘:
                if(a[i+1]==‘=‘)
				{
                   printf("(21,\"<=\")\n");i++;break;
				}
                else if(a[i+1]==‘>‘)
				{
                   printf("(22,\"<>\")\n");i++;break;
				}
                else
                    printf("(20,\"%c\")\n",a[i]);break;
            case ‘>‘:
                if(a[i+1]==‘=‘)
				{
					printf("(24,\">=\")\n");i++;break;
				}
                else
                    printf("(23,\"%c\")\n",a[i]);break;
            case ‘=‘:
                printf("(25,\"%c\")\n",a[i]);break;
            case ‘;‘:
                printf("(26,\"%c\")\n",a[i]);break;
            case ‘(‘:
                printf("(27,\"%c\")\n",a[i]);break;
            case ‘)‘:
                printf("(28\",%c\")\n",a[i]);break;
            case ‘#‘:
                printf("(0,\"%c\")\n",a[i]);break;
            default:
                printf("%c\t语法错误!\n",a[i]);break;
            }
        }
 
        i++;
    }
}
        
技术分享

  

1013 词法分析

原文:http://www.cnblogs.com/zou779596337/p/4876143.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!