1 / 16
文档名称:

词法分析实验报告(实验一).doc

格式:doc   大小:510KB   页数:16页
下载后只包含 1 个 DOC 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

词法分析实验报告(实验一).doc

上传人:mh900965 2018/4/19 文件大小:510 KB

下载得到文件列表

词法分析实验报告(实验一).doc

文档介绍

文档介绍:编译原理词法分析实验报告
软工082班
兰洁
200831104044
实验内容
实验目的
实验预期
程序规定
实验原理
程序流程图
判别浮点功能扩展流程图
状态转换图
程序代码与浮点判别功能扩展
测试用例
扩展功能测试用例;
普通功能测试用例
输出结果
实验心得
一、实验内容:
词法分析:
识别简单语言的单词符号;
识别关键字、标识符、数字、运算符等。并扩展浮点识别功能。
二、实验目的
调试词法分析程序,加深对词法分析原理的理解,掌握编写简单词法分析程序的一般步骤。
三、实验预期结果:
经过调试源代码程序,程序能够成功运行编译,对输入的简单字符串,能够别关键字、标识符、数字、运算符等,并且给出单词符号的对应编码。
四、程序规定:
1、关键字:"function","if","then","while","do","endfunc";
2、算术运算符:”+”,”-”,”*”,”/”,”=”;
3、关系运算符:"<" ">" "<=" ">=" "==" "!=";
4、界符:"(" ")" ";" "#";
5、标识符规定以字母开头,字母均为小写;
6、空格和换行符跳过;
7、单词对应编码:
单词符号
对应编码
单词符号
对应编码
单词符号
对应编码
function
1
>
23
==
25
if
2
<
20
!=
29
then
3
+
13
;
26
while
4
-
14
(
27
do
5
*
15
)
28
endfunc
6
/
16
<>
21
标识符
10
>=
24
其他
-1
数字
11
<=
22
浮点数
80
#
0
=
18
实验原理:
输入串--------------------〉词法分析程序————————〉单词符号串
输入:字符串以#结束。
输出:单词的二元组(syn,token/sum)
程序流程图
分析浮点数功能扩展部分流程图:
shuzi()函数
状态转换图
六、程序代码:
备注:红色字体部分为程序功能的功能扩展,使程序能够分析浮点数!我把浮点数的syn设置为80!
/*词法分析源代码*/
#include<>
#include<>
scaner();
char prog[80],token[8];
char ch;
int syn,p,m,n,sum;
char * rwtab[6]={"function","if","then","while","do","endfunc"};
int i=0,k,c,sumint,f;
char fenshu[80],sum1[80];
double sumf=0,fudian;
int shuzi(){
if(ch>='0' && ch<='9')
syn=80;
else
syn=-2;
return syn;}
main()
{p=0;
printf("\n please input string :\n");
do{
scanf("%c",&ch);
prog[++p]=ch;}
while(ch!='#');
p=0;
do
{
scaner();
switch(syn)
{ case 11:printf("\n(%d,%d)",syn,sum);break;
case -1:printf("\n error");break;
case 80:printf("\n(%d,%f)",syn,fudian);break;
default:printf("\n(%d,%s)",syn,token);
}
}while(syn!=0);
}
scaner()
{
for(n=0;n<8;n++)
token[n]=NULL;//if(1+2!=3)
ch=prog[++p];
while(ch==' ' || ch=='\n')
ch=prog[++p];//跳过空格
if(ch>='a' && ch<='z')
{
m=0;
while(ch>='a' && ch<='z' || ch>='0' && ch<='9')
{
token[m++]=ch;//token[0]=f,m=1
ch=prog[++p];
}
token[m]='\0';
ch=prog[--p];
syn=10;
for(n=0;n<6;n