• 203陈冠权词法分析实验报告


    实验一、词法分析实验

    专业:商业软件工程3班   姓名:陈冠权  学号:201506110203

    一、实验目的

      通过设计编译程序完成一个词法分析器,加深对词法分析的理解。

    二、实验内容和要求

    输入一连串的字符,即保留字、标识符、常数、运算符和分隔符,通过词法

    分析器来识别具有独立意义的字符,并输出各个字符的内部编码。

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

    1. 1.   源程序名:词法分析.c

    可执行程序名:词法分析.exe

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

    要求在主函数输入字符串,将字符串存入数组里面,调用函数来进行比较,

    识别字符串并输出种别码,主要采用非递归的算法完成字符串的比较。

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

    main()  //主函数

    {

        printf("请输入字符串(以#结束):\n");

        p=0;

        do{

               ch=getchar();

               a[p++]=ch;   //将输入的字符串存放到一个数组里面

        }while(ch!='#');

        p=0;

        printf("\n词法分析结果为:\n");

        do{

            scaner();

            switch(s){   //判断返回值

                case 11:

                    printf("(%d,%d))\n",s,sum);

                    break;

                case -1:

                    printf("\n 不存在!\n");

                    break;

                default:

                    printf("(%d,%s)\n",s,b);

        }

         }while(s!=0);

        getch();

    }

    利用一个switch来识别字符,并输出种别码

    switch(ch)

                {

                    case'<':

                        m=0;

                        b[m++]=ch;

                        ch=a[p++];

                        if(ch=='>')

                        {

                            s=21;

                            b[m++]=ch;

                        }

                        else if(ch=='=')

                        {

                            s=22;

                            b[m++]=ch;

                        }

                        else

                        {

                            s=20;

                            ch=a[p--];

                        }

                        break;

                    case'>':

                        m=0;

                        b[m++]=ch;

                        ch=p++;

                        if(ch=='=')

                        {

                            s=24;

                            b[m++]=ch;

                        }

                        else

                        {

                            s=23;

                            ch=a[p--];

                        }

                        break;

                 case':':

                     m=0;

                     b[m++]=ch;

                     ch=a[p++];

                    if(ch=='=')

                    {

                        s=18;

                        b[m++]=ch;

                    }

                    else

                    {

                        s=17;

                        ch=a[p--];

                    }

                    break;

                 case'+':

                     s=12;

                     b[0]=ch;

                     break;

                 case'-':

                     s=13;

                     b[0]=ch;

                     break;

                 case'*':

                     s=14;

                     b[0]=ch;

                     break;

                 case'/':

                     s=15;

                     b[0]=ch;

                     break;

                 case'=':

                     s=16;

                     b[0]=ch;

                     break;

                 case';':

                     s=17;

                     b[0]=ch;

                     break;

                 case'(':

                    s=18;

                    b[0]=ch;

                    break;

                 case')':

                     s=19;

                     b[0]=ch;

                     break;

                 case'#':

                     s=0;

                     b[0]=ch;

                     break;

                 default:

                     s=-1;

                }

    4.   运行结果及分析

    四、实验总结

      在编写该程序时,在输入字符串并且比较时,没有找到一个适合的方法来解

    决这个问题,还有就是在识别字符时,没有把标识符等分开来比较,总是出现乱码。


     
      
      
      
      
      
      
      
      
      
      
      
      
     
     
     

  • 相关阅读:
    根据W3C总结Ajax基础技术
    MVC中ActionName标记属性的用法
    为什么做网站一般不用服务端控件?
    Jquery两个比较常用的方法each和data
    MVC中的路由
    SQL中获取刚插入记录时对应的自增列的值
    第一个文章,今天比较兴奋啊! 给大家一个关于SQL复合查询的文章(动态生成多个where条件)
    获取 汉字的首字母(例如张三返回zs)核心方法chinesecap()
    ASP.NET中判断密码的安全度(低,中,高)
    C# 关于密码加密 (转载)
  • 原文地址:https://www.cnblogs.com/cgq520/p/5955002.html
Copyright © 2020-2023  润新知