我已在 C:\ 中正确下载并安装了 flex、bison 和 Dev C++。然后我尝试在命令提示符下编译 myfile.l,但出现错误:
flex:无法打开 myfile.l。
有什么问题吗?
从你的问题中我可以看出你是一个初学者,需要一些指导,所以接下来的内容是教程风格的。我希望你不要介意这语气。我的许多学生在刚开始时都遇到了与您相同的问题。
包含 flex、bison 或编译器 gcc(或 g++)代码的文件只是文本文件,而不是某种特殊编码形式的文件。按照惯例,它们仅被命名为 something.l、something.y 和 something.c(或 something.cpp)。如果我们愿意,我们可以将它们称为 something.txt 甚至 something.l.txt。它们如此命名的原因是为了能够区分一个程序的所有不同组件,而不会使名称空间变得混乱。因此,如果我们有一个项目,例如在 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++,这是一种 IDE(集成开发环境),它将文本编辑器、编译器和调试器组合到一个包中。文本编辑器部分的工作方式与任何其他文本编辑器一样,例如 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 遇到困难的学生,我制作了一系列视频教程。也欢迎您使用它们。
总之,虽然您在构建 Flex 文件时遇到了困难,但您的问题与 Flex 或 Bison 无关,而是学习如何在 Windows 系统上创建和编辑文件的简单初学者问题。
我们可以使用代码块代替 Dev - C++ 吗?它还包含 gcc 编译器