matlab代码分析器,我可以制作自定义的matlab代码分析器警告吗?

我不相信有一种方法可以为

MATLAB Code Analyzer添加新的代码模式来寻找.您所能做的就是设置显示或抑制哪些现有警告.

我不确定可能有哪些第三方工具进行代码分析,而自己创建一个通用分析器会非常令人生畏.但是,如果您想在代码中尝试突出显示一些非常具体,定义明确的模式,则可以尝试使用regular expressions解析它(提示可怕的音乐和尖叫).

这通常很困难,但可行.作为一个例子,我写了这段代码,寻找你上面提到的模式.在做这样的事情时经常需要管理的事情之一是考虑一组括号括起来,我通过首先删除一些非有趣的括号及其内容来处理:

function check_code(filePath)

% Read lines from the file:

fid = fopen(filePath, 'r');

codeLines = textscan(fid, '%s', 'Delimiter', '\n');

fclose(fid);

codeLines = codeLines{1};

% Remove sets of parentheses that do not encapsulate a logical statement:

tempCode = codeLines;

modCode = regexprep(tempCode, '\([^\(\)<>=~\|\&]*\)', '');

while ~isequal(modCode, tempCode)

tempCode = modCode;

modCode = regexprep(tempCode, '\([^\(\)<>=~\|\&]*\)', '');

end

% Match patterns using regexp:

matchIndex = regexp(modCode, 'numel\([^\(\)]+[<>=~\|\&]+[^\(\)]+\)');

% Format return information:

nMatches = cellfun(@numel, matchIndex);

index = find(nMatches);

lineNumbers = repelem(index, nMatches(index));

fprintf('Line %d: Potential incorrect use of NUMEL in logical statement.\n', ...

lineNumbers);

end

% Test cases:

% if numel(list < x)

% if numel(list) < x

% if numel(list(:,1)) < x

% if numel(list(:,1) < x)

% if (numel(list(:,1)) < x)

% if numel(list < x) & numel(list < y)

% if (numel(list) < x) & (numel(list) < y)

请注意,我在文件底部的注释中添加了一些测试用例.当我自己运行这段代码时,我得到了这个:

>> check_code('check_code.m')

Line 28: Potential incorrect use of NUMEL in logical statement.

Line 31: Potential incorrect use of NUMEL in logical statement.

Line 33: Potential incorrect use of NUMEL in logical statement.

Line 33: Potential incorrect use of NUMEL in logical statement.

请注意,列出了与您的错误代码匹配的第一,第四和第六个测试用例的消息(第六个测试用例的两次,因为该行有两个错误).

这适用于所有可能的情况吗?我不会假设.您可能必须增加正则表达式模式的复杂性以处理其他情况.但至少这可以作为解析代码时必须考虑的事情的一个例子.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值