如何在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在目录名中的空格方面存在问题,更不用说括号了

  • > P>也可以考虑在默认目录中安装(<代码> C:\DEVCPP)

  • 然后,将PATH变量设置为包含
    gcc
    (在
    C:\Dev Cpp\bin
    中)和
    flex\bison
    (在
    C:\GnuWin32\bin
    中)的bin目录。为此,请复制以下内容:
    ;C:\Dev Cpp\bin;C:\GnuWin32\bin
    并将其附加到
    路径
    变量的末尾,该变量在下图所示的位置定义:

    如果图形的分辨率不好,您可以看到一个

  • 打开一个提示符,cd到您的“.l”和“.y”所在的目录,并使用以下命令编译它们:

  • 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”程序的步骤:

  • 工具->“Lex文件编译器”
  • 工具->“Lex构建”
  • 工具->“打开命令”
  • 然后在命令提示符下键入“name\u of_file.exe”示例->“1.exe”
  • 然后输入整个输入,按Ctrl+Z并按Enter键

  • 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