如何在Windows上编译lex文件?

时间:2016-06-18 09:37:11

标签: windows text-files bison flex-lexer

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

  

flex:无法打开myfile.l。

有什么问题?

1 个答案:

答案 0 :(得分:2)

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

包含 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(集成开发环境),它将文本编辑器,编译器和调试器组合到一个包中。文本编辑器部分的工作方式与任何其他文本编辑器一样,例如NotepadNotePad++vimemacs或其他一些编辑器工具。

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

image of notepad++ save as file browser

你可以看到,如果我通过按保存按钮保存了我调用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
$

问题解决了!

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

image of notepad++ save as file browser pull down

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

为了帮助那些在Windows上使用flex和bison有困难的学生我做了series of video tutorials。欢迎您使用它们。

总之,尽管你在构建flex文件时遇到了麻烦,但你的问题与flex或bison无关,而是一个简单的初学者问题,学习如何在Windows系统上创建和编辑文件。