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

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

实验一、词法分析实验

专业:商业软件工程   姓名:林海鑫  学号: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.运行结果及分析

 

 

四、        实验总结

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

 

转载于:https://www.cnblogs.com/AAAAAAAA/p/5961439.html

你可能感兴趣的文章
查看手机已经记住的WIFI密码
查看>>
最新版IntelliJ IDEA2019 破解教程(2019.08.07-情人节更新)
查看>>
C# 两个datatable中的数据快速比较返回交集或差集
查看>>
关于oracle样例数据库emp、dept、salgrade的mysql脚本复杂查询分析
查看>>
adb shell am 的用法
查看>>
iOS10 UI教程视图和子视图的可见性
查看>>
FindChildControl与FindComponent
查看>>
中国城市json
查看>>
android下载手动下载Android SDK
查看>>
C++学习:任意合法状态下汉诺塔的移动(原创)
查看>>
leetcode133 - Clone Graph - medium
查看>>
UNET学习笔记2 - 高级API(HLAPI)
查看>>
"ORA-00942: 表或视图不存在 "的原因和解决方法[转]
查看>>
Oauth支持的5类 grant_type 及说明
查看>>
C#中用DateTime的ParseExact方法解析日期时间(excel中使用系统默认的日期格式)
查看>>
W3100SM-S 短信猫代码发送 上
查看>>
netty接收大文件的方法
查看>>
软件工程设计之四则运算
查看>>
SpringMVC @ResponseBody 406
查看>>
Partial Tree UVALive - 7190(完全背包)
查看>>