六云

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

实验一、词法分析系统实验

                                                                                 专业  商业软件工程2 姓名 朱晓城 学号 201506110143

一、 实验目的

 

编制一个词法分析程序

 

二、 实验内容和要求

1. 输入:源程序字符串

2. 输出:二元组(种别,但此本身)

3. 待分析语言的语法规则

 

三、 实验方法、步骤及结果测试

 

1. 原理分析及流程图

主要总体设计问题。

(包括存储结构,主要算法,关键函数的实现等)

 

 

 

 

 

2. 主要程序段及其解释:

 for(n=0;n<100;n++)

    {token[n]='\0';}

    n=0;

    ch=sum[a++];//全局变量p=0

    while(ch==' '){ch=sum[a++];}//有空格就继续(判断标识符前是否存在空格)

 

    if((ch>='a'&&ch<='z')||(ch>='A'&&ch<='Z'))

    {

        do{

            token[n++]=ch;

            ch=sum[a++];

        }while((ch>='a'&&ch<='z')||(ch>='a'&&ch<='z')||(ch>='0'&&ch<='9'));

        zbm=21;

 

        for(n=0;n<18;n++)

        {

            if(strcmp(token,keyword[n])==0)//判断输入的英文是否与原定义的特殊单词相符        {

            zbm=n+1;

 

        }

        }

        a--;

 

    }

    else if(ch>='0'&&ch<='9')

    {

        a--;

        do

        {

            token[n++]=sum[a++];

            ch=sum[a];

        }while(ch>='0'&&ch<='9');

        zbm=22;

 

 

        return;

    }

    else

    {

 

 

        switch(ch)

        {

        case '+':zbm=24;token[0]=ch;break;

        case '-':zbm=25;token[0]=ch;break;

        case '*':zbm=26;token[0]=ch;break;

        case '/':zbm=27;token[0]=ch;break;

        case ':':zbm=28;token[0]=ch;

            ch=sum[a++];

            if(ch=='='){token[1]=ch;zbm++;}

            else a--;

            break;

        case '<':zbm=30;token[0]=ch;

            ch=sum[a++];

            if(ch=='='){token[1]=ch;zbm++;}

            else if(ch=='>'){token[1]=ch;zbm=zbm+2;}

            else a--;

            break;

        case '>':zbm=33;token[0]=ch;

            ch=sum[a++];

            if(ch=='='){token[1]=ch;zbm++;}

            else a--;

            break;

        case '=':zbm=35;token[0]=ch;break;

        case ';':zbm=36;token[0]=ch;break;

        case '(':zbm=37;token[0]=ch;break;

        case ')':zbm=38;token[0]=ch;break;

        case '{':zbm=39;token[0]=ch;break;

        case '}':zbm=40;token[0]=ch;break;

        case '!':zbm=41;token[0]=ch;break;

        case '@':zbm=42;token[0]=ch;break;

        case '$':zbm=43;token[0]=ch;break;

        case '%':zbm=44;token[0]=ch;break;

        case '^':zbm=45;token[0]=ch;break;

        case '&':zbm=46;token[0]=ch;break;

        case '#':zbm=0;token[0]=ch;break;

 

        default: printf("输入有误\n");zbm=-1;break;

 

        }

 

 

}

该段程序,主要是根据输入的句子进行分析,从而进行分类,赋予各自的种别码。

3.运行结果及分析

一般必须配运行结果截图,结果是否符合预期及其分析。

   (截图需根据实际,截取有代表性的测试例子)

 

 

   

   因为在中间有录入到回车键,而源程序没有给换行进行分类,因此自动分为输入有误的一类。

 

 

 

 

 

 

四、 实验总结

 

心得体会,实验过程的难点问题及其解决的方法。

 第一次遇到这种一来就做这么大个程序,开始的时候一脸懵逼,从网站上看各种的分析,例子,还是不懂,虽说也有一个很模糊的思路,但是这种一开始就让我自己做出来的真的很难。而且刚教的分而治之的办法我确实没有别人想的那么仔细。基本只能靠在其他同学的程序跟网上的例子中找合适的,然后仿照着来做。

  说真的,我其实根本就搞不懂这一门学科学的是什么。上课的时候也是一头雾水,根本听不懂,原因主要还是在我自己本身就上课不认真,下课不复习预习吧。现在时间还在,只能靠自己慢慢赶上来了。

 

 

 

 

 

 

 

 

 

posted on 2016-10-14 17:24  流XC  阅读(217)  评论(3编辑  收藏  举报