我正在使用Matlab的解析器,使用Matlab中央文件交换中的一大堆代码作为测试数据.在筛选其中的一些时,我发现我合法下载的一些代码不应该解析(即Matlab本身不会接受它).
有没有一种简单的方法来检查m文件(函数或脚本)是否包含语法错误 - 可能是某些库函数?我不打算运行代码,只是看它是否应该解析.
如果您愿意使用未记录的函数,请考虑以下事项:
function isValid = checkValidMFile(file_name)
% make sure file can be found
fname = which(file_name);
assert(~isempty(fname) && exist(fname,'file')~=0, 'file not found');
% parse M-file and validate
t = mtree(fname, '-file');
if count(t) == 0 || (count(t)==1 && iskind(t,'ERR'))
isValid = false;
else
isValid = true;
end
end
Run Code Online (Sandbox Code Playgroud)
(您也可以传递一串MATLAB语言代码而不是保存的文件名).
当然mtree
会提供更多信息,它实际上可以返回解析树,以及任何警告或错误.我以前用它来区分脚本与函数,并从M文件中删除所有注释.
遗憾的是,它没有得到官方支持,所以你必须浏览它的源代码来弄清楚一切意味着什么(谢天谢地评论很好).该功能使用内部mtreemex
MEX功能.
其他(无证)方式:
builtin('_mcheck', 'some_file.m')
Run Code Online (Sandbox Code Playgroud)
和
checkSyntacticWarnings('./path/to/folder/')
Run Code Online (Sandbox Code Playgroud)