zoukankan      html  css  js  c++  java
  • 0916 词法分析程序

    #include<stdio.h>
    #include<string.h>
    void Fenxi(char c,char b);
    void word(char a[]);
    void number(char a[]);
    int i; //定义全局变量i
    int s=1; //用来记录是否存在非法字符
    main(){
    char a[50];
    printf("请输入源程序:");
    gets(a);
    printf("您要分析的源程序为:");
    printf("%s",a);
    printf(" ");
    for(i=0;(a[i]!='')&&(i<50)&&s==1;i++)
    {
    if((a[i]>='a' && a[i]<='z')||(a[i]>='A' && a[i]<='Z'))
    word(a);
    else if(a[i]>='0' && a[i]<='9')
    number(a);
    else
    Fenxi(a[i],a[i+1]);
    }
    printf(" ");
    }

    void number(char a[]) //对数字字符进行扫描分析
    {
    char b[50];
    int m,k=0,t;
    m=i;
    while(a[m]>='0' && a[m]<='9')
    {
    b[k]=a[m]; //用数组b存放数组a中的数字
    k++;
    m++;
    }
    i=m-1;
    printf("(11,");
    for(t=0;t<k;t++)
    printf("%c",b[t]);
    printf(")");
    }

    void word(char a[]) //对字母字符进行扫描分析,并识别保留字
    {
    int k=0,m,flag=0,t;
    char b[50];
    char *key[6]={"begin","if","then","while","do","end"};
    m=i;
    while((a[m]>='a'&&a[m]<='z')||(a[m]>='A'&&a[m]<='Z')) //用数组b存放数组a中的字母
    {
    b[k]=a[m];
    k++;
    b[k]='';
    m++;
    }
    i=m-1;
    for(t=0;t<6;t++)
    {
    if(strcmp(b,key[t])==0) //将数组b与关键字进行比较
    {
    printf("(%d,%s)",t+1,key[t]); //输出关键字
    flag=1;
    }
    }
    if(flag==0)
    {
    printf("(10,%s)",b); //输出标识符
    }
    }
    void Fenxi(char c,char b) //对特殊字符进行扫描分析
    {
    switch(c){
    case ' ':
    break;
    case '+':
    printf("(13,+)");
    break;
    case '-':
    printf("(14,-)");
    break;
    case '*':
    printf("(15,*)");
    break;
    case '/':
    printf("(16,/)");
    break;
    case ':':
    if(b=='=')
    {
    i++;
    printf("(18,:=)");
    }
    else
    printf("(17,:)");
    break;
    case '<':
    if(b=='>')
    {
    i++;
    printf("(21,<>)");
    }
    else if(b=='=')
    {
    i++;
    printf("(22,<=)");
    }
    else
    printf("(20,<)");
    break;
    case '>':
    if(b=='=')
    {
    printf("(24,>=)");
    i++;
    }
    else
    printf("(23,>)");
    break;
    case '=':
    printf("(25,=)");
    break;
    case ';':
    printf("(26,;)");
    break;
    case '(':
    printf("(27,()");
    break;
    case ')':
    printf("(28,))");
    break;
    case '#':
    printf("(20,#)");
    break;
    default:
    {
    printf(" 存在字符 '%c',无法继续识别! ",c);
    s=0; //用s=0记录存在非法字符
    break;
    }
    }
    }

  • 相关阅读:
    用例建模Use Case Modeling——传感器智能分析引擎
    结合工程实践分析同类软件产品-抖音快手微视
    为知笔记快捷键
    unity__细碎小知识
    unity__脚本实例化
    unity_GUI
    unity__音频
    关于js获取赋值,遍历属性
    关于节点,jquery的使用以及动画效果
    关于数组,对象,构造器的写法以及事件的使用
  • 原文地址:https://www.cnblogs.com/xjy-gg/p/4827868.html
Copyright © 2011-2022 走看看