如何在 Cygwin 上安装和使用 Lex?

问题描述

我的编译器设计课程需要使用 Lex,但如何在 Cygwin 环境中安装和使用它?

解决方法

安装 Cygwin 软件包的正确方法是 Cygwin setup
https://cygwin.com/cygwin-ug-net/setup-net.html

apt-cyg 不受支持、不维护且容易出错。

关于 Lex,您可以使用 cygcheck

找到包含它的包
$ cygcheck -p bin/lex
Found 5 matches for bin/lex
flex-2.6.4-2 - flex: A fast lexical analyzer generator
...

所以你需要安装 flex 包。有了它:

$ cygcheck -l flex |grep bin
/usr/bin/flex++
/usr/bin/flex.exe
/usr/bin/lex

作为附加信息,C 编译器的最新版本是 10.2.0-1

$ cygcheck -p usr/bin/gcc
Found 10 matches for usr/bin/gcc
gcc-core-10.2.0-1 - gcc-core: GNU Compiler Collection (C,OpenMP)
gcc-core-7.4.0-1 - gcc-core: GNU Compiler Collection (C,OpenMP)
gcc-core-9.3.0-1 - gcc-core: GNU Compiler Collection (C,OpenMP)
gcc-core-9.3.0-2 - gcc-core: GNU Compiler Collection (C,OpenMP)
...
,

首先从 here 安装 apt-cyg 软件包管理器。那么

apt-cyg install flex m4

创建一个 Lex 文件,比如 sample.l。那么,

lex sample.l

输出将写入 lex.yy.c。您可以在上一个命令中使用 -o 标志更改此目标。然后,使用

编译
gcc lex.yy.c -lfl

fl 与仅 l 相反,是链接器参数。默认情况下,生成的可执行文件应为 a.exe。 如果您没有 gcc,请使用

安装它
apt-cyg install gcc-core