我们小组的编译程序

#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("\n");
    for(i=0;(a[i]!=‘\0‘)&&(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("\n");
}

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(")");
    printf("\n");
}

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++;
        m++;
        b[k]=‘\0‘;

    }
    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;
            printf("\n");
        }
    }
    if(flag==0)
    {
        printf("(10,%s)",b);   //输出标识符
        printf("\n");
    }
}
void Fenxi(char c,char b)  //对特殊字符进行扫描分析
{
    switch(c){
        case ‘ ‘:
            break;
        case ‘+‘:
            printf("(13,+)\n");
            break;
        case ‘-‘:
            printf("(14,-)\n");
            break;
        case ‘*‘:
            printf("(15,*)\n");
            break;
        case ‘/‘:
            printf("(16,/)\n");
            break;
        case ‘:‘:
            if(b==‘=‘)
            {
                i++;
                printf("(18,:=)\n");
            }
            else
                printf("(17,:)\n");
            break;
        case ‘<‘:
            if(b==‘>‘)
            {
                i++;
                printf("(21,<>)\n");
            }
            else if(b==‘=‘)
            {
                i++;
                printf("(22,<=)\n");
            }
            else
                printf("(20,<)\n");
            break;
        case ‘>‘:
            if(b==‘=‘)
            {
                printf("(24,>=)\n");
                i++;
            }
            else
                printf("(23,>)\n");

            break;
        case ‘=‘:
            printf("(25,=)\n");
            break;
        case ‘;‘:
            printf("(26,;)\n");
            break;
        case ‘(‘:
            printf("(27,()\n");
            break;
        case ‘)‘:
            printf("(28,))\n");
            break;
        case ‘#‘:
            printf("(0,#)\n");
            break;
        default:
            {
            printf("\n存在字符 ‘%c‘,无法继续识别!\n",c);
            s=0;    //用s=0记录存在非法字符
            break;
            }
    }
}

  

时间: 2024-10-27 11:49:15

我们小组的编译程序的相关文章

其他小组对我们的评价汇总

各组对我们的成果提出的意见如下: 1.跑男2015 七班的小同学们,恭喜你们的闹钟基本功能已经得到了实现.你们的前期目标就是这个吧?但是在演示的过程中我也发现了一些小小的额问题.首先你们的闹钟没有做出自己的花样 啊!这个需要加把劲了,在巨人的肩膀上往上走有时候也是很困难的一件事儿,在演示的过程中我没有看到你们的闹钟铃声能不能自己随意的在本地音乐库里选择,可不可以联网选择铃声呢?暂时没有看到你们的便签,由于智力有限也没想象出你们的闹钟便签会给我带来什么不一样的感觉,很期待你们下次要给我们带来的惊喜

怎样增加Dave 英语学习小组

一.     增加小组 英语对IT 是非常重要的,但非常多人都不能坚持去学习,Dave 英语学习小组成立与已经超过半年,如今进行扩招.欢迎想提高英语,而且能够坚持每天学习的人,增加Dave 的小组.并坚持每天学习. 要求: (1)  从增加小组当天開始,计算打卡率. (2)   打卡率低于85%的,会被剔出小组,须要又一次增加. (3)  能够安装手机client.利用上下班的零碎时间来学习. (4)  每天学习英语时间控制在1小时左右. 注冊扇贝帐号: http://www.shanbay.c

第九小组

