制作一个通用的标头文件以实现解析树

Making one common header file for parse tree implementation

本文关键字:文件 实现 一个      更新时间:2023-10-16

我正在用野牛做一棵解析树。目前,我有一个针对每个非终端的课程,每个生产都有一个子类。问题是我每个班级都有一个标题,所以它们很多。我认为的解决方案是制作一个包括所有标题的通用标头。

当前项目结构的示例:

-ast
--program.hh
--decl.hh
--..
--..
--..
--constants.hh

公共标头(例如common_header.hh(看起来像:

#ifndef COMMON_HEADER_HH
#define COMMON_HEADER_HH
#include "program.hh"
#include "decl.hh"
// a lot of includes here
#include "constants.hh"
#endif //COMMON_HEADER_HH

因此,在野牛我只包括#include "common_header.hh",问题是我读到这被认为是不良练习,因为它可以产生开销和增量汇编时间。这种情况是合理的吗?解析器将始终使用所有标题。

在C (和C(中,最好将每个翻译单元的大小最小化在合理程度上。创建一个包括许多其他包含许多其他标题的文件通常是一种糟糕的做法。

但是,您似乎正在描述一个包括任何包含此组标头的翻译单元,都需要包括整个标题。在这种情况下,是否直接通过单个怪物标头直接将它们包括在内。

仍然,只有在许多翻译单元中使用它,才能创建怪物标头。如果仅包含在一个翻译单元中,则没有明确的优势,而包括所有标题。

另一个潜在的怪物标头的优势是,鉴于您已经在构建系统中某处已有野牛语法文件列表,因此您可以在构建时间生成它。但这是一个很小的便利性,因为添加新的语法文件在添加使用代码之前没有用。