zoukankan      html  css  js  c++  java
  • 实验一、词法分析实验

    实验一、词法分析实验

    专业::商业软件工程1班  姓名:许演杰  学号:201506110096

    一、        实验目的

    编制一个词法分析程序

    二、        实验内容和要求

    —输入:源程序字符串

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

    —待分析语言的词法规则

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

     1.      源程序名:压缩包文件(rarzip)中源程序名词法分析.c

    可执行程序名:词法分析.exe

    2.      原理分析及流程图

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

    #include<stdio.h>
    #include<string.h>
    #include<iostream.h>
    char prog[80],token[8];
    char ch;
    int syn,p,m=0,n,row,sum=0;
    char *rwtab[6]={"begin","if","then","while","do","end"};
    void scaner()
    {
    for(n=0;n<8;n++)
    token[n]=NULL;
    ch=prog[p++];
    while(ch==' ')
    {
    ch=prog[p];
    p++;
    }
    if((ch>='a'&&ch<='z')||(ch>='A'&&ch<='Z'))
    {
    m=0;
    while((ch>='0'&&ch<='9')||(ch>='a'&&ch<='z')||(ch>='A'&&ch<='Z'))
    {
    token[m++]=ch;
    ch=prog[p++];
    }
    token[m++]='\0';
    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'))
    {
    {
    sum=0;
    while((ch>='0'&&ch<='9'))
    {
    sum=sum*10+ch-'0';
    ch=prog[p++];
    }
    }
    p--;
    syn=11;
    if(sum>32767)
    syn=-1;
    }
    else switch(ch)
    
    {
    case'<':m=0;token[m++]=ch;
    ch=prog[p++];
    if(ch=='>')
    {
    syn=21;
    token[m++]=ch;
    }
    else if(ch=='=')
    {
    syn=22;
    token[m++]=ch;
    }
    else
    {
    syn=23;
    p--;
    }
    break;
    case'>':m=0;token[m++]=ch;
    ch=prog[p++];
    if(ch=='=')
    {
    syn=24;
    token[m++]=ch;
    }
    else
    {
    syn=20;
    p--;
    }
    break;
    case':':m=0;token[m++]=ch;
    ch=prog[p++];
    if(ch=='=')
    {
    syn=18;
    token[m++]=ch;
    }
    else
    {
    syn=17;
    p--;
    }
    break;
    case'*':syn=13;token[0]=ch;break;
    case'/':m=0;m=0;token[m++]=ch;
    if(ch=='*')
    {
    syn=14;token[0]=ch;}
    if(ch=='/')
    {
    token[m++]=ch;
    ch=prog[p++];
    }
    break;
    case'+':syn=15;token[0]=ch;break;
    case'-':syn=16;token[0]=ch;break;
    case'=':syn=25;token[0]=ch;break;
    case';':syn=26;token[0]=ch;break;
    case'(':syn=27;token[0]=ch;break;
    case')':syn=28;token[0]=ch;break;
    case'#':syn=0;token[0]=ch;break;
    case'\n':syn=-2;break;
    default:syn=-1;break;
    }
    }
    int main()
    {
    p=0;
    row=1;
    cout<<"Please input string:"<<endl;
    do
    {
    cin.get(ch);
    prog[p++]=ch;
    }
    while(ch!='#');
    p=0;
    do
    {
    scaner();
    switch(syn)
    {
    case 11: cout<<"("<<syn<<","<<sum<<")"<<endl; break;
    case -1: cout<<"Error in row"<<row<<"!"<<endl; break;
    case -2: row=row++;break;
    default: cout<<"("<<syn<<","<<token<<")"<<endl;break;
    }
    }
    while(syn!=0);
    }

    4.  运行结果及分析

    、  实验总结

    一开始是卡在了标识符和关键字的输入输出的识别分析,然后其实关键字可以当作数组,标识符当作是一个字符串,问题就很好解决了,if语句和switch语句的灵活运用也非常重要。总之,我觉的遇到不懂的不会的,首先不要放弃,要懂得寻找问题所在,找到解决方法,这个是最重要的,这次试验完成也让我有了自信。

  • 相关阅读:
    Network Simulator for P4(NSP4) src内容介绍
    解决 E: Unable to correct problems, you have held broken packages. 问题
    【旧版本】Ubuntu 14.04 下 P416编译器 p4c的安装
    Ubuntu 14.04 更新gcc版本至4.9.2
    Ubuntu 14.04 下 安装Protocol Buffers
    Ubuntu 14.04 删除软件附加依赖
    解决Floodlight界面无法显示问题
    OpenVirteX 创建简易虚拟网络
    2017年P4中国峰会北京站 会议小结
    406. Queue Reconstruction by Height
  • 原文地址:https://www.cnblogs.com/a305810827/p/5961354.html
Copyright © 2011-2022 走看看