zoukankan      html  css  js  c++  java
  • 实验一词法分析试验报告

    实验一、词法分析实验

    专业:商业软件工程   姓名:林海鑫  学号:201506110120

    一、        实验目的

    (1)掌握词法分析程序的实现方法。

    (2)用C语言对一个简单语言的子集编制一个一遍扫锚的编译理解,掌握编译程序的实现方法和技术。

    (3)理解词法分析在编译程序中的作用。

    (4)加深对有穷自动机模型的理解。

    二、        实验内容和要求

    1,词法分析程序的功能(输入,输出)

    2,待分析的简单语言的词法。

    3,各种单词符号对应的种别码。

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

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

    可执行程序名:cifa.exe

    2.原理分析及流程图

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

    #include <stdio.h>

    #include <string.h>

    #include <stdlib.h>

    char prog[80],token[8],ch;

    int syn,p,m,n,sum;

    char *rwtab[6]={"begin","if","then","while","do","end"};

     scaner();

    main()

    {p=0;

     printf("\n please input a string(end with '#'):/n");

     do{

        scanf("%c",&ch);

        prog[p++]=ch;

        }while(ch!='#');

     p=0;

     do{

        scaner();

        switch(syn)

         {case11:printf("( %-10d%5d )\n",sum,syn);

              break;

          case -1:printf("you have input a wrong string\n");

              getchar();

              exit(0);

          default: printf("( %-10s%5d )\n",token,syn);

              break;

          }

        }while(syn!=0);

        getchar();

     }

     

     scaner()

     {  sum=0;

        for(m=0;m<8;m++)token[m++]=NULL;

        ch=prog[p++];

        m=0;

        while((ch=='')||(ch=='\n'))ch=prog[p++];

        if(((ch<='z')&&(ch>='a'))||((ch<='Z')&&(ch>='A')))

          { while(((ch<='z')&&(ch>='a'))||((ch<='Z')&&(ch>='A'))||((ch>='0')&&(ch<='9')))

          {token[m++]=ch;

           ch=prog[p++];

          }

          p--;

          syn=10;

          for(n=0;n<6;n++)

        if(strcmp(token,rwtab[n])==0)

           { syn=n+1;

             break;

           }

          }

        elseif((ch>='0')&&(ch<='9'))

          { while((ch>='0')&&(ch<='9'))

        { sum=sum*10+ch-'0';

          ch=prog[p++];

        }

        p--;

        syn=11;

          }

        elseswitch(ch)

        { case'<':token[m++]=ch;

              ch=prog[p++];

               if(ch=='=')

                {  syn=22;

                   token[m++]=ch;

                }

              else

                {  syn=20;

                   p--;

                }

              break;

         case'>':token[m++]=ch;

              ch=prog[p++];

              if(ch=='=')

                { syn=24;

                  token[m++]=ch;

                }

              else

                { syn=23;

                  p--;

                }

              break;

         case'+': token[m++]=ch;

              ch=prog[p++];

              if(ch=='+')

                { syn=17;

                  token[m++]=ch;

                }

              else

                { syn=13;

                  p--;

                }

              break;

     

         case'-':token[m++]=ch;

              ch=prog[p++];

              if(ch=='-')

                { syn=29;

                  token[m++]=ch;

                }

              else

                { syn=14;

                  p--;

                }

              break;

     

         case'!':ch=prog[p++];

              if(ch=='=')

               { syn=21;

                 token[m++]=ch;

               }

              else

              { syn=31;

                 p--;

              }

              break;

     

         case'=':token[m++]=ch;

              ch=prog[p++];

              if(ch=='=')

                { syn=25;

                  token[m++]=ch;

                }

              else

                { syn=18;

                  p--;

                }

              break;

         case'*': syn=15;

               token[m++]=ch;

               break;

         case'/': syn=16;

               token[m++]=ch;

               break;

         case'(': syn=27;

               token[m++]=ch;

               break;

         case')': syn=28;

               token[m++]=ch;

               break;

         case'{': syn=5;

               token[m++]=ch;

               break;

         case'}': syn=6;

               token[m++]=ch;

               break;

         case';': syn=26;

              token[m++]=ch;

              break;

         case'\"': syn=30;

               token[m++]=ch;

               break;

         case'#': syn=0;

               token[m++]=ch;

               break;

         case':':syn=17;

               token[m++]=ch;

               break;

        default: syn=-1;

             break;

           }

        token[m++]='\0';

        }

    4.运行结果及分析

    四、        实验总结

    这次实验结果非常不容易。标识符和关键字的输入输出的识别分析是难题。后面还有许多小错误,导致程序不能运行。多亏同学的帮助,以及李彦宏的帮助。路漫漫而其修远兮,吾将上下而求索。

  • 相关阅读:
    dp uva1025
    dp uva10003
    dp最优矩阵相乘poj1651
    dp uva11584
    动态规划uva11400
    流形学习 (Manifold Learning)
    tf.nn.embedding_lookup
    word2vec
    word2vec 细节解析1
    collections-Counter
  • 原文地址:https://www.cnblogs.com/AAAAAAAA/p/5961439.html
Copyright © 2011-2022 走看看