视觉工作室中的yacc和野牛

the*_*tna 5 porting yacc bison visual-studio-2010 visual-studio

我打算将用于unix的C项目移植到windows中.到目前为止,我可以编译但不能编译.我得到的问题是,在头文件中声明的一些函数是在yacc文件中定义的.所以我收到以下错误:

 error LNK2001: unresolved external symbol function_name
Run Code Online (Sandbox Code Playgroud)

我在项目的源目录中添加了.y和.l文件.我想我无法将yacc文件移植到Windows版本中,或者我做了一些愚蠢的事情.我在网上搜索但是无法获得适当的教程.Could你能让我知道

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

编辑

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

     c:\> flex.exe name.l
Run Code Online (Sandbox Code Playgroud)

假设flex.exe和name.l都在.And 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 
Run Code Online (Sandbox Code Playgroud)

这是头文件,需要由 bison unix系统生成.所以我想我无法 bison 兼容.windows所以请他帮我,我该如何解决这个问题呢?

提前致谢.

Rud*_*udi 7

您需要为.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无法正确获取依赖关系,因此当您在解析器或词法分析器文件中更改某些内容时,您需要手动重建项目.