【问题标题】:yacc and bison in visual studioVisual Studio 中的 yacc 和 bison
【发布时间】:2011-09-27 15:33:56
【问题描述】:

我要将用于 unix 的 C 项目移植到 Windows 中。到目前为止,我可以让它 compile 但不能 build 。我得到的问题是,在头文件中声明的一些函数是在 yacc 文件中定义的。所以我收到以下错误:

 error LNK2001: unresolved external symbol function_name

我在项目的源目录中添加 .y 和 .l 文件。我想我无法将 yacc 文件移植到 Windows 版本中,或者我在做一些愚蠢的事情。我在网上搜索它,但无法获得正确的教程它。你能告诉我吗

  1. 如何在项目中添加 .y 或 .l 文件。
  2. 如何使这些文件与 windows 兼容?
  3. 如何将它们与其他目标文件链接。

编辑

我尝试使用flex.exe 将.l 文件更改为 .yy.c 文件。以下是它的命令

     c:\> flex.exe name.l

假设 flex.exe 和 name.l 都在 C;> 中。我在以前存在的项目的解决方案中加载了所有这些文件 .l .y(previously present for parsing in unix system) .yy.c(corrsonding yacc file for windows)。编译后,我得到以下内容

 Can't read the header file  parserheaderfile.h 

这是unix中 bison 需要生成的头文件 系统。所以我认为我无法使 bison 与windows 兼容。所以请他告诉我我该如何解决这个问题?

提前致谢。

【问题讨论】:

    标签: visual-studio visual-studio-2010 porting yacc bison


    【解决方案1】:

    您需要为 .y 和 .l 文件添加自定义构建规则。为此,您需要

    1. 为 .l 文件和 .y 文件创建一个虚拟 .c 文件
    2. 将 .l、.y 和两个 .c 文件添加到项目中
    3. 右键单击 .l 文件并选择属性
    4. 配置->所有配置
    5. 常规->项目类型->自定义构建工具
    6. 申请
    7. 自定义构建工具->常规->命令行->flex -olexer.c lexer.l
    8. 自定义构建工具->常规->输出->lexer.c
    9. 自定义构建工具->常规->附加依赖项->parser.y parser.c
    10. 申请
    11. 在解决方案资源管理器中选择 .y 文件
    12. 配置->所有配置
    13. 常规->项目类型->自定义构建工具
    14. 申请
    15. 自定义构建工具->常规->命令行->bison -oparser.c parser.y
    16. 自定义构建工具->常规->输出->parser.c parser.h

    您还需要在系统搜索路径中有 flex.exe、bison.exe 和 m4.exe。另一个缺点是 VS 没有正确获取依赖关系,因此当您更改解析器或词法分析器文件中的某些内容时,您需要手动重新构建项目。

    【讨论】:

    • 这是您每次使用 f/lex 和/或 bison/yacc 启动新项目时必须设置的内容吗?或者你可以设置一次,VS 会永远记住这些设置吗?此外,是否有任何推荐的 IDE 来使用这些库?当您必须在使用 gcc 编译之前运行 f/lex 和/或 bison/yacc 时,从命令行执行操作有时会很烦人。
    • @velocirabbit 这是一个项目特定的设置。所以你需要为每个 .l 或 .y 文件配置它。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-14
    相关资源
    最近更新 更多