词法分析— 实验报告

实验一.词法分析

. 实验目的

(1)  编译一个词法分析程序

(2)  主要是从键盘输入一串字符,然后从左到右依次对字符进行识别,分成一个个独立的单词序列,并且进行词法分析。

.实验内容

(1)  输入:源程序字符串

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

.实验要求

1.对字符串表示的源程序 

2.从左到右进行扫描和分解

3.根据词法规则

4.识别出一个一个具有独立意义的单词符号

5.以供语法分析之用

 

.实验方法,步骤及测试结果

(1)流程图:

                            

                                    

 

(2)主要代码:

for(i=0;i<n;i++)
    {
        j=(int)n[i];
        n1[i]=n[M];
        if((j>=65)&&(j<=90)||(j>=90)&&(j<=122))
        {
            n1[i1]=n[i];
            i1++;
        }
        else{
             while(i1!=0)
            {
               n1[i1]='';
               if(  strcmp(n1,"auto")==0||strcmp(n1,"int")==0||strcmp(n1,"double")==0||strcmp(n1,"long")==0
                  ||strcmp(n1,"char")==0||strcmp(n1,"float")==0||strcmp(n1,"short")==0||strcmp(n1,"signed")==0
                  ||strcmp(n1,"unsigned")==0||strcmp(n1,"struct")==0||strcmp(n1,"union")==0||strcmp(n1,"enum")==0
                  ||strcmp(n1,"static")==0||strcmp(n1,"switch")==0||strcmp(n1,"case")==0||strcmp(n1,"default")==0
                  ||strcmp(n1,"break")==0||strcmp(n1,"register")==0||strcmp(n1,"const")==0||strcmp(n1,"volatile")==0
                  ||strcmp(n1,"typedef")==0||strcmp(n1,"extern")==0||strcmp(n1,"return")==0||strcmp(n1,"void")==0
                  ||strcmp(n1,"continue")==0||strcmp(n1,"do")==0||strcmp(n1,"while ")==0||strcmp(n1,"if")==0
                  ||strcmp(n1,"else")==0||strcmp(n1,"for")==0||strcmp(n1,"goto")==0||strcmp(n1,"sizeof")==0)
             {
               n1[i1]=')';
               printf("(1,");
               puts(n1);
               i1=0;
               memset(n1,0,100);
             }

(3)测试结果

 五.实验心得

  这是我第一次接触关于编译原理的大实验,在这次实验里面,有很大的问题一直很困扰。
(1)首先是词法分析的算法思想,不明白它的中心思想就无法下手,课本也没有太多关于这方面的知识,所以我只有向同学和网上寻找,在查找过程中也能大概了解了。
(2)在定义的数组方面,一些代码很容易被混乱了,因为需要运行的变量比较多,所以经常有很多的错误提示。

 心得:虽然这次的实验总体来说不算良好,但是在老师,同学的帮助下还是能把它完成了,也让我明白了自己的问题所在,对于这门课程,需要花费更多的时间和精力才能更好的去理解它。当          然,程序中还是存在着很多的问题,希望各位能够积极指出,谢谢。

 

原文地址:https://www.cnblogs.com/wenjian1027/p/6002260.html