获取语​​法列表

时间:2015-09-12 04:00:25

标签: compiler-construction ocaml yacc ocamlyacc

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

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

我的class_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感到厌烦。

1 个答案:

答案 0 :(得分:1)

处理这类问题的一种简洁方法是从输入中创建一个抽象语法树。然后你可以随意应用语义检查。

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