获取语​​法列表

Get list in grammar

我正在尝试构建一个编译器,但此刻我很迷茫。我有一个主要的 class 并且希望能够通过继承声明额外的 classes,即 class newClass extends classThatHasBeenDeclaredBefore { } 我的输入看起来像

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

而我的class_list由我程序中所有的class组成,它也可以是空的。

一个简单的class声明如下:

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 从我尝试添加新 class 的地方无法访问,但我在 OCaml 上很烂。

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

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