我正在尝试构建一个编译器,此刻我很丢失。我有一个主类,并希望能够声明具有继承的其他类,即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感到厌烦。
答案 0 :(得分:1)
处理这类问题的一种简洁方法是从输入中创建一个抽象语法树。然后你可以随意应用语义检查。
如果您想在解析过程中进行所有检查,您必须仔细定义您的语法以允许它,并传递定义您目前所见的数据结构。