zoukankan      html  css  js  c++  java
  • 实验一

    实验一、词法分析

    专业  商业软件工程 姓名 彭佛生  学号 201504040154

    一、        实验目的

     

    •      编制一个词法分析程序

    二、        实验内容和要求

    –        输入:源程序字符串

    –     输出:二元组(种别,单词本身)

    –     待分析语言的词法规则

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

     

    #include <stdio.h>

    #include <string.h>

    #include<conio.h>

    #include <process.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(" 请输入字符串,以''# ''结束:");

     do{

        scanf("%c",&ch);

        prog[p++]=ch;

        }while(ch!='#');

     p=0;

     do{

        scaner();

        switch(syn)

         {case 11:printf("( %-10d%5d ) ",sum,syn);

              break;

          case -1:printf("字符串输入错误!") ;

              getch();

              exit(0);

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

              break;

          }

        }while(syn!=0);

        getch();

     }

     scaner()

     {  sum=0;

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

        ch=prog[p++];

        m=0;

        while((ch==' ')||(ch==' '))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;

           }

          }

        else if((ch>='0')&&(ch<='9'))

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

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

          ch=prog[p++];

        }

        p--;

        syn=11;

          }

        else switch(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++]='';

        }

    运行截图:

     无

     

     

     

    四、        实验总结

         本次实验刚开始不是很理解,也不知道怎么做。后来询问了同学后理解了一点点,可是对打出完整代码还是存在很多困难,于是参考了同学的部门核心代码,并在他的帮助下完成了这个实验以及彻底地理解

  • 相关阅读:
    14.3
    14.2
    14.1
    第14章 抽象类和接口
    13.5
    JAVA异常处理
    12.9
    12.7
    vs 常用快捷键
    click()和onclick()的区别
  • 原文地址:https://www.cnblogs.com/verson/p/5984683.html
Copyright © 2011-2022 走看看