当与 Bison 位于不同的目录中时,将 parser.h 正确包含在 parser.c 中

Properly Including parser.h in parser.c When Located in Different Directories with Bison

提问人:karampas 提问时间:9/12/2023 更新时间:9/12/2023 访问量:46

问:

我正在做一个项目,我使用 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"

c bison yacc 目录结构 include-path

评论


答: 暂无答案