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

实验一、词法分析实验

商业软件工程专业   陈若倩  201506110135

一、 实验目的

通过设计一个词法分析程序,对词法进行分析,加强对词法的理解,掌握对程序设计语言的分解和理解。

二、 实验内容和要求

在原程序中输入源代码

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

在源程序中,自动识别单词,把单词分为五种,并输出对应的单词种别码。

  1. 识别关键字:main if int for while do return break continue,该类的单词码为1.
  2. 识别标识符:表示各种名字,如变量名、数组名、函数名等,如char ch, int syn, token,sum,该类的单词码为2.
  3. 运算符:+、-、*、/、=、>、<、>=、<=、!=
  4. 分隔符:,、;、{、}、(、)
  5. 常数,如123,4587

各种单词符号对应的种别码。

输出形式:

  • 二元式

– (单词种别,单词自身的值)

  • 单词种别,表明单词的种类,语法分析需要的重要信息

– 整数码

  • 关键字、运算符、界符:一符一码
  • 标识符:10, 常数:11
  • 单词自身的值

– 标识符token、常数sum

– 关键字、运算符、界符token

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

  1. 源程序名:编译原理 实验报告 中源程序名 算法分析.c

可执行程序名:编译原理 实验报告.exe

  1. 原理分析及流程图
  1. 主要程序段及其解释:

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

#include <stdio.h>

#include <string.h>

#include <conio.h>

#include <ctype.h>

void cffx();

char prog[80]={‘\0‘},

token[8];

char ch;

int syn,n,sum,m,p;

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

main()

{

p=0;

printf("\nplease input string:\n");

do {

ch=getchar();

prog[p++]=ch;

}while(ch!=‘#‘);

p=0;

do{

cffx();

switch(syn){

case 11: printf("(%d,%d)\n",syn,sum);break;

case -1: printf("\n ERROR;\n");break;

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

}

}while(syn!=0);

getch();

}

void cffx()

{

m=0;

sum=0;

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

token[n]=‘\0‘;

ch=prog[p++];

while(ch==‘ ‘)

ch=prog[p++];

if(isalpha(ch))

{

while(isalpha(ch)||isdigit(ch))

{

token[m++]=ch;

ch=prog[p++];}

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

ch=prog[p--];

syn=10;

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

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

{

syn=n+1;

break;}}

else

if(isdigit(ch))

{

while(isdigit(ch))

{

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

ch=prog[p++];}

ch=prog[p--];

syn=11;}

else

switch(ch){

case‘<‘:m=0;token[m++]=ch;ch=prog[p++];

if(ch==‘>‘){

syn=21;

token[m++]=ch;}

else if(ch==‘=‘){

syn=22;

token[m++]=ch;}

else{

syn=20;

ch=prog[p--];}

break;

case‘>‘:m=0;token[m++]=ch;ch=prog[p++];

if(ch==‘=‘){

syn=24;

token[m++]=ch;}

else{

syn=23;

ch=prog[p--];}

break;

case‘:‘:m=0;token[m++]=ch;ch=prog[p++];

if(ch==‘=‘){

syn=18;

token[m++]=ch;}

else{

syn=17;

ch=prog[p--];}

break;

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=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:syn=-1;

}

}

  1. 运行结果及分析

一、 实验总结

学会编写一个简单的词法分析程序,虽然在过程中有许多艰难。但是最终制作成功的喜悦,就好像在上课终于学会怎么推导出结果一样激动不已。

时间: 2024-10-13 17:07:14

201506110135陈若倩词法分析实验报告的相关文章

词法分析实验报告

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

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

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

实验一 词法分析实验报告

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

词法分析实验报告(一)

实验一  词法分析实验 专业:商业软件三班   姓名:曾铭杰  学号:201506110197 一.        实验目的 用C语言设计一个词法分析程序,将字符流的源程序进行分析,从左到右逐个字符地扫描源程序,同时滤掉空格符和回车换行符,逐个读取字符,然后将它们拼在一起组成一个有意义的单词符号,识别出单词的种别及单词自身的值. 二.        实验内容和要求 1.输入一段源程序字符串: 2.输出格式按照二元组(种别,单词符号本身). 三.        实验方法.步骤及结果测试 1.   

词法分析实验报告_219范楚广

实验一.词法分析实验 商业软件3班  范楚广  219 一.        实验目的   编制一个词法分析程序.通过设计一个编译词法分析程序,实现对词法分析转换的理解,加深对转换过程的认识,通过这个软件把理论知识运用到实际之中. 二.        实验内容和要求 输入:源程序字符串 输出:二元组(种别,单词本身 三.        实验方法.步骤及结果测试   1.      源程序名:词法分析_219范楚广.c 可执行程序名:词法分析_219范楚广.exe 2.      原理分析及流程图

编译原理--词法分析--实验报告(此文章在管理-发表文章 里也有)

实验一.词法分析实验 专业:信息技术与工程学院   姓名:吕军  学号:201506110159    一.        实验目的   目的:主要是为了编辑一个词法分析程序.了解计算机的识别源程序字符串的过程. 二.        实验内容和要求   实验内容:通过了解 各种单词符号对应的种别码表,编写一个简单的词法分析程序,通过计算机识别字符串,反映其中的单词符号和所对应的种别码. 实验要求:用户输入源程序字符串,输出:二元组(种别,单词本身) 三.        实验方法.步骤及结果测试

词法分析实验报告1

实验一.词法分析实验 商软二班 张智恒 201506110172 一.        实验目的        编制一个词法分析程序 二.        实验内容和要求 编写一个词法分析程序,使其能够识别对应的单词符号,并以(单词符号        种别码)的形式输出. 三.        实验方法.步骤及结果测试   1.      源程序名:压缩包文件(rar或zip)中源程序名 zzh.c 可执行程序名:zzh.exe 2.      主要程序段及其解释: # include<stdio.h

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

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

实验一词法分析实验报告

一.        实验目的 (1)    理解词法分析在编译程序中的作用. (2)    加深对有穷自动机模型的理解. (3)    掌握词法分析程序的实现方法. (4)    用C语言对一个简单语言的子集编制一个一遍扫锚的编译理解,掌握编译程序的实现方法和技术. 二.        实验内容和要求 1,待分析的简单语言的词法 2,各种单词符号对应的种别码. 3,词法分析程序的功能(输入,输出). 三.        实验方法.步骤及结果测试 1.      源程序名:压缩包文件(rar或zi