词法分析实验报告

author author     2022-08-08     368

关键词:

实验一、词法分析实验

商务软件工程三班   吴文成  201506110217

一、        实验目的

调试词法分析程序,实现从源程序中分出各种单词的方法;

加深对课堂教学的理解;

提高词法分析方法的实践能力。

掌握从源程序文件中读取有效字符的方法和产生源程序的内部表示文件的方法;

掌握词法分析的实现方法;

上机调试编出的词法分析程序;

二、        实验内容和要求

1)      掌握从源程序文件中读取有效字符的方法和产生源程序的内部表示文件的方法

2)      掌握词法分析的实现方法

3)      掌握如何分配种别码;

4)      上机调试编出的词法分析程序

5)      为简单起见,假设编译语言具有以下特征,该词法分析器至少能识别以下几类种别码:

 

技术分享技术分享

 

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

1)源程序

#include<stdio.h>
main()
{
    char n[100],n1[100],n2[100];
    int i,i1=0,i2=0,j;
    printf("请你输入字符串:\n");
    gets(n);
      for(i=0;i<n;i++)
    {
        j=(int) n[i];
        n1[i]=n[100];
        if((j>=65) && (j<=90)||(j>=90) && (j<=122))
        {
            n1[i1]=n[i];
            i1++;
        }
        else{
             while(i1!=0)
            {
               n1[i1]=\0;
               if(strcmp(n1,"auto")==0||strcmp(n1,"int")==0||strcmp(n1,"double")==0||strcmp(n1,"long")==0||strcmp(n1,"char")==0||strcmp(n1,"float")==0||strcmp(n1,"short")==0||strcmp(n1,"signed")==0||strcmp(n1,"unsigned")==0||strcmp(n1,"struct")==0||strcmp(n1,"union")==0||strcmp(n1,"enum")==0||strcmp(n1,"static")==0||strcmp(n1,"switch")==0||strcmp(n1,"case")==0||strcmp(n1,"default")==0                        ||strcmp(n1,"break")==0||strcmp(n1,"register")==0||strcmp(n1,"const")==0||strcmp(n1,"volatile")==0||strcmp(n1,"typedef")==0||strcmp(n1,"extern")==0||strcmp(n1,"return")==0||strcmp(n1,"void")==0||strcmp(n1,"continue")==0||strcmp(n1,"do")==0||strcmp(n1,"while ")==0||strcmp(n1,"if")==0||strcmp(n1,"else")==0||strcmp(n1,"for")==0||strcmp(n1,"goto")==0||strcmp(n1,"sizeof")==0)
             {
               n1[i1]=);
               printf("(1,");
               puts(n1);
               i1=0;
               memset(n1,0,100);
             }
              else
             {
               n1[i1]=);
               printf("(10,");
               puts(n1);
               i1=0;
               memset(n1,0,100);
             }

            }

          if((j>48)&& (j<57))
         {
             n2[i2]=n[i];
             i2++;
         }
         else{
               if((int) n[i-1]>48 && (int) n[i-1]<57)
               {
               n2[i2]=);
               printf("(11,");
               puts(n2);
               i2=0;
               memset(n2,0,100);
               }

         if(j==42||j==43||j==45||j==47||j==61||j==62||j==60)
        {

            if((int) n[i+1]==61)
            {
             switch (j)
             {
               case 60:
                      printf("(21,%c=)",n[i]);
                      printf("\n");
                      break ;
               case 62:
                      printf("(24,%c=)",n[i]);
                      printf("\n");
                      break;
              default :
                      printf("(非法字符,%c)",n[i]);
                      printf("\n");
                      break;
             }
             i=i+1;
            }
            else
            {
             switch (j)
             {
               case 42:
                      printf("(15,%c)",n[i]);
                      printf("\n");
                      break ;
               case 43:
                      printf("(13,%c)",n[i]);
                      printf("\n");
                      break;
               case 45:
                      printf("(14,%c)",n[i]);
                      printf("\n");
                      break;
               case 60:
                      printf("(20,%c)",n[i]);
                      printf("\n");
                      break;

               case 61:
                      printf("(25,%c)",n[i]);
                      printf("\n");
                      break;
               case 62:
                      printf("(24,%c)",n[i]);
                      printf("\n");
                      break;
               default :
                      printf("(非法字符,%c)",n[i]);
                      printf("\n");
                      break;

             }
            }
        }
        else if(j==32)
        {

        }
        else if(j==33||j==44||j==46||j==58||j==59||j==63||j==44)
        {
            switch (j)
             {
               case 59:
                      printf("(26,%c)",n[i]);
                      printf("\n");
                      break ;
               default :
                      printf("(非法字符,%c)",n[i]);
                      printf("\n");
                      break;
             }
        }
        else if(j==34||j==35||j==38||j==39||j==40||j==41||j==123||j==124||j==125||j==126)
        {
            switch (j)
             {
               case 40:
                      printf("(27,%c)",n[i]);
                      printf("\n");
                      break ;
               case 41:
                      printf("(28,%c)",n[i]);
                      printf("\n");
                      break ;
               case 35:
                      printf("(0,%c)",n[i]);
                      printf("\n");
                      break ;
               default :
                      printf("(非法字符,%c)",n[i]);
                      printf("\n");
                      break;
             }
        }
        else
        {
            break;
        }

     }

    }

  }

 

 

