gpt4 book ai didi

windows - 如何在 Windows 上编译 lex 文件?

转载 作者:可可西里 更新时间:2023-11-01 10:16:59 24 4
gpt4 key购买 nike

我已经在 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。它们之所以这样命名,是为了能够区分一个程序的所有不同组件,而不会弄乱 namespace 。因此,如果我们有一个项目,例如在 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 的文本文件。这是保存此类文件的示例对话:

image of notepad++ save as file browser

您可以看到,如果我通过按 保存 按钮保存了名为 SOlexer.l 的文件,我将得到一个名为 SOlexer.l 的文件。 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 系统上创建和编辑文件的简单初学者问题。

关于windows - 如何在 Windows 上编译 lex 文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37895491/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com