1

我正在尝试构建一个编译器,目前我很迷茫。我有一个主类,并且希望能够声明具有继承的其他类,即class newClass extends classThatHasBeenDeclaredBefore { }我的输入看起来像

input:    
    class_main class_list { /* New program created */ }

并且 myclass_list包含我程序中的所有课程,它也可以为空。

一个简单的类声明如下:

class_decl:
    CLASS_KWORD CLASS_ID
        OPENCURLYBRACE 
            attributes_list
            method_list
        CLOSEDCURLYBRACE { /* Ok new class is created */}

    | CLASS_KWORD CLASS_ID EXTENDS_KWORD CLASS_ID
        OPENCURLYBRACE 
            attributes_list
            method_list
        CLOSEDCURLYBRACE { /* Has CLASS_ID Number 2 been declared before? */ }
;

有什么方法可以检查第二个CLASS_ID是否已经以某种方式被声明或使用过?我的想法是,我class_list无法从我尝试添加新课程的地方到达,但我在 OCaml 上很烂。

4

1 回答 1

1

处理此类问题的一种简洁方法是从输入中创建抽象语法树。然后,您可以在闲暇时对其应用语义检查。

如果您想在解析期间进行所有检查,则必须仔细定义语法以允许它,并传递定义您到目前为止所看到的数据结构的数据结构。

于 2015-09-12T04:15:23.007 回答