• 词法分析


    实验一、词法分析实验

    专业::商业软件工程1班  姓名:罗冠达  学号:201506110095

    一、        实验目的

    编制一个词法分析程序

    二、        实验内容和要求

    —输入:源程序字符串

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

    —待分析语言的词法规则

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

     

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

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

    1. 2.      原理分析及流程图

     

     

    1. 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);

    }

     

    四、        实验总结

    通过本次实验,我深刻的学到了很多东西。

    通过本次实验,我对词法分析和语法分析原理有了更深刻的理解,

    而且对词法分析和语法在实践中的应用有了更深的了解

    熟悉了词法分析程序的原理,结合到平时上课学的文法,感觉编译原理真的好难,希望自己能有信心学下去。

  • 相关阅读:
    CrackRTFwp 顺便讲讲如何在pe文件中看资源
    开启驱动生涯
    hgame week2 week3
    hgamefinal re peko-chain!
    docker化hbase并使用外部zookeeper
    docker化canal-adapter
    脚本
    ansible模块-user
    esxi克隆虚拟机
    confluence配置搭建
  • 原文地址:https://www.cnblogs.com/lg916843/p/5961407.html
Copyright © 2020-2023  润新知