c++ - 解析时即时收集类定义

标签 c++ parsing compiler-construction compilation bison

目前,我正在做一个简单的编译器项目。

假设有以下语法:

file_input : file_item*
;

file_item : class_def
          | variable_decl
;

class_def : 'class' NAME scope
;

variable_decl : 'dim' NAME 'as' NAME
;

现在,在构建我们的 symbol table 时如果我们在类定义之前声明一个变量,我们将得到语义错误,因为它不会在 symbol table 中找到所需的类。

简单地说,我们需要让编译器等到类名被定义,所以声明一个类型为foo的变量。并定义类 foo以后不会打扰编译器。

关于如何实现这一点有什么建议吗?

感谢您的宝贵时间。

最佳答案

你需要一个多遍方法:

首先遍历 AST 一次,以构建将类名映射到类定义的表,而无需执行任何其他需要在表上执行查找的操作。然后再走一遍,在表已经建好的情况下,当遇到变量定义时,你将能够循环你想要的任何类。

关于c++ - 解析时即时收集类定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27672505/

相关文章:

c++ - openCV 动物(小鼠)识别

c++ - boost::spirit 与非标准(非字符串)输入流

在fortran中解析输入文件

与 Windows 95 兼容的 C++ 程序

c - Cygwin 中的段错误和默认变量初始化

c++ - 显式特化不能是友元声明

c++ - 在 C++ 的进程中查找加载的 DLL 的内存地址

c++ - 一行 std::vector ctor 映射另一个 vector ?

JavaScript 日期时间解析

java - 可以推荐哪些 Java 原生编译器?