使用Flex&Bison时可能的问题和解决方法

问题1:cannot find ll

意思是找不到 libl.a库文件。

问题2:cannot find fl

意思是找不到 libfl.a库文件。

问题3:cannot find ly

意思是找不到 liby.a库文件。

解决方法

下面是在Ubuntu系统上的解决方法介绍:

  1. 安装apt-file:apt install apt-file
  2. 使用apt-file命令查找库在哪个工具包中:
apt-file search libl.a
apt-file search libfl.a
apt-file search liby.a

查找结果:

3. 安装对应的工具包就可以了

apt install libfl-dev libbison-dev

apt-cache 是使用包名或包描述 检索仓库。

apt-file 是 使用包中文件名检索存储库(工具包名)。

Linux centos 对应的是 yum whatprovides ,具体使用方法请自行查阅。

语法分析器Bison安装

Bison源码地址:https://github.com/akimd/bison

Linux环境安装

方式一

到Bison官网上给定的下载地址:https://ftp.gnu.org/gnu/bison/

下载完成后,解压后进入文件夹目录按照INSTALL文件内容中的安装步骤即可。

  • 执行配置:./configure ,执行后可能会检查出来缺少依赖,按照提示的内容,安装缺少的依赖就可以了。
  • 执行编译和检查:make && make check
  • 执行安装:sudo make install ,默认是安装在 /usr/local/bin目录下。
  • 安装成功后,输入bison --version ,输出版本号就表示成功了。

方式二

直接命令安装:sudo apt install bison

Windows环境安装

在上一篇文章中,Flex安装中已经说明安装了MinGW。下面直接说安装Bison。

选择最新的版本下载,并选择安装到和Flex一个目录中。之前flex的bin目录已经添加到了系统环境path中了。这里直接打开cmd控制台,输入:bison --version 输出正确的版本即成功安装。

词法分析器Flex安装

Flex源码地址:https://github.com/westes/flex/

Linux环境环境安装

方式一

  • 环境说明

Linux Debian x86_64

注意:系统需要安装 cmake 和 make.

  • 安装依赖:sudo apt install help2man m4
  • 下载flex压缩包:wget https://github.com/westes/flex/releases/download/v2.6.4/flex-2.6.4.tar.gz
  • 解压文件:sudo tar -xvf flex-2.6.4.tar.gz
  • 进入文件夹:cd flex-2.6.4
  • 查看INSTALL.md文件中的安装步骤
  • 执行配置命令:./configure 会把列出提示缺少的依赖包,需要把这些缺少的依赖逐个安装一下就行。help2man,m4等
  • 执行编译和检查:make && make check
  • 执行安装:sudo make install 默认是安装在/usr/local/bin 路径下面的。
  • 检查是否安装成:flex --version 成功输出版本号,则是成功。

方式二

直接安装:sudo apt install flex

Windows环境安装

  • 环境说明:系统win10,需要安装MinGW(Minimalist GUN on Windows),是GCC的windows版本,MinGW有2个发行版本:MinGW-64 和 MinGW。区别在于MinGW只能编译生成32位可执行程序,而MinGW-64则可以 编译生成64位和32位的可执行程序。下载地址:https://sourceforge.net/projects/mingw-w64/files/

可以选择以下2种方式安装,如下图:

我选择的是【x86_64-win32-sjlj】,解压后直接将 bin目录配置到系统环境变量path中,然后将mingw32-make.exe重命名为make.exe。

目前这里只提供了32位的工具,如果需要64位的文件需要自己手动编译源码生成。

安装完成后,需要将安装目录下的bin文件夹目录添加到系统环境变量path中。

完成系统环境配置后打开cmd控制台,输入:flex --version 可以打印出版本号。