是否可以使用checkcode
或matlab.internal.codeanalyzer
来解析一串代码,例如:
for i=1:100 a*b(i); end
首先将其放入文件中,然后在该文件上调用checkcode
或内部parser.parse
。我想检查成千上万的代码字符串,但不要在每次检查之前将它们放在文件中。理想情况下,我希望能够解析包含代码的字符串并对其进行解析。
为了更清楚,还有其他功能可能有用,我实际上想要解析一个字符串并计算语法错误的数量,并找到它们的位置等。
答案 0 :(得分:1)
似乎mlintmex
有一个-text
选项,可用于传递字符串。它需要一个字符串和一个文件名,但是,它似乎甚至不使用文件名,所以不知道为什么。此外,我无法弄清楚为什么,但是当使用-text
时,需要至少有一个可解析的命令。因此,而不是调用
fid = fopen('tmp.m','wt');
fprintf(fid, '-mean[1:10)');
fclose(fid);
info = checkcode('tmp.m', '-fullpath');
可以使用性能大幅提升的以下内容:
% Get the errors with text mode
info = checkcode(['1;','-mean[1:10)'], 'tmp.m', '-fullpath', '-text');
% Reduce the columns to take in to account the '1;' in the checkcode call above.
for i=1:numel(info)
info(i).column = info(i).column - 2;
end
在循环中使用tic
和toc
1000次,文件版本约为9秒,-text
版本约为3-4秒。