如何在windows上编译lex文件?

问题描述 投票:0回答:2

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

flex:无法打开 myfile.l。

有什么问题吗?

windows text-files bison flex-lexer
2个回答
4
投票

从你的问题中我可以看出你是一个初学者,需要一些指导,所以接下来的内容是教程风格的。我希望你不要介意这语气。我的许多学生在刚开始时都遇到了与您相同的问题。

包含 flexbison 或编译器 gcc(或 g++)代码的文件只是文本文件,而不是某种特殊编码形式的文件。按照惯例,它们仅被命名为 something.lsomething.ysomething.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(集成开发环境),它将文本编辑器、编译器和调试器组合到一个包中。文本编辑器部分的工作方式与任何其他文本编辑器一样,例如 NotepadNotePad++vimemacs 或无数其他编辑器工具之一。

通常,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 系统上创建和编辑文件的简单初学者问题。


0
投票

我们可以使用代码块代替 Dev - C++ 吗?它还包含 gcc 编译器

© www.soinside.com 2019 - 2024. All rights reserved.