试验1:词法分析

实验一、词法分析实验

商业软件工程3班  李华秋  201506110205

一、 实验目的

    编制一个词法分析程序。通过设计一个编译词法分析程序,实现对词法分析转换的理解,加深对转换过程的认识,通过这个软件把理论知识运用到实际之中。

二、 实验内容和要求

输入:源程序字符串

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

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

 

  1. 源程序名:
  1. 原理分析及流程图

#include <stdio.h>

#include <string.h>char prog[80],token[8],ch;int syn,p,m,n,sum;char *key[6]={"begin","if","then","while","do","end"};//关键字scaner();

main()

{p=0;

printf("\n请输入字符窜,以‘#’字结束):\n");do{

scanf("%c",&ch);

prog[p++]=ch;

}while(ch!=‘#‘);

p=0;do{

scaner();switch(syn)

{case 11:printf("( %-10d%5d )\n",sum,syn);break;case -1:printf("你输入的数据有错!\n");

getch();

exit(0);default: printf("( %-10s%5d )\n",token,syn);break;

}

}while(syn!=0);

getch();

}

scaner()

{  sum=0;for(m=0;m<8;m++)token[m++]=NULL;

ch=prog[p++];

m=0;while((ch==‘ ‘)||(ch==‘\n‘))ch=prog[p++];if(((ch<=‘z‘)&&(ch>=‘a‘))||((ch<=‘Z‘)&&(ch>=‘A‘)))

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

{token[m++]=ch;

ch=prog[p++];

}

p--;

syn=10;for(n=0;n<6;n++)if(strcmp(token,key[n])==0)

{ syn=n+1;break;

}

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

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

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

ch=prog[p++];

}

p--;

syn=11;

}else switch(ch)

{ case ‘<‘:token[m++]=ch;

ch=prog[p++];if(ch==‘=‘)

{  syn=22;

token[m++]=ch;

}else

{  syn=20;

p--;

}break;case ‘>‘:token[m++]=ch;

ch=prog[p++];if(ch==‘=‘)

{ syn=24;

token[m++]=ch;

}else

{ syn=23;

p--;

}break;case ‘+‘: token[m++]=ch;

ch=prog[p++];if(ch==‘+‘)

{ syn=17;

token[m++]=ch;

}else

{ syn=13;

p--;

}break;case ‘-‘:token[m++]=ch;

ch=prog[p++];if(ch==‘-‘)

{ syn=29;

token[m++]=ch;

}else

{ syn=14;

p--;

}break;case ‘!‘:ch=prog[p++];if(ch==‘=‘)

{ syn=21;

token[m++]=ch;

}else

{ syn=31;

p--;

}break;case ‘=‘:token[m++]=ch;

ch=prog[p++];if(ch==‘=‘)

{ syn=25;

token[m++]=ch;

}else

{ syn=18;

p--;

}break;case ‘*‘: syn=15;

token[m++]=ch;break;case ‘/‘: syn=16;

token[m++]=ch;break;case ‘(‘: syn=27;

token[m++]=ch;break;case ‘)‘: syn=28;

token[m++]=ch;break;case ‘{‘: syn=5;

token[m++]=ch;break;case ‘}‘: syn=6;

token[m++]=ch;break;case ‘;‘: syn=26;

token[m++]=ch;break;case ‘\"‘: syn=30;

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

token[m++]=ch;break;case ‘:‘:syn=17;

token[m++]=ch;break;default: syn=-1;break;

}

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

}

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

for(m=0;m<8;m++)token[m++]=NULL;

ch=prog[p++];

m=0;

while((ch==‘ ‘)||(ch==‘\n‘))ch=prog[p++];

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

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

{token[m++]=ch;

ch=prog[p++];

}

p--;

  1. 运行结果及分析

四、 实验总结

对词法转换过程认识不够,没能独立完成本次试验,对课本的知识还一知半解,刚接触逻辑上有些跟不上,课堂上的东西也没全掌握,很多问题都是靠查阅资料和问同学才解决。

 

 

 

时间: 2024-11-20 23:22:46

试验1:词法分析的相关文章

实验一&#160;&#160;词法分析程序045

实验一  词法分析程序实验 专业 计算机科学与技术   姓名 邹汉辉  学号 201508030045 一.实验目的 1. 编制一个词法分析程序 二. 实验内容和要求 1. 输入:源程序字符串 2. 输出:二元组(种别,单词本身) 3. 待分析语言的词法规则 三. 实验方法.步骤及结果测试 1.  源程序名:压缩包文件(rar或zip)中源程序名 cifafenxi.c 可执行程序名:cifafenxi.exe 2.  原理分析及流程图 3.  主要程序段及其解释: #include<stdio

词法分析实验报告

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

词法分析

词法分析 #include<stdio.h> #include<string.h> void main() { int i=0,j,k=0,state=1,f=0,linenum=1; char a[11][10]={"const","var","call","begin","if","while","do","odd",&

实验报告-词法分析.c

实验一.词法分析程序 商业软件工程   简梓茵  201506110132 一.        实验目的   熟悉词法分析的形式. 二.        实验内容和要求 对输入的每个关键字或者字符进行词法分析,给出该关键字对应的排序序号 三.        实验方法.步骤及结果测试   1.      源程序名:wordanalyse.c 2.      原理分析及流程图 3.      主要程序段及其解释: #include <stdio.h> #include <string.h>

实验一词法分析程序

一.        实验目的 编制一个词法分析程序 二.        实验内容和要求 输入:源程序字符串 输出:二元组(种别,单词本身) 待分析语言的词法规则 三.        实验方法.步骤及结果测试 1.      源程序名:压缩包文件(rar或zip)中源程序名 cifafenxi.c  cifafenxi.exe 2.      原理分析及流程图 3.      主要程序段及其解释: do { scanf("%s\n",input); i=0; while(input[i]

词法分析程序实验报告

实验一词法分析实验 商业软件工程2班  黄铭坤  201506110147 一.        实验目的        编制一个词法分析程序. 二.        实验内容和要求 输入:源程序字符串 输出:二元组(种别,单词本身) 待分析语言的词法规则 三.        实验方法.步骤及结果测试 1.      源程序名:词法分析.c 可执行程序名:词法分析.exe 2.      原理分析及流程图 (1)   关键字: begin  if  then  while  do  end (2) 

词法分析程序新

词法分析程序的功能:提示用户输入一段需分析的源程序,然后程序读入该源程序的字符串进行词法分析,最后输出词法分析的结果显示在屏幕上.符号与种别码对照表:单词符号 种别码 单词符号 种别码begin     1        :          17if           2        :=        18then      3        <          20while      4       <=        22do         5 end       6    

词法分析2

#include <stdio.h> #include <string.h> #define max 100 char a[max],b[8],ch; int syn,p,m,n,sum; char word[][6]={"begin","if","then","while","do","end"}; void mor() { sum=0; ch=a[p++];

词法分析程序(编译原理)

一:词法分析程序的功能: 输入单词串,以'begin'开始,以'#'结束.如果是文法正确的句子,则输出成功的信息:'输入单词串成功',否则返回错误提示. 例: 输入 begin a:=345 end # 输出 输入单词串成功 二:符号与种码对照表 单词符号 种别码 单词符号 种别码 begin 1 : 17 if 2 := 18 then 3 <  20 while 4 <= 21 do 5 <>  22 end 6 >  23 l(l|d)* 10 >= 24 dd*