Compiler construction 获取语法列表

Compiler construction 获取语法列表,compiler-construction,ocaml,yacc,ocamlyacc,Compiler Construction,Ocaml,Yacc,Ocamlyacc,我正在尝试构建一个编译器,现在我完全不知所措。我有一个主类,希望能够通过继承声明其他类,即classnewclass扩展在{}我的输入看起来像 input: class_main class_list { /* New program created */ } 我的class\u列表包含我程序中的所有类,它也可以为空 一个简单的类声明如下: class_decl: CLASS_KWORD CLASS_ID OPENCURLYBRACE

我正在尝试构建一个编译器,现在我完全不知所措。我有一个主类,希望能够通过继承声明其他类,即
classnewclass扩展在{}
我的输入看起来像

input:    
    class_main class_list { /* New program created */ }
我的
class\u列表
包含我程序中的所有类,它也可以为空

一个简单的类声明如下:

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\u ID
之前是否已经声明或使用过?我的想法是,我的
class\u列表
无法从我尝试添加新类的地方进行响应,但我在OCaml方面做得很差。

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

如果您想在解析过程中执行所有检查,那么必须仔细定义语法以允许它,并传递定义到目前为止看到的内容的数据结构