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

    实验一、词法分析

    专业  商业软件工程 姓名 刘宇  学号 201504040153

    一、        实验目的

     

    •      编制一个词法分析程序

    二、        实验内容和要求

    –        输入:源程序字符串

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

    –     待分析语言的词法规则

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

     

    #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++]='';

        }

    运行截图:

     

     

     

     

    四、        实验总结

    对词法分析语法如何转换成代码还不太熟练,问了同学还翻了书,最后写出了程序

     

     

     

     

     

     

     

     

  • 相关阅读:
    怎么能忘了N皇后(N Queens)?
    中序线索二叉树及相关算法概述(java实现)
    树遍历算法概述
    广义表与字符串
    KMP算法简述
    Linux常用系统符号总结
    linux 父、子shell变量传递问题
    数据结构总结之一栈与队列
    n!素因子p的幂 swjtuOJ 2090【数论】
    N!分解素因子及若干问题【转载】
  • 原文地址:https://www.cnblogs.com/yh5788lz/p/5960447.html
Copyright © 2011-2022 走看看