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;
                }
        }

  • 相关阅读:
    (转)Javascript面向对象编程(二):构造函数的继承(作者:阮一峰)
    (转)Javascript 面向对象编程(一):封装(作者:阮一峰)
    asp.net的3个经典范例(ASP.NET Starter Kit ,Duwamish,NET Pet Shop)学习资料
    (转)Ajax的原理和应用
    在ASP.NET MVC应用程序中实现Server.Transfer()类似的功能
    D2GS1.11 的DC Key的相關設置指南
    Win64位操作系统无法运行暗黑2战网D2GS的解决办法
    PVPGN 暗黑破坏神2 1.11b战网配置问题汇总
    PVPGN1.8.2 + D2GS1.11(38)搭建暗黑破坏神1.11b战网(配置指南)
    FineUI Grid控件右键菜单的实现
  • 原文地址:https://www.cnblogs.com/huaziyi666/p/4826926.html
Copyright © 2011-2022 走看看