实验一 词法分析实验报告

实验一、词法分析实验

专业:商业软件工程2班  姓名 别博文  学号201606110175

一、 实验目的

 

     编制一个词法分析程序。

二、 实验内容和要求

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

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

 源程序名:压缩包文件(rar或zip)中源程序名 ceshi.c

可执行程序名:ceshi.exe

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

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

#include<stdio.h>

#include<string.h>

char str[100];

char take[8];//存放单词符号的字符串

int sum;//存放整数型单词

char ch;

int zbm;//存放单词字符的种别码

int i,n,p,m=0;//p是缓冲区str的指针,m是take的指针

char *keyword[8]={"begin","if","then","while","do","end","l(l|d)*","dd*"};

void scanner()//词法扫描程序

{

/* for(i=0;i<8;i++)

{

take[i]=NULL;

}

ch=str[p++];*/

m=0;

sum=0;

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

take[m]=0;

ch=str[p++];

while(ch==‘ ‘||ch==‘\n‘)

{

ch=str[p++];

}

if((ch>=‘a‘&&ch<=‘z‘)||(ch>=‘A‘&&ch<=‘Z‘))//可能是标识符或者是变量名

{

m=0;

while(ch>=‘0‘&&ch<=‘9‘||(ch>=‘a‘&&ch<=‘z‘)||(ch>=‘A‘&&ch<=‘Z‘))

{

take[m++]=ch;

ch=str[p++];

}

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

p--;

zbm=10;

for(i=0;i<6;i++)//将识别出的字符和已定义的标符进行比较

if(strcmp(keyword[i],take==0))

{

zbm=i+1;

break;

}

}

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

{

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

{

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

ch=str[p++];

}

p--;

zbm=11;

}

else

{

switch(ch)

{

case ‘+‘:

zbm=13;

take[0]=ch;

ch=str[p++];

break;

case ‘-‘:

zbm=14;

take[0]=ch;

ch=str[p++];

break;

case ‘*‘:

zbm=15;

take[0]=ch;

ch=str[p++];

break;

case ‘/‘:

zbm=16;

take[0]=ch;

ch=str[p++];

break;

case ‘<‘:

take[m++]=ch;

ch=str[p++];

if(ch==‘>‘)

{

zbm=21;

take[m++]=ch;

}

else if(ch==‘=‘)

{

zbm=22;

take[m]=ch;

}

else{

zbm=20;

p--;

}

break;

case ‘>‘:

take[0]=ch;

ch=str[p++];

if(ch==‘=‘)

{

zbm=24;

take[0]=ch;

}

else{

zbm=23;

p--;

}

break;

case ‘:‘:

take[0]=ch;

ch=str[p++];

if(ch==‘=‘)

{

zbm=18;

take[m++]=ch;

ch=str[p++];

}

else{

zbm=17;

p--;

}

break;

case ‘=‘:

zbm=25;

take[0]=ch;

ch=str[p++];

break;

case ‘;‘:

zbm=26;

take[0]=ch;

ch=str[p++];

break;

case ‘(‘:

zbm=27;

take[0]=ch;

ch=str[p++];

break;

case ‘)‘:

zbm=28;

take[0]=ch;

ch=str[p++];

break;

case ‘#‘:

zbm=0;

take[0]=ch;

ch=str[p++];

break;

default:

zbm=-1;

}

}

}

main()

{

int n,i;

printf("----------------------------------------\n");

printf("\t编制一个词法分析程序\n\n");

printf("\t要求:\n");

printf("\t输入:源程序字符串\n");

printf("\t输出:二元组(种别,单词本身)\n");

printf("----------------------------------------\n\n");

printf("请输入您要输入的字符:\n");

do//输入一段字符串

{

ch=getchar();

str[p++]=ch;

}while(ch!=‘#‘);

p=0;

ch=str[0];

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

printf("错误!\n");

else

{

do

{

scanner();

switch(zbm)

{

case 11:

printf("(%d,%d)\n",11,sum);

break;

case -1:

printf("错误!\n");

break;

default:

printf("(%d,%s)\n",zbm,take);

}

}while(zbm!=0);

}

return 0;

}

运行结果及分析

时间: 2024-10-14 14:10:23

实验一 词法分析实验报告的相关文章

实验一词法分析实验报告

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

实验一 词法分析实验

实验一.词法分析实验 一.        实验目的 编制一个词法分析程序 二.        实验内容和要求 输入:源程序字符串 输出:二元组(种别,单词本身) 三.        实验方法.步骤及结果测试  1.      源程序名:压缩包文件(rar或zip)中源程序名×××.c可执行程序名:×××.exe 2.      原理分析及流程图 把输入的字符用链表进行存储,利用自己构造的一个判断函数,读取字符链表中存储的字符并进行判断处理,如果符合条件则输出,并继续判断直到链表为空则退出. 3.

词法分析实验报告(一)

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

词法分析实验报告

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

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

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

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

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

词法分析-实验报告

商软三班   倪伟锐  201506110225 一.       实验目的 通过设计编制调试一个具体的词法分析程序,加深对词法分析原理的理解.并掌握在对程序设计语言源程序进 行扫描过程中将其分解为各类单词的词法分析方法. 二.       实验内容和要求 编制一个读单词过程,从输入的源程序中,识别出各个具有独立意义的单词,即基本保留字.标识符.常数.运算符.分隔符五大类.并依次输出各个单词的内部编码及单词符号自身值. 三.       实验方法.步骤及结果测试 1.     源程序名: 词法分

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

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

实验一词法分析报告

实验一.词法分析实验 专业:商业软件工程三班       姓名:郑锦诚      学号:201506110198 一.        实验目的 词法分析是编译的第一阶段,它的主要任务是从左至右逐个字符地对源程序进行扫描,产生一个个单词序列,用于语法分析. 二.        实验内容和要求 让用户输入一段程序段,然后逐个读取字符,将它们拼在一起,获取一个有意义的单词或符号,识别出单词或符号种别以及自身的值,并输出. 三.        实验方法.步骤及结果测试 1.      源程序名:压缩包文