实验一  词法分析程序045

实验一  词法分析程序实验

专业 计算机科学与技术   姓名 邹汉辉  学号 201508030045

一、实验目的

1. 编制一个词法分析程序

二、 实验内容和要求

1. 输入:源程序字符串

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

3. 待分析语言的词法规则

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

1.  源程序名:压缩包文件(rarzip)中源程序名 cifafenxi.c

可执行程序名:cifafenxi.exe

2.  原理分析及流程图

 

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

   #include<stdio.h>

#include<string.h>

int ccc(char a[100],int i)

{

    switch(a[i])

    {

        case '+':

            {

                printf("(13+)");

                return(1);    

            }

        

        case '-':

            {

                printf("(14-)");

                return(1);

            }

        case '*':

            {

                printf("(15*)");

                return(1);

            }

        case '/':

            {

                printf("(16/)");

                return(1);

            }

        case ':':

            {

                if(a[i+1]=='=')

                {

                    printf("(18:=)");

                    return(2);

                }

                else

                    printf("(17:)");

                return(1);

 

            }

        case '<':

            {

                if(a[i+1]=='>')

                {

                    printf("(21<>)");

                    return(2);

                }

                else if(a[i+1]=='=')

                {

                    printf("(22<=)");

                    return(2);

                }

                else

                    printf("(20<");

                return(1);

 

            }

        case '>':

            {

                if(a[i+1]=='=')

                {

                    printf("(24>=)");

                    return(2);

                }

                else

                    printf("(23>");

                return(1);

 

            }

        case '=':

            {

                printf("(25=)");

                return(1);

            }

        case ';':

            {

                printf("(26;)");

                return(1);

            }

        case '(':

            {

                printf("(27()");

                return(1);

            }

        case ')':

            {

                printf("(28)");

                return(1);

            }

        default:

            return(0);

            break;

 

    }

}

void number(char a[10])

{

    int i=0;

    char text[10];

    while(a[i]!='\0')

    {

        text[i]=a[i];

        i++;

    }

    text[i]='\0';

    printf("(11,%s)",text);

}

void fing(char a[10])

{

    int i=0;

    char text[10];

    while(a[i]!='\0')

    {

        text[i]=a[i];

        i++;

    }

    text[i]='\0';

 

    if( strcmp(text,"begin")==0)

    {

        printf("(1,begin)");

    }

    else if( strcmp(text,"if")==0)

    {

        printf("(2,if)");

    }

    else if( strcmp(text,"then")==0)

    {

        printf("(3,then)");

    }

    else if( strcmp(text,"while")==0)

    {

        printf("(4,while)");

    }

    else if( strcmp(text,"do")==0)

    {

        printf("(5,do)");

    }

    else if( strcmp(text,"end")==0)

    {

        printf("(6,end)");

    }

    else

    {

        printf("(10,%s)",text);

    }

}

 

main(){

    int i=0,j=-1,l=0,x=0;

    char a[100],text[10];

    printf("输入源程序,#号结束");

    gets(a);

    while(1)

    {

        if(a[i]>='0'&&a[i]<='9')

        {

            while(a[i]>='0'&&a[i]<='9')

                i++;

 

            l=0;

        

            for(++j;j<i;j++)

            {

                text[l]=a[j];

                l++;

            }

    

            text[l]='\0';

 

            number(text);

            i--;

        }

        else if(a[i]>='a'&&a[i]<='z'||a[i]>='A'&&a[i]<='Z')

        {l=0;

        

            for(i;a[i]>='a' && a[i]<='z' ||a[i]>='A'&&a[i]<='Z';i++)

            {

                text[l]=a[i];

                l++;

            }

            i--;

    

            text[l]='\0';

            fing (text);

            

        }

        else

        {

            if(a[i]=='#')

            {

                printf("(0,#)");

                break;

            }

            

            x=ccc(a,i);

            if(x==1)

            {

                j=i;

            }

            else if(x==2)

            {

                i++;

                j=i;

            }

        }

        i++;

        

    }

 

}

4.  运行结果及分析

 

 

实验结果与预期基本相符

四、 实验总结

这次试验对我来说难度很大,查阅了大量的资料和别人的实验报告,才一步步完成,以后的理论课和上机课还要多多努力。

 

posted on 2016-10-14 17:33  paosons  阅读(81)  评论(0编辑  收藏  举报

导航