词法分析实验报告

author author     2022-08-08     696

关键词:

实验一、词法分析实验

专业:商业软件工程  

姓名:  陈  瑾

学号:201506110101

一、        实验目的

 

     编制一个词法分析程序

 

二、        实验内容和要求

–      输入:源程序字符串

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

–     待分析语言的词法规则

 

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

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

可执行程序名:E:\编程练习、C语言、c_file\Debug\1010.exe

2.      原理分析及流程图

主要总体设计问题。

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

输入:所给文法的源程序字符串。

输出:二元组(syn,token或sum)构成的序列。

其中:syn为单词种别码;token为存放的单词自身字符串;sum为整型常数。

关键字作为特殊标识符处理,把它们预先安排在一张表格中(称为关键字表)。如能查到匹配的单词,则该单词为关键字,否则为一般标识符。

技术分享

首先设置3个变量:①token用来存放构成单词符号的字符串;②sum用来整型单词;③syn用来存放单词符号的种别码。

技术分享

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

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

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

char prog[100],ch,token[8];

int p=0,syn,n,i;

char *keyword[6]={"begin","then","if","while","do","end"};

void scaner();

void main()

{

   p=0;

   printf("please input sentence, end of ‘#‘ !\n");

   do

   {

          ch=getchar();

          prog[p++]=ch;

   }while(ch!=‘#‘);

   p=0;

   do

   {

          scaner();

          switch(syn)

          {

          case -1:printf("词法分析 出错\n");

                 break;

          default :printf("<%d,%s>\n",syn,token);

                 break;

          }

   }while(syn!=0);

   printf("词法分析 成功\n");

   getchar();

}

 

void scaner()

{

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

   {

          token[n]=‘\0‘;

   }

   n=0;

   ch=prog[p++];

   while(ch==‘ ‘)

   {

          ch=prog[p++];

   }

   if((ch>=‘a‘&&ch<=‘z‘)||(ch>=‘A‘&&ch<=‘Z‘))

   {

          do{

                 token[n++]=ch;

                 ch=prog[p++];

          }while((ch>=‘a‘&&ch<=‘z‘)||(ch>=‘a‘&&ch<=‘z‘)||(ch>=‘0‘&&ch<=‘9‘));

          syn=10;

          for(n=0;n<6;n++)

          {

                 if(strcmp(token,keyword[n])==0)

                 {

                        syn=n+1;

                 }

          }

          p--;//return;

   }

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

   {

          p--;

          do

          {

                 token[n++]=prog[p++];

                 ch=prog[p];

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

          syn=11;

          return;

   }

   else

   {

          switch(ch)

          {

          case ‘+‘:syn=13;token[0]=ch;

                 break;

        case ‘-‘:syn=14;token[0]=ch;

                 break;

        case ‘*‘:syn=15;token[0]=ch;

                 break;

        case ‘/‘:syn=16;token[0]=ch;

                 break;

        case ‘:‘:syn=17;token[0]=ch;

        ch=prog[p++];

        if(ch==‘=‘){token[1]=ch;syn++;}

        else p--;

        break;

          case ‘<‘:syn=20;token[0]=ch;

                 ch=prog[p++];

                 if(ch==‘>‘)

                 {

                        token[1]=ch;syn++;

                 }

                 else if(ch==‘=‘){token[1]=ch;syn=syn+2;}

                 else p--;

                 break;

          case ‘>‘:syn=23;token[0]=ch;

                 ch=prog[p++];

                 if(ch==‘=‘)

                 {

                        token[1]=ch;syn++;

                 }

                 else p--;

                 break;

          case ‘=‘:syn=25;token[0]=ch;

                 break;

        case ‘;‘:syn=26;token[0]=ch;

                 break;

        case ‘(‘:syn=27;token[0]=ch;

                 break;

        case ‘)‘:syn=28;token[0]=ch;

                 break;

        case ‘#‘:syn=0;token[0]=ch;

                 break;

          default: printf("词法分析出错! 请检查是否输入非法字符\n");

                 syn=-1;

                 break;

          }

   }

}

4、运行结果及分析

技术分享

四、    实验总结

词法分析,当输入一个字符时,可以根据定义的语法进行分析。但当输入长的程序时候,应当如何获取,然后分割,最后进行分析。试着一个一个字来读取,遇到正常字符开始的就连续读取直到遇到一个分隔符(如空格)。 如果是连续的空格,如果是特殊的字, 如果是以特定字符开头的(如双引号”)类似这样多种情况,如何进行分析。后经过查找资料,询问同学,最终勉强完成作业。虽然不是很好,但过程有了更深的理解了词法分析的过程,以及该算法。

 

实验报告-词法分析

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

词法分析实验报告

 实验一、词法分析实验专业商业软件工程 姓名黄施策 学号201506110228一、       实验目的    编制一个词法分析程序。二、       实验内容和要求 &nb... 查看详情

词法分析实验报告

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

词法分析实验报告1

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

词法分析实验报告

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

词法分析实验报告

实验一:词法分析专业:商业软件工程  姓名:陈锐 学号:201506110103一、       实验目的     编制一个词法分析程序。二、       实验内容和要求1.... 查看详情

词法分析实验报告

实验一、词法分析实验专业:商业软件工程  姓名: 陈 瑾学号:201506110101一、       实验目的     编制一个词法分析程序 二、        查看详情

词法分析实验报告

...行距。报告提交和打印输出时请去掉此框。 实验一、词法分析实验专业:商业软件工程  姓名:陈蔓嘉 学号:201506110245一、       实验目的     编制一个词法分析程序。... 查看详情

词法分析实验报告

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

词法分析实验报告

...行距。报告提交和打印输出时请去掉此框。 实验一、词法分析实验  商软二班张智恒201506110172一、       实验目的     编制一个词法分析程序 二、    查看详情

词法分析实验报告

 实验一、词法分析器实验专业:商软工程3班  姓名:林美全 学号:201506110220一、       实验目的设计,编制一个简单词法分析程序对输入字符串进行识别并做简单有效输出从而加深对词... 查看详情

实验一词法分析实验报告

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

词法分析实验报告

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

实验报告1—’词法分析

实验一、词法分析实验专业:商业软件工程  姓名:钟菲菲 学号:201506110191一、        实验目的 编制一个词法分析程序 二、        实验内容和要求&nb... 查看详情

词法分析实验报告

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

词法分析程序实验报告

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

词法分析-实验报告

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

词法分析程序实验报告

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