词法分析程序实验报告

author author     2022-08-08     114

关键词:

实验一、词法分析实验

专业:商业软件工程   姓名王芷玲  学号201606110246

一、 实验目的

 

     编制一个词法分析程序。

 

二、 实验内容和要求

     对字符串表示的源程序,从左到右进行扫描和分解,根据词法规则,识别出一个一个具有独立意义的单词符号,以供语法分析之用 发现词法错误,则返回出错信息。。

 

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

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

可执行程序名:ceshi.exe

 

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

实现主要功能的程序段,重要的是程序的注释解释。

#include<stdio.h>

#include<string.h>

char str[100];

char take[8];//存放单词符号的字符串

int sum;//存放整数型单词

char ch;

int zbm;//存放单词字符的种别码

int i,n,p,m=0;//p是缓冲区str的指针,mtake的指针

char *keyword[8]={"begin","if","then","while","do","end","l(l|d)*","dd*"};

void scanner()//词法扫描程序

{

 

   /* for(i=0;i<8;i++)

    {

        take[i]=NULL;

    }

    ch=str[p++];*/

    m=0;

    sum=0;

    for(m=0;m<8;m++)

        take[m]=0;

    ch=str[p++];

 

    while(ch==‘ ‘||ch==‘\n‘)

    {

        ch=str[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‘))

        {

            take[m++]=ch;

            ch=str[p++];

        }

        take[m++]=‘\0‘;

        p--;

        zbm=10;

        for(i=0;i<6;i++)//将识别出的字符和已定义的标符进行比较

            if(strcmp(keyword[i],take==0))

        {

            zbm=i+1;

            break;

        }

    }

    else if(ch>=‘0‘&&ch<=‘9‘)

    {

        while(ch>=‘0‘&&ch<=‘9‘)

        {

            sum=sum*10+ch-‘0‘;

            ch=str[p++];

        }

        p--;

        zbm=11;

    }

    else

    {

        switch(ch)

        {

            case ‘+‘:

                zbm=13;

                take[0]=ch;

                ch=str[p++];

                break;

            case ‘-‘:

                zbm=14;

                take[0]=ch;

                ch=str[p++];

                break;

            case ‘*‘:

                zbm=15;

                take[0]=ch;

                ch=str[p++];

                break;

            case ‘/‘:

                zbm=16;

                take[0]=ch;

                ch=str[p++];

                break;

 

 

            case ‘<‘:

 

                take[m++]=ch;

                ch=str[p++];

                if(ch==‘>‘)

                {

                    zbm=21;

                    take[m++]=ch;

                }

                else if(ch==‘=‘)

                {

                    zbm=22;

                take[m]=ch;

                }

                else{

                    zbm=20;

                    p--;

                }

 

                break;

            case ‘>‘:

                take[0]=ch;

                ch=str[p++];

                if(ch==‘=‘)

                {

                    zbm=24;

                take[0]=ch;

                }

                else{

                    zbm=23;

                    p--;

                }

                break;

            case ‘:‘:

                take[0]=ch;

                ch=str[p++];

                if(ch==‘=‘)

                {

                    zbm=18;

                take[m++]=ch;

                ch=str[p++];

                }

                else{

                    zbm=17;

                    p--;

                }

                break;

 

            case ‘=‘:

                zbm=25;

                take[0]=ch;

                ch=str[p++];

                break;

            case ‘;‘:

                zbm=26;

                take[0]=ch;

                ch=str[p++];

                break;

            case ‘(‘:

                zbm=27;

                take[0]=ch;

                ch=str[p++];

                break;

            case ‘)‘:

                zbm=28;

                take[0]=ch;

                ch=str[p++];

                break;

            case ‘#‘:

                zbm=0;

                take[0]=ch;

                ch=str[p++];

                break;

            default:

                zbm=-1;

 

        }

    }

}

main()

