如何在Windows上编译LEX/YACC文件?
我有如何在Windows上编译LEX/YACC文件?,windows,bison,yacc,lex,flex-lexer,Windows,Bison,Yacc,Lex,Flex Lexer,我有Lex和YACC文件来解析我的文件(.l文件和.y文件) 如何编译这些文件以及如何在windows平台中为它们生成等效的.c文件?这里有用于windows的flex和bison端口: 是lex的自由实现。是yacc的免费实现。总是有。你(可能想要)的是Flex 2.5.4(有些人现在正在“维护”它并制作,但在我看来,他们做的更多的是把它搞砸,而不是修复任何真正的缺点)和(同样)。(2017年11月17日编辑:Flex 2.5.4在Sourceforge上不再可用,Flex github存储库
Lex
和YACC
文件来解析我的文件(.l
文件和.y
文件)
如何编译这些文件以及如何在windows平台中为它们生成等效的
.c
文件?这里有用于windows的flex和bison端口:
是lex的自由实现。是yacc的免费实现。总是有。你(可能想要)的是Flex 2.5.4(有些人现在正在“维护”它并制作,但在我看来,他们做的更多的是把它搞砸,而不是修复任何真正的缺点)和(同样)。(2017年11月17日编辑:Flex 2.5.4在Sourceforge上不再可用,Flex github存储库只能追溯到2.5.5。但显然,您仍然可以从位于的Gnu ftp服务器上获取。)
既然它不可避免地会被推荐,我就警告你不要使用野牛。Bison最初是由Robert Corbett写的,他后来也是ACC的作者,他公开表示当时他并不知道或理解自己在做什么。不幸的是,由于年轻和愚蠢,他在GPL下发布了它,现在GPL的粉丝们把它作为生活弊病的答案,尽管它的作者基本上说它应该被视为基本上是一个beta测试产品——但根据GPL粉丝们复杂的推理,byacc的许可证没有足够的限制,不符合“免费”的条件 截至今天(2011-04-05,2017-11-29更新),您将需要最新版本的:
C:\GnuWin32
。不要将其安装在默认的(C:\Program Files(x86)\GnuWin32)中,因为bison在目录名中的空格方面存在问题,更不用说括号了gcc
(在C:\Dev Cpp\bin
中)和flex\bison
(在C:\GnuWin32\bin
中)的bin目录。为此,请复制以下内容:;C:\Dev Cpp\bin;C:\GnuWin32\bin
并将其附加到路径
变量的末尾,该变量在下图所示的位置定义:如果图形的分辨率不好,您可以看到一个
flex hello.l
bison-dy hello.y
gcc lex.yy.cy.tab.c-o hello.exe
helloworld
):
你好,我
你好,y
%{
#包括
#包括
int yylex(无效);
int yyerror(常量字符*s);
%}
%代币再见
%%
节目:
嗨,再见
;
你好:
你好{printf(“Hello World\n”);}
;
再见:
再见{printf(“再见世界”);退出(0);}
;
编辑:避免“警告:yyerror和yylex的隐式定义” 免责声明:请记住,这个答案非常古老(自2011年以来!),如果您因版本和功能更改而遇到问题,您可能需要更多的研究,因为我无法更新此答案以反映新的ITEN。谢谢,我希望这将是一个很好的切入点,因为它是为许多人 更新:如果需要做一些(非常小的更改),请查看github的官方存储库:
快乐黑客。您可以在这里找到最新版本的windows flex&bison:开始全面安装,而
bison
和flex
将随附在bin
文件夹中。最简单的方法是下载并安装cygwin,并在安装过程中下载gcc和flex软件包。
然后为例如abc.l运行lex文件
我们写
flex abc.l
gcc lex.yy.c -o abc.exe
./abc.exe
同样值得注意的是,WinFlexBison已经为。安装它,然后执行以下操作:
choco install winflexbison
…在撰写本文时包含Bison 2.7和Flex 2.6.3
还有
winflexbison3
,它(在编写本文时)有Bison 3.0.4和Flex 2.6.3。我也遇到了同样的问题,它有一个非常简单的解决方案。执行“Lex”程序的步骤:
bison-dy hello.y
不生成任何文件。它只是在提示中显示一些代码。如何创建y.tab.c
?@Pramodh这很奇怪。。。它显示的是什么代码?错误代码?或者一些源代码?我现在在两台不同的机器上完成了这个过程,两台机器都能工作。你确定你正在一步一步地跟踪它吗?在上面的命令提示符屏幕截图中,flex的屏幕是否相同(没有错误)?键入bison-dy hello.y
命令后按
键时,您得到的确切信息是什么?如果你提供确切的细节,也许我们能解决问题。如果你觉得这个评论太多,也许你可以问一个有错误的问题。作为提示,这个源代码也适用于Linux,它是一个非常简短和有用的示例程序。谢谢jrh。你发现了我的秘密!:)它最初是为linux编写的,然后在windows和linux上进行测试和调试。如果您喜欢消耗数百兆字节的磁盘空间,这是最简单的。事实上,这是我在博士班上被建议做的。嘿,杰瑞,你有没有与科贝特的链接,说明当时他并不知道或不明白自己在做什么?谢谢。@RayHulha:对不起,我手边没有链接。
flex abc.l
gcc lex.yy.c -o abc.exe
./abc.exe
choco install winflexbison