• 实验报告一 词法分析程序


    实验一  词法分析实验

    专业:商业软件工程     姓名:陈冠中    学号:201506110195

    一、        实验目的

      词法分析程序完成的是编译第一阶段的工作。词法分析工作是把字符流的源程序变为单词序列,输出到一个中间文件,这个文件作为语法分析程序的输入而继续编译过程。而该实验就是设计一个简单的词法分析程序,通过编制一个程序来完成转换。

    二、        实验内容和要求

    实验要求:

    1.输入:源程序字符串

    2.输出:二元组(种别,单词符号本身)

    实验内容:

    对字符串表示的源程序

    从左到右进行扫描和分解

    根据词法规则,识别出一个个具有独立意义的单词符号以供语法分析之用

    发现词法错误,则返回出错信息

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

    1.词法分析程序.c

    词法分析程序.exe

     

    2.原理分析及流程图

    从录入程序字符串,调用scaner函数 ,读取字符串中的数据,通过判断空格或回车前的单元,进行词法分析,最后以二元组形式输出。

     

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

    void scaner()

     { 

           sum=0;

        for(m=0;m<8;m++)

            t[m++]=NULL;

        ch=c[p++];

        m=0;

        while((ch==' ')||(ch=='\n'))

        ch=c[p++];

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

          {

          while(((ch<='z')&&(ch>='a'))||((ch<='Z')&&(ch>='A'))||((ch>='0')&&(ch<='9')))

          {

                    t[m++]=ch;

              ch=c[p++];

          }

          p--;

          s=10;

    //这段代码是在输入一段源程序后,程序对于里面数字和英文单独判断,输出s。

    t[m++]=’\0’;

    //这里是程序在输入后的字符串进行确定,不进行操作会使程序出错,在输出过程中进行随意分配。

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

        if(strcmp(t,w[n])==0)

           {

                  s=n+1;

             break;

           }

          }

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

          {

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

                  { sum=sum*10+ch-'0';

              ch=c[p++];

                  }

        p--;

    s=11;

    //在对输入的源程序判断时,输入的不在范围的程序段时,输出s

          }

        else switch(ch)

        {

         case '<':t[m++]=ch;

              ch=c[p++];

                     if(ch=='>')

                {  s=22;

                   t[m++]=ch;

                }

              else

                {

                           s=20;

                   p--;

                    }

                  if(ch=='=')

                {  s=21;

                   t[m++]=ch;

                }

                          

              break;

         case '>':t[m++]=ch;

              ch=c[p++];

              if(ch=='=')

                { s=24;

                  t[m++]=ch;

                }

              else

                { s=23;

                  p--;

                }

              break;

         case '+': s=13;

                 t[m++]=ch;

                 break;

         case '-':

                s=14;

                t[m++]=ch; 

              break;

         case '!':ch=c[p++];

              if(ch=='=')

               { s=30;

                 t[m++]=ch;

               }

              else

              { s=31;

                 p--;

              }

              break;

         case '=':

                s=25;

                t[m++]=ch;

                break;

         case '*': s=15;

               t[m++]=ch;        

                     break;

         case '/': s=16;

               t[m++]=ch;

               break;

         case '(': s=27;

               t[m++]=ch;

               break;

         case ')': s=28;

               t[m++]=ch;

               break;

         case '{': s=5;

               t[m++]=ch;

               break;

         case '}': s=6;

               t[m++]=ch;

               break;

         case ';': s=26;

              t[m++]=ch;

              break;

         case '\"': s=32;

               t[m++]=ch;

               break;

         case '#': s=0;

               t[m++]=ch;

               break;

         case ':':t[m++]=ch;

              ch=c[p++];

               if(ch=='=')

                {  s=18;

                   t[m++]=ch;

                }

                     else

              { s=17;

                 p--;

                    }

               break;

        default: s=-1;

             break;

           }

              t[m++]='\0';

      }

    4.运行结果及分析

     

     

    四、        实验总结

    在看到词法分析这个实验时,对于词法分析的这个含义还不是很清楚,对于老师布置这个作业的意义也不清楚。在看到书上对于词法分析的讲解时,才明白词法分析是整个编译的第一阶段工作,可以说好的词法分析程序会让之后的编译工作变得更轻松。在参考了一些词法分析程序后,对于词法分析程序中的侧重点也有所了解,特别是对于一段源程序的存储与判断,最后与种别表进行相应的对比,这是简单的词法分析过程。在自己实现这个代码时,印象最深的是在对于分界符的判断时,在两个以上的一起判断时,就会出现单个分界符的错误输出,在经过一系列的错误尝试后,最后正确输出。可以说这个词法分析程序结合许多不同的方法,最终得到的简单可行的程序。

     

     

  • 相关阅读:
    【视频】特别适合新手的运维利器ansible入门教程手册(附带视频演示和源代码)
    OSI,TCP/IP,TCP,UDP,Socket基础知识整理与回顾
    (语法基础)浅谈面向切面编程(AOP)
    Docker容器安装配置SQLServer服务(Linux)
    Asp Core部署到IIS服务器
    Tomcat:Commons Daemon procrun stdout initialized
    linux查看端口常用命令
    Linux下 Nginx安装与配置(Centos7)
    Linux下将.Asp Core 部署到 Docker容器中
    React Native Tips
  • 原文地址:https://www.cnblogs.com/cgz123/p/5955578.html
Copyright © 2020-2023  润新知