首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ClaiR/Rascal:列出公共职能的最佳方式?

ClaiR/Rascal:列出公共职能的最佳方式?
EN

Stack Overflow用户
提问于 2019-08-24 10:28:29
回答 3查看 140关注 0票数 0

我正在使用C++解析一个ClaiR头文件,并希望得到一个公共函数的列表。

代码语言:javascript
复制
visit(ast) {
    case \class(_, name(n), _, decs): {
        println("class name: <n>");
        isPublic = true;
        for (dec <- decs) {
            switch(dec) {
                case \visibilityLabel(\public()): {
                    println("Public functions");
                    isPublic = true;
                }
                case \visibilityLabel(\protected()): {
                    println("Protected functions");
                    isPublic = false;
                }
                case \visibilityLabel(\private()): {
                    println("Private functions");
                    isPublic = false;
                }
                case \simpleDeclaration(_, [\functionDeclarator([*_], [*_], name(na), [*_], [*_])]): {
                    if (isPublic) {
                        println("public function: <na>");
                    }
                }
            }
        }
    }
}

以上代码起作用。但是,是否有更好(更小)的方式获得公共职能?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-08-26 10:48:57

有一个M3 modifiers关系,它可能包含您要查找的信息:

然而,这种关系当然必须被提取出来。也许还需要添加到ClaiR中吗?

票数 1
EN

Stack Overflow用户

发布于 2019-09-03 08:57:40

在C++中,公共/受保护/私有访问修饰符不是声明上的正确“修饰符”;相反,在访问修饰符之后的所有成员声明(直到下一个访问修饰符为止)都具有声明的可见性(在您的示例中,第二个public:也使myFunc4公开)。但是,实现AST遍历以获取成员的可视信息并将其添加到新的M3表将非常简单。您对public void myFunc5();的建议是无效的语法。

decl中的ProblemType表示myFunc方法的第一个参数是未解析的(可能是由于缺少导入)。但是,类型信息中此toStringProblemType不应该存在,这是一个bug。

票数 3
EN

Stack Overflow用户

发布于 2019-08-27 08:12:02

我有一些代码,如下所示:MyClass { public: void myFunc1(); private: void myFunc2(); public: void myFunc3(); void myFunc4();

M3.修饰符不提供公共/私有信息。我想(还没试过),它会对public void myFunc5();有效的

我也看到一些奇怪的错误。|cpp+method:///MyClass/myFunc(org.eclipse.cdt.internal.core.dom.parser.ProblemType@38270bb,unsigned.int,unsigned.int)|,virtual(),这是否是它无法解析的类型(包括未提供给解析器)?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57637112

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档