词法分析实验报告

实验一:词法分析

专业:商业软件工程   姓名:陈锐  学号:201506110103

一、        实验目的

      编制一个词法分析程序。

二、        实验内容和要求

1.输入:源程序字符串

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

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

4.对字符串表示的源程序从左到右进行扫描和分解

5.根据词法规则识别出一个一个具有独立意义的单词符号以供词法分析之用

6.发现词法错误,则返回出错信息

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

1.      源程序名:cifafenxi.c

可执行程序名:cifafenxi.exe

2.      原理分析及流程图

主要就是利用for循环联合if语句判断来输出二元组

流程图:

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

#include<stdio.h>

#include<stdlib.h>

void main()

{

int i;

    char a[100];

    printf("请输入字符串:");

    scanf("%s",&a);

    for(i=0;i<100;i++)

    {

      if(a[i]=='b'&&a[i+1]=='e'&&a[i+2]=='g'&&a[i+3]=='i'&&a[i+4]=='n')

             printf("<1\tbegin>\n");

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

             printf("<2\tif>\n");

      else if(a[i]=='t'&&a[i+1]=='h'&&a[i+2]=='e'&&a[i+3]=='n')

             printf("<3\tthen>\n");

      else if(a[i]=='w'&&a[i+1]=='h'&&a[i+2]=='i'&&a[i+3]=='l'&&a[i+4]=='e')

             printf("<4\twhile>\n");

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

             printf("<5\tdo>\n");

      else if(a[i]=='e'&&a[i+1]=='n'&&a[i+2]=='d')

             printf("<6\tend>\n");

              else if(a[i]=='|'&&a[i+1]=='('&&a[i+2]=='l'&&a[i+3]=='|'&&a[i+3]=='d'&&a[i+3]=='*')

          printf("<10\tl(l|d)*>\n");

      else if(a[i]=='d'&&a[i+1]=='d'&&a[i+2]=='*')

             printf("<11\tdd*>\n");

      else if(a[i]=='-')

             printf("<14\t->\n");

      else if(a[i]=='*')

             printf("<15\t*>\n");

      else if(a[i]=='/')

             printf("<16\t/>\n");

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

             printf("<17\t:>\n");

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

             printf("<18\t:=>\n");

      else if(a[i]=='<'&&a[i+1]!='='&&a[i+1]!='>')

             printf("<20\t<>\n");

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

             printf("<21\t<=>\n");

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

             printf("<22\t<>>\n");

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

             printf("<23\t>>\n");

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

             printf("<24\t>=>\n");

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

             printf("<25\t=>\n");

      else if(a[i]==';')

             printf("<26\t;>\n");

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

             printf("<27\t(>\n");

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

             printf("<28\t)>\n");

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

             printf("<0\t#>\n");

    }}

程序比较简单,基本上没有什么难点,就是把输入的字符串存放到字符数组里面,然后用for循环结合if-else语句使用。

4.      运行结果及分析

 

四、        实验总结

1.程序做的比较简单,毕竟基础比较差,所以也就没什么大的问题。

2.略微了解了一点词法

原文地址:https://www.cnblogs.com/18128319239F/p/5962133.html