视觉工作室中的 yacc 和 bison

发布于 2024-11-18 01:00:15 字数 902 浏览 4 评论 0原文

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

 error LNK2001: unresolved external symbol function_name

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

  1. 如何在项目。
  2. 我怎样才能使这些文件与Windows兼容?
  3. 我如何将它们与其他目标文件链接。

编辑

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

     c:\> flex.exe name.l

假设 flex.exe 和 name.l 都在 C;> 中。我加载了所有这些文件 .l .y(之前在 unix 系统中用于解析) .yy.c(适用于 Windows 的相应 yacc 文件) 在先前现有项目的解决方案中。编译后,我得到以下内容

 Can't read the header file  parserheaderfile.h 

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

提前致谢。

I am going to port the C project that was for unix into windows. So far, I could make it compile but not build . The problem I am getting is , some of the functions which are declared in the header files are defined in the yacc files.so I am getting the following errors:

 error LNK2001: unresolved external symbol function_name

I am adding .y and .l files in the source directory of the project.I think I could not port yacc files into windows version or am I doing something stupid.I search it on web but could not get proper tutorial for it.Could you please let me know

  1. How could I add .y or .l files in the project.
  2. How would I make those file compatible to the windows?
  3. How can I link them with other object files.

EDIT

I tried with changing the the .l files into the .yy.c files using the flex.exe.Following is the command for it

     c:\> flex.exe name.l

Supposing that both the flex.exe and name.l are in C;>.And I loaded those all those files .l .y(previously present for parsing in unix system) .yy.c(corrsonding yacc file for windows) in the solution of previously exisiting project. Once I compile,I get the following

 Can't read the header file  parserheaderfile.h 

This is the header file which needs to be generated by the bison in the unix
system. So I think I am not able to make the bison compatible for windows .So please him me how can I solve this problem?

Thanks in advance.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

如日中天 2024-11-25 01:00:15

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

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

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

You need to add custom build rules for your .y and .l files. To do this, you need to

  1. create one dummy .c file for the .l file and the .y file
  2. add the .l, .y and both .c files to the project
  3. right click on the .l file and select properties
  4. Configuration->All Configurations
  5. General->Item Type->Custom Build Tool
  6. Apply
  7. Custom Build Tool->General->Command Line->flex -olexer.c lexer.l
  8. Custom Build Tool->General->Outputs->lexer.c
  9. Custom Build Tool->General->Additional Dependencies->parser.y parser.c
  10. Apply
  11. select the .y file in the solution explorer
  12. Configuration->All Configurations
  13. General->Item Type->Custom Build Tool
  14. Apply
  15. Custom Build Tool->General->Command Line->bison -oparser.c parser.y
  16. Custom Build Tool->General->Outputs->parser.c parser.h

Also you need to have flex.exe, bison.exe and m4.exe in the system search path. Another drawback is that VS does not get the dependencies right, so when you change something in the parser or lexer files, you need to manually rebuild the project.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文