词法语法分析

时间:2021-08-09 06:31:39

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

专业:商业软件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("请输入一个字符串:\n");

    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]!='\0');

}

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

  1. 2.      运行结果及分析

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

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

词法语法分析

 

 

 

 

 

一、        实验总结

 

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

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