{

 

    int n,i;

    printf("----------------------------------------\n");

    printf("\t编制一个词法分析程序\n\n");

    printf("\t要求:\n");

    printf("\t输入:源程序字符串\n");

    printf("\t输出:二元组(种别,单词本身)\n");

    printf("----------------------------------------\n\n");

 

 

    printf("请输入您要输入的字符:\n");

    do//输入一段字符串

    {

        ch=getchar();

        str[p++]=ch;

    }while(ch!=‘#‘);

 

    p=0;

    ch=str[0];

    if(ch>=‘0‘&&ch<=‘9‘)

        printf("错误!\n");

    else

    {

        do

        {

            scanner();

            switch(zbm)

            {

            case 11:

                printf("(%d,%d)\n",11,sum);

                break;

            case -1:

                printf("错误!\n");

                break;

            default:

                printf("(%d,%s)\n",zbm,take);

            }

        }while(zbm!=0);

    }

    return 0;

}

 

运行结果及分析

技术分享

 

词法分析程序实验报告

实验一、词法分析实验专业:商业软件工程  姓名王芷玲 学号201606110246一、 实验目的      编制一个词法分析程序。 二、 实验内容和要求     对字符串表示的源程序... 查看详情

词法分析程序实验报告

实验一词法分析实验商业软件工程2班 黄铭坤 201506110147一、        实验目的      编制一个词法分析程序。二、        实验内容和 查看详情

词法分析实验报告

实验一、词法分析实验专业:商业软件工程 姓名:程嘉明 学号:201506110185一、 实验目的通过编写并上机调试一个词法分析程序,掌握在对程序设计语言的源程序进行扫描的过程中,将其分解后各类单词的词法分析方... 查看详情

词法分析实验报告

实验一、词法分析实验商务软件工程三班  吴文成 201506110217一、       实验目的调试词法分析程序,实现从源程序中分出各种单词的方法;加深对课堂教学的理解;提高词法分析方法的实践能... 查看详情

词法分析实验报告

实验一、词法分析程序实验专业:商业软件  姓名:杨链新 学号:201506110113一、       实验目的 通过设计调试词法分析程序,实现从源程序中分出各种单词的方法;加深对课堂教学的理解... 查看详情

实验报告一词法分析程序

实验一、词法分析程序实验专业:商业软件工程  姓名:卓润峰 学号:201506110202一、       实验目的编制一个词法分析程序。二、       实验内容和要求1.输入:源程... 查看详情

实验报告一--词法分析程序

实验一、词法分析程序实验专业计算机科学与技术  姓名刘东 学号201506110164一、       实验目的编制一个词法分析程序二、       实验内容和要求输入:源程序字符串... 查看详情

实验报告一词法分析程序

实验一、词法分析程序实验专业计算机科学与技术  姓名谢建航 学号201506110209一、       实验目的 1.编制一个词法分析程序。 二、       实验内容和要求输入... 查看详情

实验报告-词法分析

---恢复内容开始---实验一、词法分析实验专业:商软二班  姓名:黄思慧 学号:201506110189一、       实验目的通过设计编制调试一个具体的词法分析程序,加深对词法分析原理的理解。并掌握... 查看详情

词法分析-实验报告

...    实验目的通过设计编制调试一个具体的词法分析程序,加深对词法分析原理的理解。并掌握在对程序设计语言源程序进行扫描过程中将其分解为各类单词的词法分析方法。二、      实验内... 查看详情

实验报告一:词法分析

实验一、词法分析实验专业:商业软件工程  姓名:覃伟业 学号;201506110233一、 实验目的编写一个关于词法分析的程序,   二、 实验内容和要求要求:-输入:源程序字符串-输出:二元组(种别,... 查看详情

词法分析实验报告1

实验一、词法分析实验商软二班张智恒201506110172一、       实验目的     编制一个词法分析程序 二、       实验内容和要求编写一个词法分析程序,使其能... 查看详情

词法分析实验报告

实验一、词法分析实验商业软件工程 符致伟 201506110157一、       实验目的 编制一个词法分析程序二、       实验内容和要求 输入:源程序字符串 输出:二元... 查看详情

词法分析器实验报告

一、       实验目的编制一个词法分析器,通过该词法分析程序的设计实例,进一步了解词法分析程序构造的一些细节。  二、       实验内容和要求实验内容:对字符串... 查看详情

词法分析实验报告

实验一、词法分析实验专业商业软件3班 姓名林鑫杰学号201506110211一、       实验目的 编制一个词法分析程序。 二、       实验内容和要求输入:源程序字符串输出... 查看详情

201506110135陈若倩词法分析实验报告

实验一、词法分析实验商业软件工程专业   陈若倩  201506110135一、 实验目的通过设计一个词法分析程序,对词法进行分析,加强对词法的理解,掌握对程序设计语言的分解和理解。二、 实验内容和要求... 查看详情

词法分析实验报告

实验一、词法分析实验1502商业软件工程专业黄浩峰 姓名 201506110142学号一、 实验目的      通过实验了解词法分析器的词法分析过程。 二、 实验内容和要求设计一个词法分析程序,对关... 查看详情

实验一词法分析实验报告

实验一、词法分析实验专业:商业软件工程2班 姓名别博文 学号201606110175一、 实验目的      编制一个词法分析程序。 二、 实验内容和要求     对字符串表示的源程序... 查看详情