编译原理实验报告compile使用slex自动生成词法分析程序
编译原理实验报告
—使用SLex自动生成词法分析程序
实验1.3 使用SLex自动生成词法分析程序
一、实验目的
掌握词法分析程序自动生成系统LEX的原理与过程。
熟悉LEX源程序语法。
学习使用自动构造软件Slex。
分析自动生成的词法分析程序结构。
二、实验平台
Windows + Slex
三、实验内容
编写LEX源程序, 分别实现以下功能
将输入文件中的小写字母转换成大写字母,并输出到屏幕上。
识别出文件中的标识符, 然后将识别出的标识符输出到屏幕上。
将输入串中所有能被7整除的整数加上3, 将结果输出到屏幕上. 其余部分照原样输出.
四、实验步骤
一、在cygwin\home\Administrator文件夹下,创建一个1.txt文件,构造lex源程序,然后将1.txt改成1.lex.代码如下:
%{
#include stdio.h
#include string.h
#include stdlib.h
%}
%%
[a-z] printf(%c,yytext[0]+A-a);
%%
main()
{
yylex();
return 0;
}
int yywrap()
{return 1;
}
2、运行Cygwin
1)在Dom环境下输入:flex 1.lex,系统自动生成lex.yy.c
2)输入gcc.lex.yy.c,系统自动生成a.exe.
3)输入./ a.exe,可运行a.exe文件。
3、运行结果
二.同理编写2.lex.代码如下
%{
#include stdio.h
#include stdlib.h
%}
%%
[a-zA-Z][a-zA-Z0-9]* { printf(%s\n,yytext); }
%%
main()
{
yylex();
return 0;
}
int yywrap()
{return 1;
}
2、运行Cygwin
1)在Dom环境下输入:flex 2.lex,系统自动生成lex.yy.c
2)输入gcc.lex.yy.c,系统自动生成a.exe.
3)输入./ a.exe,可运行a.exe文件。
3、运行结果
三.同理编写3.lex.代码如下
%{
#include stdio.h
#include stdlib.h
int a;
%}
%%
[0-9][0-9]* {
a=atoi(yytext);
if(a%7==0)
printf(%d,a+3);
else printf(%d,a);
}
%%
main()
{
yylex();
return 0;
}
int yywrap()
{return 1;
}
2、运行Cygwin
1)在Dom环境下输入:flex 3.lex,系统自动生成lex.yy.c
2)输入gcc.lex.yy.c,系统自动生成a.exe.
3)输入./ a.exe,可运行a.exe文件。
3、运行结果
五、实验心得
本次实验我们首次在Cygwin环境下的源代码的编写,对于第二题是识别出文件中的标识符, 然后将识别出的标识符输出到屏幕上,实际我们的代码存在缺陷,当输入的是界符等同样可以输出,我们现在正考虑先定义五种字符,判断是标识符后在输出。第二我们尝试把三套题像C程序一样可以嵌套在一起,在一个程序中实现,但最终没有解决。
1
1
原创力文档

文档评论(0)