编译原理 实验一:Windows环境 配置词法分析工具Lex与简单测试

课程:编译原理(双语)

实验要求:构造tiny语言的词法分析器(扫描器),要求利用第三方的lex工具进行构造。

参考文章:手把手教程-lex与yacc/flex与bison入门(一)(使用windows环境)-CSDN博客

一、配置lex

1、下载

        在D盘创建文件夹lex,在lex下下载文件 ComplierComplier.zip(来自参考文章)并解压缩。

2、配置环境变量Path

        打开文件夹,找到bison.exe、flex.exe、gcc.exe的路径

        以我为例:路径分别为 D:\lex\ComplierComplier\ComplierComplier\GnuWin32\bin(bison和flex)、D:\lex\ComplierComplier\ComplierComplier\MinGW\bin(gcc)

        将两个路径分别配置到系统环境变量Path中:

                右键 “此电脑” ,点击 “属性” ,进入 “高级系统设置” ,点击 “环境变量” ,找到 Path变量,进入 “编辑” 界面 ,将上述两个路径添加至底部。

        至此,环境配置成功。

二、测试是否配置成功

        以管理员身份打开c

                Win + R 打开窗口,输入cmd、Ctrl + Shift + enter 

        在cmd窗口输入 (注意区分大小写):

                前两个是大写V,第三个是小写v

flex -V

bison -V

gcc -v

        如果显示以下内容,则为配置成功。

三、编译简单的flex代码

        创建一个 “_demo” 文件夹

        在 _demo 文件夹中创建一个 test.txt,输入以下代码并保存(代码来源参考文章)

        代码意义:

                在cmd中输入一段文本,它会自动分辨出其中的整数内容,并输出出来。它会忽略其他内容,包括小数。

%{
#include <stdio.h>
%}

%%

([1-9]+[0-9]*)|[0]	ECHO;
[0-9]+\.[0-9]+		
[a-zA-Z]+
.

%%

int main(int argc, char **argv)
{
  yylex();
  yywrap();
}
int yywrap()
{
	return 1;
}

        将 test.txt 后缀名改为 .l ,按照 步骤3 ,以管理员身份进入cmd,再进入 test.l 的路径

        以我为例,输入以下代码

d:
cd D:\lex\_demo

        出现以下内容则为成功进入 _demo 文件夹

        成功进入后,输入以下代码:

flex test.l		//此后会生成C文件lex.yy.c
gcc lex.yy.c	//使用gcc编译成可执行文件

        成功执行后,在 _demo 文件夹下会生成两个文件:a.exe 和 lex.yy.c,其中 a.exe 即为要执行的文件。

        成功生成两个文件后,在 cmd 窗口中输入 a.exe

        在窗口中随意输入测试数据,我输入的:

9
wo zui xi huan de shu zi shi 8.990
wo xi huan 9.88$
wo xi huan 9

        得到的结果:

        分别为:9、空行、空行、9(只输出整数内容)

四、总结

        Lex不像其他,例如: VS、IDEA 那样在官方平台直接下载安装比较简单,Lex感觉更像一个插件。

        一开始搜索配置教程,基本上都是结合 VS 去实现,我也跟着一个教程做过,但是最后还是失败,显示的错误是 有未解析的符号 ,博主上也写了该问题的对应解决方案,尝试后还是失败,最终还是选择了直接在Windows上配置,利用cmd进行编译,过程也比较简单易懂。

        第一次写博客,爽!

  • 14
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值