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

    #include <stdio.h>
    #include <string.h>
    int Input1(char a)
    {
    int i=0;
    switch(a)
    {
    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(':'):
    printf("%c 17 ",a);i++;break;
    case('<'):
    printf("%c 20 ",a);i++;break;
    case('>'):
    printf("%c 23 ",a);i++;break;
    case('='):
    printf("%c 25 ",a);i++;break;
    case(';'):
    printf("%c 26 ",a);i++;break;
    case('('):
    printf("%c 27 ",a);i++;break;
    case(')'):
    printf("%c 28 ",a);i++;break;
    case('#'):
    printf("%c 0 ",a);i++;break;
    }
    return i;
    }
    int Input2(char a[])
    {
    int i=0;
    if((strcmp(a,"if")==0))
    {printf("if 2 "); i++;}
    else if((strcmp(a,"do")==0))
    {printf("do 5 "); i++;}
    else if((strcmp(a,":=")==0))
    {printf(":= 18 "); i++;}
    else if((strcmp(a,"<=")==0))
    {printf("<= 21 "); i++;}
    else if((strcmp(a,"<>")==0))
    {printf("<> 22 "); i++;}
    else if((strcmp(a,">=")==0))
    {printf(">= 24 "); i++;}
    return i;
    }
    int Input3(char a[])
    {
    int i=0;
    if((strcmp(a,"end")==0))
    {printf("end 6 "); i++;}
    else if((strcmp(a,"dd*")==0))
    {printf("dd* 11 "); i++;}
    return i;
    }
    int Input4(char a[])
    {
    int i=0;
    if((strcmp(a,"then")==0))
    {printf("then 3 "); i++;}
    return i;
    }
    int Input5(char a[])
    {
    int i=0;
    if((strcmp(a,"begin")==0))
    {printf("begin 1 "); i++;}
    else if((strcmp(a,"while")==0))
    {printf("while 4 "); i++;}
    return i;
    }
    int Input7(char a[])
    {
    int i=0;
    if((strcmp(a,"|(||d)*")==0))
    {printf("l(l|d)* 10 "); i++;}
    return i;
    }


    #define MAX 100

    struct Code
    {
    char chars[MAX];
    };

    int main()
    {
    char SC[MAX];
    Code code[MAX];
    int i,j,k,n;
    printf("------词法分析------ ");
    printf("请输入代码: ");
    gets(SC);
    printf(" 单词符号 种别码 ");
    i=j=k=0;
    n=1;
    while(SC[i]!='')
    {
    if(SC[i]==' ')
    i++;
    code[k].chars[j]=SC[i];
    code[k].chars[j+1]='';

    if(code[k].chars[j]>='0'&&code[k].chars[j]<='9'||code[k].chars[j]=='.'){
    j++;i++;
    if((SC[i]<'0'||SC[i]>'9')&&SC[i]!='.')
    {printf("%s 数字 ",code[k].chars);n=1;j=0;}
    }
    else
    {
    switch(n)
    {
    case(1): if(Input1(code[k].chars[j])==1)
    {k++;j=-1;}break;
    case(2): if(Input2(code[k].chars)==1)
    {k++;j=-1;}break;
    case(3): if(Input3(code[k].chars)==1)
    {k++;j=-1;}break;
    case(4): if(Input4(code[k].chars)==1)
    {k++;j=-1;}break;
    case(5): if(Input5(code[k].chars)==1)
    {k++;j=-1;}break;
    case(7): if(Input7(code[k].chars)==1)
    {k++;j=-1;}break;
    default:
    printf("%s 语法错误! ",code[k].chars);k++;j=-1;break;
    }
    if(j==-1)
    n=0;
    j++;
    i++;
    n++;
    }
    }
    return 0;
    }

  • 相关阅读:
    PHP获取http头信息
    zend studio 改变背景颜色
    WebApp之Meta标签
    js的左右滑动触屏事件
    越狱的 iPhone、iPad 通过网站实现一键安装 ipa 格式的 APP 应用
    移动平台的meta标签神奇的功效
    HTML5 localStorage本地存储实际应用举例
    移动端开发小结
    openSUSE 安装源
    两种方法求Int最值
  • 原文地址:https://www.cnblogs.com/wucanlong/p/4859101.html
Copyright © 2011-2022 走看看