使用Clair与Rascal的parseCpp解析C++文件报错,求解决
问题:调用Clair的
parseCpp解析C++文件时报NoSuchMethodError 我尝试使用Clair和Rascal分析C文件,已按照Clair的GitHub页面说明将其添加到空Rascal项目,成功导入所需模块后,调用parseCpp解析C文件时出现如下错误:
rascal>parseCpp(|project://myproject3/myFile.cpp|); |jar+file:///Users/rh07/.m2/repository/org/rascalmpl/clair/0.4.0/clair-0.4.0.jar!/src/lang/cpp/AST.rsc|(24317,206,<455,0>,<456,167>): Java("NoSuchMethodError","'io.usethesource.vallang.IString org.rascalmpl.library.Prelude.readFile(io.usethesource.vallang.ISourceLocation)'"), at lang.cpp.internal.CDTParser.parseFileAsCpp(|unknown:///CDTParser.java|(0,0,<202,0>,<202,0>)) at lang.cpp.internal.Parser.parseCpp(|unknown:///Parser.java|(0,0,<349,0>,<349,0>)) at jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(|unknown:///NativeMethodAccessorImpl.java|(0,0,<0,0>,<0,0>)) at parseCpp(|jar+file:///Users/rh07/.m2/repository/org/rascalmpl/clair/0.4.0/clair-0.4.0.jar!/src/lang/cpp/AST.rsc|(24516,5,<456,160>,<456,165>)Beginning at 2022-11-25T11:35:54.827391Z WARNING: ResourcesPlugin was null, can't get workspace; not overriding include files
请问如何让parseCpp正常工作?
解决方案
对齐Clair与Rascal核心库版本
你使用的Clair 0.4.0版本和当前Rascal环境的核心库不兼容,NoSuchMethodError是因为依赖的方法签名不匹配。查看Clair的发布说明,找到对应兼容的Rascal SDK版本,在项目依赖配置(如pom.xml)中统一两者的版本号。更新Clair至最新稳定版
若当前Clair版本过旧,替换为最新稳定版本,重新下载依赖并清理Maven缓存后重构项目,确保依赖库版本同步。验证Prelude方法签名
确认org.rascalmpl.library.Prelude中是否存在readFile(io.usethesource.vallang.ISourceLocation)方法。若方法签名已变更,需使用与Clair版本匹配的Prelude库。解决工作区依赖警告
错误中的ResourcesPlugin was null警告提示无法获取工作区,可能影响头文件解析。建议在Eclipse环境中运行项目(Clair依赖Eclipse CDT组件),确保项目已导入Eclipse工作区;或手动指定头文件路径,规避工作区依赖问题。
内容的提问来源于stack exchange,提问作者RH07
相关产品推荐
相关产品推荐

