Flex / Bison多遍类解析

| 我正在为玩具OO语言编写编译器。我正在使用Flex和Bison用C编写它。 考虑以下语法:
class MyClass {
    int m_n;

    void MyFunc(int b) {
        m_n = 5;
        m_p = b;
    }   

    int m_p;
}
我当前的代码将抱怨在MyFunc中,尚未声明m_p(有充分的理由)。因此,我得出的结论是,我需要一种多遍解析技术-类似于以下内容: 第一遍-过程变量声明 第二次通过-流程功能定义 首先-这是解决问题的最佳方法吗?我还应该考虑其他方法吗?第二-如果这是一个有利的解决方案,我是否可以使用可重入的词法分析器/解析器来实现它? 谢谢     
已邀请:
我最近为面向对象语言编写了一个编译器,我们经过了多次(当然取决于语言的复杂性): 收集所有课程 建立超类层次结构 收集所有方法和字段 在方法等内部收集变量 我们必须将整个过程分为4个阶段,这是有原因的: 当尚未处理完所有类时,您将无法建立超类层次结构(导致2。通过) 当超类未知(导致2.通过)时,您无法验证继承的方法(返回值,参数等)。 当尚未收集所有字段时,您将无法处理变量(导致4.通过) 如果您的语言没有继承权,则可以省去第二遍。 我现在看一下,应该可以合并通道2和3,因为所有数据都可以用于通道3。 我们实现它的方法只是遍历AST并用所需的符号表对其进行注释。     

要回复问题请先登录注册