zoukankan      html  css  js  c++  java
  • 实验一 词法分析系统

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

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

    一、 实验目的

     

    编制一个词法分析程序

    二、 实验内容和要求

    1. 输入:源程序字符串

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

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

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

     

    1. 原理分析及流程图

    主要总体设计问题。

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

     

     

     

     

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

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

        {token[n]='';}

        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("输入有误 ");zbm=-1;break;

            }

    }

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

    3.运行结果及分析

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

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

     

       

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

     

     

     

     

    四、 实验总结

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

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

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

     

     

     

     

     

     

     

     

  • 相关阅读:
    大型网站架构
    Swift 2.x 升为 swift 3后语法不兼容问题适配
    Redis开发
    你必须知道的Dockerfile
    JAVA知识点汇总
    JAVA知识点汇总
    nginx location配置详细解释
    python3 urllib.request.Request的用法
    拉勾网python开发要求爬虫
    爬虫工程师是干什么的?你真的知道了吗?
  • 原文地址:https://www.cnblogs.com/zxc109525/p/5961316.html
Copyright © 2011-2022 走看看