博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
实验一
阅读量:4708 次
发布时间:2019-06-10

本文共 2340 字,大约阅读时间需要 7 分钟。

实验一、词法分析

专业  商业软件工程 姓名 彭佛生  学号 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("\n 请输入字符串,以''# ''结束:");

 do{

    scanf("%c",&ch);

    prog[p++]=ch;

    }while(ch!='#');

 p=0;

 do{

    scaner();

    switch(syn)

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

          break;

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

          getch();

          exit(0);

      default: printf("< %-10s%5d >\n",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=='\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;

       }

      }

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

    }

运行截图:

 

 无

 

 

 

四、        实验总结

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

转载于:https://www.cnblogs.com/verson/p/5984683.html

你可能感兴趣的文章
linux —— 搭建网页项目笔记
查看>>
安装Autodesk Revit2015出现操作系统不受支持解决办法
查看>>
jQuery中的end()
查看>>
poj 3349:Snowflake Snow Snowflakes(哈希查找,求和取余法+拉链法)
查看>>
CSS布局解决方案(终结版)
查看>>
string.h文件中函数用法
查看>>
从0开始 图论学习 广度优先搜索 链式前向星表示法
查看>>
Windows系统上安装多个版本jdk,修改环境变量不生效
查看>>
210. Course Schedule II (易理解拓扑排序算法)
查看>>
POJ 1064 Cable master
查看>>
php_openssl.dll' - 找不到指定的模块。 in Unknown on line 0
查看>>
JavaScript:日期选择器组件的使用
查看>>
HTML 图像<img>
查看>>
用一层for循环初始化三维数组
查看>>
百度面试题:找出给定字符串对应的序号
查看>>
Sqoop数据迁移工具
查看>>
Android进阶篇-访问Https链接
查看>>
vi/vim编辑器
查看>>
黑马程序员——创建线程的两种方式
查看>>
Webservice之axis
查看>>