class - ClaiR/Rascal:列出公共功能的最佳方式?
问题描述
我正在使用 ClaiR 解析 C++ 头文件,并想要获取公共函数的列表。
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>");
}
}
}
}
}
}
上面的代码有效。但是有没有更好(更小)的方式来获取公共功能?
解决方案
在 C++ 中,public/protected/private 访问修饰符不是声明的正确“修饰符”;相反,访问修饰符之后的所有成员声明(直到可能的下一个访问修饰符)都具有声明的可见性(在您的示例中,第二个public:
也myFunc4
公开)。不过,实现 AST 遍历以获取成员的可见性信息并将其添加到新的 M3 表中是很简单的。您的建议public void myFunc5();
是无效的语法。
ProblemType
decl 中的 表示该方法的第一个参数未myFunc
解析(可能是由于缺少导入)。但是,类型信息toString
中的 thisProblemType
不应该存在,这是一个错误。
推荐阅读
- amazon-web-services - 使用 AWS Javascript 开发工具包启动到 S3 的分段上传
- jquery - Laravel - 如何在更改时使用下拉列表显示员工全名
- vue.js - 如何在 Vuejs 中加载 Pixi 实例?
- python - 如何查找具有未在 xml 标头中列出的名称空间的属性的所有元素
- ios - 无法快速获取视图控制器的索引,它是 UInavigationController 的视图控制器
- javascript - 在android中使用chrome的移动设备中,当我向下滚动模式并且地址栏消失时,底部出现空白
- javascript - 猫鼬替换数组
- regex - Powershell匹配两个字符串之间的多行字符
- google-chrome - 您如何使 Chrome 在地址栏中显示或隐藏 www?
- javascript - Javascript Null 和 Empty 检查