在编译器中使用singleton
Use of singletons in compiler
我正在为类似C++的语言编写编译器。我必须用只有静态数据和方法的类来处理代码中表示的符号表。
就像:
class GlobalTable
{
/* static members */
static map<int, Symbol*> symbol_by_id;
static map<Symbol*, int> id_by_symbol;
/* some static methods */
};
还有一个表示配置的类:
class GlobalConfig
{
static const int int_size;
/* and so on ... */
};
我需要从很多地方访问这些。传递它将导致代码膨胀。这样使用我的课方便吗,或者有更好的方法来组织一切?
在编译器中,通常将符号类型存储在符号表中,用于符号的某些定义。通常,每个作用域都有一个符号表,因此每个模块或可编译单元中的全局作用域都具有自己的符号表。
您还将拥有以符号和符号子类型为成员的AST节点。
大多数内部编译器api处理符号和ast子类型,这些子类型存储在索引的快速访问数据结构中。所有这些都必须对大多数编译器函数可用,因此您可以使用全局编译器或上下文变量,或者将其作为参数传递。
严格来说,没有必要使用singleton。我只能在示例中讨论,所以我的方法是使用Compiler类,该类具有currentScope和globalScope等实例成员,以及根AST或currentCompilableUnit,所以解析器main实例化了Compiler,所有内容都是可重入的。不过,如果编译器实例是全局变量,那么它会更方便一些,因此函数可以省略编译器参数,但除此之外,实际上不需要任何其他参数。
简言之,大多数API通常在其许多签名中包含"scope"或"compiler"结构或类。但是,如果使用OOP对编译器建模,则该类的任何方法都具有隐式的"this"访问权限。
相关文章:
- C/C++编译器通常会删除重复的库吗
- 模板-模板参数推导:三个不同的编译器三种不同的行为
- Win32编译器选项和内存分配
- MSVC多行宏编译器错误
- 静态数据成员的问题-修复链接错误会导致编译器错误
- C++ Singleton - Prevent ::instance() to variable
- C++,我收到一个无法理解的编译器错误
- 在线编译器中的分段C++没有打印消息
- 如何解决gcc编译器优化导致的centos双编译器设置中的分段错误
- C/C++预处理器是否可以检测一些编译器选项
- 是否有C++编译器选项允许激进地删除所有函数调用,并将参数传递给具有空体的函数
- C++错误C2600:无法定义编译器生成的特殊成员函数(必须首先在类中声明)
- 我需要知道编译器如何在cpp中使用析构函数
- 编译器如何区分std::vector的构造函数
- CLANG 编译器 说:变量"PTR"可能未初始化
- 告诉c++编译器该参数没有别名
- 使用仅使用一次的变量调用的复制构造函数.这可能是通过调用move构造函数进行编译器优化的情况吗
- Qt5:如何消除这个Singleton的编译器警告
- 在编译器中使用singleton
- VC++通用Singleton实现编译器错误