提问人:karampas 提问时间:9/12/2023 更新时间:9/12/2023 访问量:46
当与 Bison 位于不同的目录中时,将 parser.h 正确包含在 parser.c 中
Properly Including parser.h in parser.c When Located in Different Directories with Bison
问:
我正在做一个项目,我使用 Bison 生成解析器,Bison 在一个目录中生成 parser.c(我们称之为“src/parser”),在另一个目录中生成 parser.h(我们称之为“include/parser”)。我的项目结构如下所示:
- project_directory/
- grammar/
- grammar.y
- scanner.l
- src/parser
- parser.c
- include/parser
- parser.h
现在,我的问题是,考虑到它们在不同的目录中,我如何正确地将 parser.h 包含在 parser.c 中?
使用 flex,我使用以下 %options,并且我得到了预期的结果,编译没有问题。
%option noyywrap yylineno
%option outfile = "src/lexer/scanner.c" header-file="include/lexer/scanner.h"
所以我试着对野牛做同样的事情,在我的文件中我写了grammar.y
%header "include/parser/parser.h"
%output "src/parser/parser.c"
但是 bison 会生成 parser.c 文件,该文件会导致以下错误:#include "parser.h"
src/parser/parser.c:105:10: fatal error: parser.h: No such file or directory
105 | #include "parser.h"
| ^~~~~~~~~~
compilation terminated
当我手动更改 include 语句时,它可以很好地编译,当我从 bison 文件中删除 %header 声明时,它编译时没有预期的错误。#include "parser/parser.h"
答: 暂无答案
评论