将代码检查为字符串而不是解析文件

时间:2018-02-27 14:46:53

标签: matlab

是否可以使用checkcodematlab.internal.codeanalyzer来解析一串代码,例如:

for i=1:100 a*b(i); end

首先将其放入文件中,然后在该文件上调用checkcode或内部parser.parse。我想检查成千上万的代码字符串,但不要在每次检查之前将它们放在文件中。理想情况下,我希望能够解析包含代码的字符串并对其进行解析。

为了更清楚,还有其他功能可能有用,我实际上想要解析一个字符串并计算语法错误的数量,并找到它们的位置等。

1 个答案:

答案 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

在循环中使用tictoc 1000次,文件版本约为9秒,-text版本约为3-4秒。