如何在 windows 上编译 lex 文件?

How to compile a lex file on windows?

我已经在 C:\ 中正确下载并安装了 flex、bison 和 Dev C++。然后我尝试在命令提示符下编译 myfile.l,但它给出了错误:

flex: can't open myfile.l.

有什么问题?

从你的问题可以看出你是初学者,需要一些指导,所以下面是教程式的。我希望你不介意语气。我的很多同学在刚开始的时候遇到了和你一样的问题。

包含 flexbison 或编译器 gcc 代码的文件(或g++) 只是文本文件,而不是某种特殊编码形式的文件。它们只命名为something.lsomething.ysomething.c(或 something.cpp)。如果我们愿意,我们可以只称它们为 something.txt 甚至 something.l.txt。它们之所以这样命名,是为了能够区分一个程序的所有不同组件,而不会弄乱名称 space。因此,如果我们有一个项目,例如在 flex 和 bison 中完成的一些作业,我们可以使用单词 homework 作为基本名称并设置以下文件:

homework.l     <-- The lexer  source file for flex  created for the homework
homework.y     <-- The parser source file for bison created for the homework
homework.cpp   <-- The C++    source file for g++   created for the homework
homework.obj   <-- The object file created by g++
homework.exe   <-- The final windows executable created by g++

(还有很多其他文件,但我暂时跳过)。

由于源文件只是文本文件的形式,因此可以通过文本编辑器创建它们。您表示您正在使用 Dev C++ which is an IDE (Integrated Development Environment) which combines a text editor, a compiler and a debugger into one package. The text editor part works just like any other text editor, such as Notepad, NotePad++, vim, emacs 或众多其他编辑器工具之一。

通常,默认情况下,Windows 上的文本编辑器工具将保存后缀语言代码为 .txt 的文本文件。以下是保存此类文件的示例对话:

您可以看到,如果我通过按 保存 按钮保存了名为 SOlexer.l 的文件,我会得到一个名为 SOlexer.l.txt 的文件因为默认总是创建一个后缀为 .txt.

的文件

现在这不是问题了。如果我像你一样尝试调用 flex

$ flex SOlexer.l
flex: can't open SOlexer.l

我会收到同样的错误信息。但是我可以用实际使用的文件名调用 flex 并且它会起作用:

$ flex SOlexer.l.txt
$

或者,我可以重命名文件,然后使用它:

$ rename SOlexer.l.txt SOlexer.l
$ flex SOlexer.l
$

问题已解决!

但是,正如您所发现的,最好首先使用所需(且更方便)的名称创建文件。为此,只需在保存文件时从菜单中进行不同的选择,如下所示:

如果我们单击 所有类型 (*.*),我们可以创建没有 .txt 后缀的文件。这也适用于大多数类似的工具。

为了帮助在 Windows 上使用 flex 和 bison 有困难的学生,我制作了一个 series of video tutorials。也欢迎您使用它们。

总而言之,虽然您在构建 flex 文件时遇到了问题,但您的问题与 flex 或 bison 无关,而是学习如何在 Windows 上创建和编辑文件的简单初学者问题系统.