• 201406114257 张俊毅 词法分析 修改完


    #include<stdio.h>

    find(char a[],int i);

    find2(char a[],int i);

    find3(char a[],int i);

    main()

    {

    int i=0;

    char a[100];

    gets(a);

    while (a[i]!='#'&&i<=100)

    {

    if (a[i]=='b'||a[i]=='i'||a[i]=='t'||a[i]=='w'||a[i]=='d'||a[i]=='e')

    {

    i=find(a,i);

    i++;

    }

    else

    {

    i=find3(a,i);

    i++;

    }

    if (a[i]==' ')

    {

    i++;

    }

    }

    printf(" ");

    }

    find(char a[],int i)//仅限于 b i t e w开头的字母

    {

    switch (a[i])

    {

    case 'b':

    if (a[i+1]=='e'&&a[i+2]=='g'&&a[i+3]=='i'&&a[i+4]=='n')

    {

    printf("(begin,1)");

    i=i+4;return i;

    }

    else

    {i=find2(a,i);

    return i;

    }

    case 'i':

    if (a[i+1]=='f')

    {

    printf("(if,2)");

    i=i+1;

    return i;

    }

    else

    {i=find2(a,i);

    return i;

    }

    case 't':

    if (a[i+1]=='h'&&a[i+2]=='e'&&a[i+3]=='n')

    {

    printf("(then,3)");

    i=i+3;

    return i;

    }

    else

    {i=find2(a,i);

    return i;

    }

    case 'w':

    if (a[i+1]=='h'&&a[i+2]=='i'&&a[i+3]=='l'&&a[i+4]=='e')

    {

    printf("(while,4)");

    i=i+4;

    return i;

    }

    else

    {i=find2(a,i);

    return i;

    }

    case 'd':

    if (a[i+1]=='o')

    {

    printf("(do,5)");

    i=i+1;

    return i;

    }

    else

    {i=find2(a,i);

    return i;

    }

    case 'e':

    if (a[i+1]=='n'&&a[i+2]=='d')

    {

    printf("(end,6)");

    i=i+2;

    return i;

    }

    else

    {i=find2(a,i);

    return i;

    }

    default:

    return i;

    }

    }

    find2(char a[],int i)

    {

    if (a[i]!=' ')
    printf("(");

    for (i;a[i]!=' ';i++)

    {

    printf("%c",a[i]);

    }

    if (a[i]==' ')
    printf(",10)");

    return i;

    }

    find3(char a[],int i)

    {

    switch(a[i])

    {

    case '+':

    printf("(+,13)");

    return i;

    case '-':

    printf("(-,14)");

    return i;

    case '*':

    printf("(*,15)");

    return i;

    case '/':

    printf("(/,16)");

    return i;

    case ':':

    if (a[i+1]=='=')

    {

    printf("(:=,18)");

    i++;

    }

    else

    {

    printf("(:,17)");

    }

    return i;

    case '<':

    if (a[i+1]=='=')

    {

    printf("(<=,21)");i++;

    }

    else if(a[i+1]=='>')

    {

    printf("(<>,22)");

    i++;

    }

    else

    {

    printf("(<,20)");

    }

    return i;

    case '>':

    if (a[i+1]=='=')

    {

    printf("(>=,24)");i++;

    }

    else

    {

    printf("(>,23)");

    }

    return i;

    case '=':

    printf("(=,25)");

    return i;

    case ';':

    printf("(;,26)");

    return i;

    case '(':

    printf("((,27)");

    return i;

    case ')':

    printf("(),28)");

    return i;

    case '1':case '2':case '3':case '4':case '5':case '6':case '7':case '8':case '9':case '0':

    printf("(");

    while(i<100)

    {

    if (a[i]<='9'&&a[i]>='0')

    {

    printf("%c",a[i]);

    i++;

    }

    else

    {

    i--;

    printf(",11)");

    return i;

    }

    }

    default:

    break;

    }

    i=find2(a,i);

    return i;

    }

  • 相关阅读:
    javascript 日期月份加减
    ActiveRecord 的类型初始值设定项引发异常
    angularjs $q、$http 处理多个异步请求
    angular.foreach 格式
    PHP基础知识2
    第一个月的学习总结
    JavaScript的学习5
    JavaScript的学习4
    JavaScript的学习3
    JavaScript的学习2
  • 原文地址:https://www.cnblogs.com/Mrwhite/p/4835616.html
Copyright © 2020-2023  润新知