一:PTA题目集 1 删除单链表偶数节点实现在pta上未能满分,运行后如果第一位数是偶数则输出错误,一下为我们的代码 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 struct ListNode *createlist() {     struct ListNode *r,*s,*L,*head;     int n,i=0;     L=(struct L

alpha发布之小组评论

经过今天的alpha发布后,看到了很多优秀的作品,对我的触动很大.平时看似都在一起上课的同学大家都在努力的完成自己的项目,但是自己也美其名曰没有闲着,但是在今天的发布日期上却没有拿出可展示的成果.其实不必管别人通过什么手段完成的项目,或许功能没有全部做完,但是他们能在规定的日期内拿出初步的成果,在这一点上是我学习的榜样.不能将追求完美当做自己今天没有发布的的借口,因为大家的成果都不是完美的,在相同的时间和条件下,我们做的没有其他组好.可以想象在真实的股东评价会议上,我们这个产品已经被pass掉了

2.采用四象限法将你小组的四则运算软件的需求功能进行分类。阐述其优势与不足。------------答题人:张立鹏

如果把要做的事情按照紧急.不紧急.重要.不重要的排列组合分成四个象限,这四个象限的划分有利于我们对时间进行深刻的认识及有效的管理. 第一象限 这个象限包含的是一些紧急而重要的事情,这一类的事情具有时间的紧迫性和影响的重要性,无法回避也不能拖延,必须首先处理优先解决.它表现为重大项目的谈判,重要的会议工作等. 第二象限 这二象限不同于第一象限,这一象限的事件不具有时间上的紧迫性,但是,它具有重大的影响,对于个人或者企业的存在和发展以及周围环境的建立维护,都具有重大的意义. 第三象限 第三象限包含的

连连看的设计与实现——四人小组项目(NABCD)

小组名称:天天向上 成员:王森.张政,张金生,栾骄阳 题目:连连看游戏 NABCD N(需求) 游戏最大的乐趣在于玩法,我们要想在众多的连连看游戏当中脱颖而出,就需要增加更多富有乐趣.吸引用户的玩法. A( 做法) 讲过小组讨论以及咨询同学,想了一些具有趣味性的玩法,如下: 玩法1:增加时间图标按钮,如果时间图标按钮消除,系统会增加游戏时间. 玩法2:用户在系统提供的图片中选择喜欢的按钮图片,系统根据用户的选择生成一关. 玩法3:系统设有排行榜功能.在一局游戏中,当两个按钮消除成功时,增加游戏积

第四题:根据邹欣老师的教材相关内容,确定小组成员的角色,细化项目需求、时间计划、列出产品积压工作项和预计开发时间

根据小组的详细讨论,以个人爱好与特长结合,最后确定了每个成员担当的角色 小组成员 角色分工   尤心心 组长,项目每周管理与总结,开发工程师   徐萧瑞 结构设计与数据库设计,开发工程师   杨宇杰 需求分析,开发工程师   张立鹏 前端开发,开发工程师   张鹏 测试与开发工程师   细化项目需求: 基本需求是:学生注册登录系统,开始答小学生四则运算题(题目随机产生20道),时间限定,分数产生 可能拓展需求:题目难度选择(带真分数运算,最大数值等),题目产生数量选择,查看答题,错题重新考试,分

四人小组项目——连连看

小组名称:天天向上 组长:王森 组员:张政,张金生,栾骄阳 题目:连连看游戏 项目期限:十周内,暂定2016.9.10-2016.11.19 需求分析: 1.概要:玩家可以将2个相同图案的牌连接起来,连接不多于3根直线,就可以成功的将两个图片消除. 2.操作:第一次使用鼠标点击游戏界面中的牌,该牌此时为“被选中”以特殊方式显示:再次以鼠标点击其他牌,若该牌与被选中的牌图案相同,且把第一个牌到第二个牌连起来,中间的直线不超过3根,则消掉这一对牌,否则第一个牌变为未被选中状态,而第二张牌变成选中状态

评估组员在小组中的表现

我认为在软件工程项目中,每个组员都应当充分发挥自己的优势,找到自己适合的任务类型.有的同学善于分析,擅长对任务进行统筹规划,并且思考问题能够细致入微,这样的同学可以做需求分析.有的同学动手实践能力强,善于编写调试程序,这样的同学就可以负责具体实现.当然,这种同学很可能是少数.如果最终实现效果好,编写程序的同学应当或者较高的评估分数.有的同学如果以上两方面都不擅长,或都不是很感兴趣,可以参与软件的测试与维护.这样的同学评估分数大多数要低于上面两者,但是表现突出.有突出贡献的同学仍可以获得比较高的分