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.   运行结果及分析

四、实验总结

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

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


 
  
  
  
  
  
  
  
  
  
  
  
  
 
 
 

原文地址:https://www.cnblogs.com/cgq520/p/5955002.html