zoukankan      html  css  js  c++  java
  • 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;

    }

  • 相关阅读:
    C#对ListView控件的几个操作技巧
    C#用代码创建控件,以及它的鼠标事件
    C#使用ListView控件对数据进行频繁更新时,出现闪烁问题的解决办法
    C#判断某个键值是否存在于字典中
    FreeMASTER 2.0的安装与使用
    C和C++中获取二维数组的行列数
    Python中类的定义和使用
    Python创建字典和添加键值
    C#用鼠标滚轮控制控件大小,实现滚轮缩放效果
    C#中对Excel文件执行写数据操作
  • 原文地址:https://www.cnblogs.com/Mrwhite/p/4835616.html
Copyright © 2011-2022 走看看