(2)   原理分析及流程图

 

 

 技术分享

 

 

 

 

(3)运行结果及分析

 

 技术分享

 

 

四、        实验总结

刚开始时,头绪不是很多,后来慢慢的有了头绪,就一步一步的做下去,一步一步的完善功能,直至达到要求,同时也明白了很多道理:

(1)   明白了输入的字符串是如何进行输出的

(2)   明白了字符串的分类

(3)   懂的了是如何将字符判断的

实验报告-词法分析

---恢复内容开始---实验一、词法分析实验专业:商软二班  姓名:黄思慧 学号:201506110189一、       实验目的通过设计编制调试一个具体的词法分析程序,加深对词法分析原理的理解。并掌握... 查看详情

词法分析实验报告

 实验一、词法分析实验专业商业软件工程 姓名黄施策 学号201506110228一、       实验目的    编制一个词法分析程序。二、       实验内容和要求 &nb... 查看详情

词法分析实验报告

实验一、词法分析实验商务软件工程三班  吴文成 201506110217一、       实验目的调试词法分析程序,实现从源程序中分出各种单词的方法;加深对课堂教学的理解;提高词法分析方法的实践能... 查看详情

词法分析实验报告1

实验一、词法分析实验商软二班张智恒201506110172一、       实验目的     编制一个词法分析程序 二、       实验内容和要求编写一个词法分析程序,使其能... 查看详情

词法分析实验报告

实验一、词法分析实验专业:商业软件工程 姓名:程嘉明 学号:201506110185一、 实验目的通过编写并上机调试一个词法分析程序,掌握在对程序设计语言的源程序进行扫描的过程中,将其分解后各类单词的词法分析方... 查看详情

词法分析实验报告

实验一:词法分析专业:商业软件工程  姓名:陈锐 学号:201506110103一、       实验目的     编制一个词法分析程序。二、       实验内容和要求1.... 查看详情

词法分析实验报告

实验一、词法分析实验专业:商业软件工程  姓名: 陈 瑾学号:201506110101一、       实验目的     编制一个词法分析程序 二、        查看详情

词法分析实验报告

...行距。报告提交和打印输出时请去掉此框。 实验一、词法分析实验专业:商业软件工程  姓名:陈蔓嘉 学号:201506110245一、       实验目的     编制一个词法分析程序。... 查看详情

词法分析实验报告

实验一、词法分析实验商业软件工程 符致伟 201506110157一、       实验目的 编制一个词法分析程序二、       实验内容和要求 输入:源程序字符串 输出:二元... 查看详情

词法分析实验报告

...行距。报告提交和打印输出时请去掉此框。 实验一、词法分析实验  商软二班张智恒201506110172一、       实验目的     编制一个词法分析程序 二、    查看详情

词法分析实验报告

 实验一、词法分析器实验专业:商软工程3班  姓名:林美全 学号:201506110220一、       实验目的设计,编制一个简单词法分析程序对输入字符串进行识别并做简单有效输出从而加深对词... 查看详情

实验一词法分析实验报告

实验一、词法分析实验专业:商业软件工程2班 姓名别博文 学号201606110175一、 实验目的      编制一个词法分析程序。 二、 实验内容和要求     对字符串表示的源程序... 查看详情

词法分析实验报告

实验一、词法分析实验专业商业软件3班 姓名林鑫杰学号201506110211一、       实验目的 编制一个词法分析程序。 二、       实验内容和要求输入:源程序字符串输出... 查看详情

实验报告1—’词法分析

实验一、词法分析实验专业:商业软件工程  姓名:钟菲菲 学号:201506110191一、        实验目的 编制一个词法分析程序 二、        实验内容和要求&nb... 查看详情

词法分析实验报告

实验一、词法分析程序实验专业:商业软件  姓名:杨链新 学号:201506110113一、       实验目的 通过设计调试词法分析程序,实现从源程序中分出各种单词的方法;加深对课堂教学的理解... 查看详情

词法分析程序实验报告

实验一词法分析实验商业软件工程2班 黄铭坤 201506110147一、        实验目的      编制一个词法分析程序。二、        实验内容和 查看详情

词法分析-实验报告

...    实验目的通过设计编制调试一个具体的词法分析程序,加深对词法分析原理的理解。并掌握在对程序设计语言源程序进行扫描过程中将其分解为各类单词的词法分析方法。二、      实验内... 查看详情

词法分析程序实验报告

实验一、词法分析实验专业:商业软件工程  姓名王芷玲 学号201606110246一、 实验目的      编制一个词法分析程序。 二、 实验内容和要求     对字符串表示的源程序... 查看详情