zoukankan      html  css  js  c++  java
  • 0917 实验一词法分析程序

    #include<stdio.h>
    #include<string.h>
    #include<ctype.h>
    #define M 1000
    struct key
    {
    char g[20];
    };
    typedef struct key KEY;
    int main()
    {
    KEY k[6];
    int i=0,j=0;
    char a[M],b[M],ch;
    strcpy(k[0].g,"begin");
    strcpy(k[1].g,"if");
    strcpy(k[2].g,"then");
    strcpy(k[3].g,"while");
    strcpy(k[4].g,"do");
    strcpy(k[5].g,"end");

    printf("请输入源程序: ");
    do{
    scanf("%c",&ch);
    a[i]=ch;
    i++;
    }while(a[i-1]!='#');
    a[i]='';
    //gets(a);
    i=0;
    while(a[i]!='')
    {
    j=0;
    //if((isalpha(a[i]))||(a[i]=='_'))
    if(isalpha(a[i]))
    {
    while((a[i]!=' ')&&(a[i]!=''))
    {
    if((isalpha(a[i]))||(isdigit(a[i])))
    {
    b[j]=a[i];
    j++;
    i++;
    }
    else
    break;
    }
    if((a[i]==' ')||(a[i]=='')||(a[i]==' '))
    {
    b[j]='';
    if(strcmp(b,k[0].g)==0)
    printf("begin 种别码 1 ");
    else if(strcmp(b,k[1].g)==0)
    printf("if 种别码 2 ");
    else if(strcmp(b,k[2].g)==0)
    printf("then 种别码 3 ");
    else if(strcmp(b,k[3].g)==0)
    printf("while 种别码 4 ");
    else if(strcmp(b,k[4].g)==0)
    printf("do 种别码 5 ");
    else if(strcmp(b,k[5].g)==0)
    printf("end 种别码 6 ");
    else
    printf("%s 种别码 10 ",b);
    }
    else
    {
    b[j]='';
    printf("%s 种别码 10 ",b);
    i--;
    }
    }

    else if(isdigit(a[i]))
    {
    j=0;
    while(isdigit(a[i]))
    {
    b[j]=a[i];
    j++;
    i++;
    }
    b[j]='';
    printf("%s 种别码 11 ",b);
    i--;
    }
    else
    {
    switch(a[i])
    {

    case' ': break;
    case' ': break;
    case '+':
    printf("%c 种别码 13 ",a[i]);break;
    case '-':
    printf("%c 种别码 14 ",a[i]);break;
    case '*':
    printf("%c 种别码 15 ",a[i]);break;
    case '/':
    printf("%c 种别码 16 ",a[i]);break;
    case ':':
    if(a[i+1]=='=')
    { printf(":= 种别码 18 ");i++;break;}
    else
    { printf("%c 种别码 17 ",a[i]);break;}
    case '<':
    if(a[i+1]=='=')
    { printf("<= 种别码 21 ");i++;break;}
    if(a[i+1]=='>')
    { printf("<> 种别码 22 ");i++;break;}
    else
    printf("%c 种别码 20 ",a[i]);break;
    case '>':
    if(a[i+1]=='=')
    { printf(">= 种别码 24 ");i++;break;}
    else
    printf("%c 种别码 23 ",a[i]);break;
    case '=':
    printf("= 种别码 25 ");break;
    case ';':
    printf("; 种别码 26 ");break;
    case '(':
    printf("( 种别码 27 ");break;
    case ')':
    printf(") 种别码 28 ");break;
    case '#':
    printf("# 种别码 0 ");break;
    default:
    printf("%c 语法错误! ",a[i]);break;
    }
    }

    i++;
    }
    }

  • 相关阅读:
    数组练习
    数组
    表达式和语句
    搜索框制作
    操作DOM
    数据类型
    javascript数组属性及方法
    javascript字符串属性及常用方法总结
    css清除浮动float
    vue项目搭建步骤
  • 原文地址:https://www.cnblogs.com/57rongjielong/p/4830384.html
Copyright © 2011-2022 走看看