首页 > 代码库 > 实验一:词法分析

实验一:词法分析

实验一、词法分析实验

专业:计算机科学与技术   姓名:罗德广  学号:201506110204

一、实验目的

  用C语言实现简单的词法分析程序;设计一个词法分析程序,加深对词法分析原理的理解 。

二、实验内容和要求

    编写一个词法分析程序,使其能够识别对应的单词符号,并以(单词符号       种别码)的形式输出。

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

 

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

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

2.原理分析及流程图

 

 技术分享

 

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

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

#include <stdio.h>#include <string.h>char a[80],s[8],ch;int q,p,m,n,sum;char *l[6]={"begin","if","then","while","do","end"};//定义数组l,用于存放关键字void scaner(void);main(){    p=0;    printf("\n请输入一个字符串(以‘#‘结尾):\n");    do{            scanf("%c",&ch);            a[p++]=ch;    }while(ch!=#);    p=0;    do{            scaner();            switch(q)            {                case 11:                    printf("( %-10d%5d )\n",sum,q);                break;                 case -1:                    printf("输入错误!\n");                    //getch();                    return 0;                break;                default:                printf("( %-10s%5d )\n",s,q);                break;            }        }while(q!=0);    //getch(); }void scaner(void)//利用循环进行字符串的识别和比较{    sum=0;    for(m=0;m<8;m++)        s[m++]= NULL;        ch=a[p++];        m=0;    while((ch== )||(ch==\n))        ch=a[p++];    if(((ch<=z)&&(ch>=a))||((ch<=Z)&&(ch>=A)))     {        while(((ch<=z)&&(ch>=a))||((ch<=Z)&&(ch>=A))||((ch>=0)&&(ch<=9)))        {            s[m++]=ch;            ch=a[p++];        }        p--;        q=10;        for(n=0;n<6;n++)        if(strcmp(s,l[n])==0)        {            q=n+1;            break;        }     }     else if((ch>=0)&&(ch<=9))     {        while((ch>=0)&&(ch<=9))        {            sum=sum*10+ch-0;            ch=a[p++];        }        p--;        q=11;    }    else    {        switch(ch)        {        case <:            s[m++]=ch;            ch=a[p++];            if(ch===)            {                q=22;                s[m++]=ch;            }            else            {                q=20;                p--;            }        break;         case >:            s[m++]=ch;            ch=a[p++];            if(ch===)            {                q=24;                s[m++]=ch;            }            else            {                q=23;                p--;            }        break;        case +:            s[m++]=ch;            ch=a[p++];            if(ch==+)            {                q=17;                s[m++]=ch;            }            else            {                q=13;                p--;            }        break;         case -:            s[m++]=ch;            ch=a[p++];            if(ch==-)            {                q=29;                s[m++]=ch;            }            else            {                q=14;                p--;            }        break;         case !:            ch=a[p++];            if(ch===)            {                q=21;                s[m++]=ch;            }            else            {                q=31;                p--;            }        break;        case =:            s[m++]=ch;            ch=a[p++];            if(ch===)            {                q=25;                s[m++]=ch;            }            else            {                q=18;                p--;            }        break;         case *:            q=15;            s[m++]=ch;        break;        case /:            q=16;            s[m++]=ch;        break;        case (:            q=27;            s[m++]=ch;        break;        case ):            q=28;            s[m++]=ch;        break;        case {:            q=5;            s[m++]=ch;        break;        case }:            q=6;            s[m++]=ch;        break;        case ;:            q=26;            s[m++]=ch;        break;        case \":            q=30;            s[m++]=ch;        break;        case #:            q=0;            s[m++]=ch;        break;        case ::            q=17;            s[m++]=ch;        break;        default:            q=-1;        break;        }    }        s[m++]=\0;}

 

 

4.运行结果及分析

  技术分享

四、实验总结

数组a存放键盘输入的字符,数组l存放关键字。通过判断空格键来用数组s存放前面的字符,若前面的字符既出现字母又出现数字,则是标识符。反之就是关键字。然后通过数组s的字符串与前面定义l数组的字符串一一比较,输出所对应的种别码。

实验一:词法分析