实验报告(1)-词法分析

---恢复内容开始---

实验一、词法分析实验

专业:商软二班   姓名:黄思慧  学号:201506110189

一、        实验目的

通过设计编制调试一个具体的词法分析程序,加深对词法分析原理的理解。并掌握在对程序设计语言进行扫描过程中将其分解为各类单词的词法分析方法。

二、        实验内容和要求

内容:

1.选择高级语言(C语言),编制它的词法分析程序。

要求:

  1. 输入:源程序字符串

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

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

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

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

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

主要总体设计问题。

(包括存储结构,主要算法,关键函数的实现等)

  1. 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"};  

void scaner();  

void 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)
            {
                case 11:
                    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();
 }  

void 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;
        }
     }
     else if((ch>=‘0‘)&&(ch<=‘9‘))
     {
        while((ch>=‘0‘)&&(ch<=‘9‘))
        {
            sum=sum*10+ch-‘0‘;
            ch=prog[p++];
        }
        p--;
        syn=11;
    }
    else
    {
        switch(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‘;
} 
  1. 4.      运行结果及分析

一般必须配运行结果截图,结果是否符合预期及其分析。

   (截图需根据实际,截取有代表性的测试例子)

四、        实验总结

心得体会,实验过程的难点问题及其解决的方法。

此次实验对于我来说挺难的,我通过上网摸索以及跟同学讨论渐渐的了解了如何设计、编制并调试词法分析程序,加深对词法分析原理的理解。

---恢复内容结束---

时间: 2024-11-13 06:07:58

实验报告(1)-词法分析的相关文章

实验报告1—’词法分析

实验一.词法分析实验 专业:商业软件工程   姓名:钟菲菲  学号:201506110191 一.        实验目的 编制一个词法分析程序 二.        实验内容和要求 输入:源程序字符串: 输出:二元组(种别,单词符号本身). 三.        实验方法.步骤及结果测试 1.      源程序名:压缩包文件(rar或zip)中源程序名词法分析.c 可执行程序名:词法分析.exe 2.      原理分析及流程图 主要总体设计问题. 3.      主要程序段及其解释: void

实验报告一 词法分析程序

实验一.词法分析程序实验 专业:商业软件工程   姓名:卓润峰  学号:201506110202 一.        实验目的 编制一个词法分析程序. 二.        实验内容和要求 1.输入:源程序字符串. 2.输出:二元组(种别,单词本身) 3.待分析语言的词法规则 主要是从左至右逐个字符地对源程序进行扫描,产生一个个单词序列,用于语法分析 三.        实验方法.步骤及结果测试 1.     源程序名:压缩包文件(rar或zip)中源程序名 cifafenxi.c 可执行程序名:

词法分析实验报告

词法分析实验报告 一.        实验目的 编制一个词法分析器,通过该词法分析程序的设计实例,进一步了解词法分析程序构造的一些细节. 二.        实验内容和要求 实验内容: 对字符串表示的源程序,从左到右进行扫描和分解.根据词法规则,识别出一个一个具有独立意义的单词符号,以供语法分析之用,若发现词法错误,则返回出错信息. 实验要求: 输入:源程序字符串 输出:二元组(种别,单词本身) 待分析语言的词法规则 三. 实验方法.步骤及结果测试 源程序名:压缩包文件(rar或zip)中源程序

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

实验一.词法分析实验 商业软件工程专业   陈若倩  201506110135 一. 实验目的 通过设计一个词法分析程序,对词法进行分析,加强对词法的理解,掌握对程序设计语言的分解和理解. 二. 实验内容和要求 在原程序中输入源代码 对字符串表示的源程序 从左到右进行扫描和分解 根据词法规则 识别出一个一个具有独立意义的单词符号 以供语法分析之用 发现词法错误,则返回出错信息 在源程序中,自动识别单词,把单词分为五种,并输出对应的单词种别码. 识别关键字:main if int for whil

实验报告-词法分析.c

实验一.词法分析程序 商业软件工程   简梓茵  201506110132 一.        实验目的   熟悉词法分析的形式. 二.        实验内容和要求 对输入的每个关键字或者字符进行词法分析,给出该关键字对应的排序序号 三.        实验方法.步骤及结果测试   1.      源程序名:wordanalyse.c 2.      原理分析及流程图 3.      主要程序段及其解释: #include <stdio.h> #include <string.h>

实验一 词法分析实验报告

实验一.词法分析实验 专业:商业软件工程2班  姓名 别博文  学号201606110175 一. 实验目的        编制一个词法分析程序. 二. 实验内容和要求 对字符串表示的源程序,从左到右进行扫描和分解,根据词法规则,识别出一个一个具有独立意义的单词符号,以供语法分析之用 发现词法错误,则返回出错信息.. 三. 实验方法.步骤及结果测试  源程序名:压缩包文件(rar或zip)中源程序名 ceshi.c 可执行程序名:ceshi.exe 主要程序段及其解释: 实现主要功能的程序段,重

实验报告一:词法分析

实验一.词法分析实验 专业:商业软件工程   姓名:覃伟业  学号:201506110233 一. 实验目的 编写一个关于词法分析的程序,     二. 实验内容和要求 要求: -输入:源程序字符串 -输出:二元组(种别,单词符号本身) 三. 实验方法.步骤及结果测试   源程序名:压缩包文件(rar或zip)中源程序名 词法分析.c 可执行程序名:词法分析.exe 原理分析及流程图 #include <stdio.h> 2 #include <string.h> 3 4 char

词法分析实验报告-201506110151-董广枢

实验一.词法分析 专业:商业软件工程二班   姓名 董广枢 学号201506110151 一.        实验目的      编制一个词法分析程序 二.        实验内容和要求 1.输入:源程序字符串 2.输出:二元组(种别,单词本身) 3.待分析语言的词法规则 三.        实验方法.步骤及结果测试 #include <stdio.h> #include <string.h>  char prog[80], token[8],ch; int syn,p,m,n,s

203-陈冠权-词法分析实验报告

实验一.词法分析实验 专业:商业软件工程3班   姓名:陈冠权  学号:201506110203 一.实验目的 通过设计编译程序完成一个词法分析器,加深对词法分析的理解. 二.实验内容和要求 输入一连串的字符,即保留字.标识符.常数.运算符和分隔符,通过词法 分析器来识别具有独立意义的字符,并输出各个字符的内部编码. 三.实验方法.步骤及结果测试 1.   源程序名:词法分析.c 可执行程序名:词法分析.exe 2.      原理分析及流程图 要求在主函数输入字符串,将字符串存入数组里面,调用