zoukankan      html  css  js  c++  java
  • 词法分析实验报告

    实验一、词法分析实验

     

    专业:商软2班   姓名:司徒春燕  学号:201506110187

     

     

     

    一、        实验目的

     

         编制一个词法分析程序。

    二、        实验内容和要求

          输入:源程序字符串

    输出:二元组(种别,单词本身)

    待分析语言的词法规则。

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

     

    1. 1.      源程序名:压缩包文件(rarzip)中源程序名×××.c

    可执行程序名:×××.exe

     

    词法分析.c 

    1. 2.      原理分析及流程图

    主要总体设计问题。

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

    原理分析:让用户输入程序代码,将代码以字符串的形式存入文件中,再将文件作为参数传到词法分析函数中,识别出各个具有独立意义的单词,即基本关键字、标识符、数字、运算符、分隔符五大类。并依次输出各个单词的种别。

    流程图:

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

    实现主要功能的程序段,重要的是程序的注释解释。

    FILE *fp;

        char ch;

        printf("请输入源程序代码(以#键结束): ");

        if((fp=fopen("data.txt","w"))==NULL)

        {

               printf("Failure to open data.txt! ");

            exit(0);

        }

        ch=getchar();

        while(ch!='#') //将字符串存放到文件中

        {

               fputc(ch,fp);

            ch=getchar();

        }

    fclose(fp);

    //词法分析,识别文件中的字符串

    while(!feof(fp))

       {

              if(ch=='+'||ch=='-'||ch=='*'||ch=='/'||ch=='%'||ch=='='||ch=='>'||ch=='<') //判断判断运算符

                     printf("%c 运算符 ",ch);

            else if(ch==';'||ch=='{'||ch=='}'||ch=='('||ch==')')//判断分隔符

                     printf("%c 分隔符 ",ch);

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

    //判断字符是不是字母

              {

                     if((fp1=fopen("data1.txt","w"))==NULL)

                     {

                            printf("Failure to open data1.txt! ");

                    exit(0);

                     }

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

    //将每个字母合并成一个字符串放到一个新的文件中

                     {

                            fputc(ch,fp1);

                    i++;

                    ch=fgetc(fp);

                     }

                fclose(fp1);

                if((fp1=fopen("data1.txt","rb"))==NULL)

    //从文件中读取字符串

                     {

                            printf("Failure to open data1.txt! ");

                    exit(0);

                     }

                fgets(alp,i+1,fp1);

                for(j=0;j<30;j++)

                     {

                            if(strcmp(alp,keyword[j])==0)

    //判断是否为关键字或标识符

                    flag=1;

                     }

                if(flag==1)

                            printf("%s 关键字 ",alp);

                else

                            printf("%s 标识符 ",alp);

                fclose(fp1);

                Analyse(fp,ch);

              }

            else if(ch==' '||ch==' ')//识别回车和空格

                     printf(" ");

            else if(ch>='0'&&ch<='9')//识别数字

              {

                     if((fp2=fopen("data2.txt","w"))==NULL)

                     {

                            printf("Failure to open data2.txt! ");

                    exit(0);

                     }

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

                     {

                            fputc(ch,fp2);

                    n++;

                    ch=fgetc(fp);

                     }

                fclose(fp2);

                if((fp2=fopen("data2.txt","rb"))==NULL)

                     {

                            printf("Failure to open data2.txt! ");

                    exit(0);

                     }

                fgets(num,n+1,fp2);

                printf("%s 数字 ",num);

                fclose(fp2);

                Analyse(fp,ch);//递归继续识别

    }

    1. 4.      运行结果及分析

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

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

     

     

     

    四、        实验总结

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

    这次实验对我来说是挺难的,花了很长的时间来做的,程序还有很多地方有待完善。

    实验过程中我觉得比较难的是输入源程序,然后录入,再者就是从文件中识别字符串,我通过向同学请教,得知字符串可以存放在文件中,然后整个程序是靠文件来支撑的。

     

     

  • 相关阅读:
    Native Boot 从一个 VHD 引导系统的相关说明
    bind()函数的深入理解及两种兼容方法分析
    四、CentOS 6.5 上传和安装Nginx
    jQuery 常见操作实现方式
    “贷券” 信贷系统
    注册 Ironic 裸金属节点并部署裸金属实例
    hover()方法
    Uncaught SyntaxError: Inline Babel script: Unexpected token
    Uncaught Error: The `style` prop expects a mapping from style properties to values, not a string
    jquery bind事件
  • 原文地址:https://www.cnblogs.com/stcy520/p/5960355.html
Copyright © 2011-2022 走看看