zoukankan      html  css  js  c++  java
  • 词法语法分析

    实验一、词法程序分析实验

    专业:商业软件2班   姓名:蔡瑞奇  学号:201506110161

    一、        实验目的

    设计和调解一个词法分析程序,加强对词法分析的理解。

    二、        实验内容和要求

    用户输入一条字符串,程序对用户输入的字符逐一进行判断,逐一识别出该字符串哪些是关键字,哪些是数字,字母,并将识别的结果以二元组的形式进行输出。

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

     

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

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

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

     

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

    #include<stdio.h>

    #include<string.h>

    #define N 100

    main()

    {

        int t;

        int i,j;

        char ch;

        char x[N];

        char y[N];

        char a[5]={'b','e','g','i','n'};

        char b[5]={'w','h','i','l','e'};

        char c[4]={'t','h','e','n'};

        char d[2]={'i','f'};

        char e[3]={'e','n','d'};

        char f[2]={'d','o'};

        printf("请输入一个字符串: ");

        gets(x);

        i=0;

        j=0;

        do

        {

               while(x[i]==10||x[i]==13||x[i]==9)

               {

                      i++;

               }

               if(x[i]>='a'&&x[i]<='z')

               {

                      y[j]=x[i];

                      j++;

               }

               if((t=strcmp(a,y))==0)

                      printf("(begin,1)");

               else if((t=strcmp(b,y))==0)

                      printf("(while,4)");

               else if((t=strcmp(c,y))==0)

                      printf("(then,3)");

               else if((t=strcmp(d,y))==0)

                      printf("(if,2");

               else if((t=strcmp(e,y))==0)

                      printf("(end,6)");

               else if((t=strcmp(f,y))==0)

                      printf("(do,5)");

               switch(x[i])

               {

               case '+':printf("(13,+)");

                      break;

               case '-':printf("(14,-)");

                      break;

               case '*':printf("(15,*)");

                      break;

               case '/':printf("(16,/)");

                      break;

               case ':':printf("(17,:)");

                      break;

               case ':=':printf("(18,:=)");

                      break;

               case '<':printf("(20,<)");

                      break;

               case '<=':printf("(21,<=)");

                      break;

               case '<>':printf("(22,<>)");

                      break;

               case '>':printf("(23,>)");

                      break;

               case '=':printf("(25,=)");

                      break;

               case ';':printf("(26,;)");

                      break;

               case '(':printf("(27,()");

                      break;

               case ')':printf("(28,))");

                      break;

               case '#':printf("(0,#)");

                      break;

        }

               i++;

    }while(x[i]!='');

    }

    把几个关键字用几个字符数组把存储起来,接着让用户输入一段字符串存储在数组x里面,用一个do{}while循环对数组x的每个元素进行判断,如果是字母的话,就将该元素暂时存储在y数组里面,全部读完再对y数组进行判断,看时不时与所定义的字符数组相同,接下来的switch语句是对用户输入的其它字符进行判断,并以二元组的形式进行输出。

    1. 2.      运行结果及分析

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

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

    一、        实验总结

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

    从第一次接触编译原理的上机课的时候,就发现这门课程并不是那么地好学,尤其是让我们做这么一个以前在c语言上都还没讲过的例子,感觉词法分析有思路,但是却难以用c的语言完美地表达出来,因此这次试验我认为还是需要再进一步改进,而且关于字符串的理解还尚浅,对于字符串的处理和理解还是有难度,因为字符与数字不同,连回车和空格都是字符串,我无法确定我所输入的字符串究竟是不是我所想要的,这个步骤就难倒了我。

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

  • 相关阅读:
    数据结构基础(21) --DFS与BFS
    数据结构基础(20) --图的存储结构
    数据结构基础(19) --堆与堆排序
    数据结构基础(18) --哈希表的设计与实现
    数据结构基础(17) --二叉查找树的设计与实现
    数据结构基础(16) --树与二叉树
    数据结构基础(15) --基数排序
    数据结构基础(14) --链式队列的设计与实现
    在centOS6.5 上安装使用pipework
    数据结构基础(13) --链式栈的设计与实现
  • 原文地址:https://www.cnblogs.com/cairuiqi/p/6008183.html
Copyright © 2011-2022 走看看