matlab - 如何判断 Matlab 代码在语法上是否有效?

标签 matlab parsing

我正在为 Matlab 开发一个解析器,使用来自 Matlab Central File Exchange 的一大堆代码作为测试数据。在筛选其中一些代码时,我发现我合法下载的一些代码不应该解析(即 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

(您也可以向它传递一串 MATLAB 语言代码,而不是保存的文件名)。

当然 mtree 会提供更多信息,它实际上可以返回解析树,以及任何警告或错误。我以前用它来 differentiate between scripts vs. functions , 和 strip all comments来自 M 文件。

不幸的是,它没有得到官方支持,所以你必须浏览它的源代码来弄清楚它的含义(谢天谢地,它有很好的注释)。该函数使用内部 mtreemex MEX 函数。


其他(未记录的)方式:

builtin('_mcheck', 'some_file.m')

checkSyntacticWarnings('./path/to/folder/')

关于matlab - 如何判断 Matlab 代码在语法上是否有效?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20669286/

相关文章:

image - 如何将图像黑白转换为白色,反之亦然

matlab - 从matlab中的单元格数组中删除包含零的行

c - simulink 编码器 c 文件到 simulink 模型

python - 在 python 中使用 ElementTree 进行 XML 解析时检查子级是否存在

c# - 将时间值的字符串表示形式解析为 TimeSpan

c++ - MEX 中 Matlab 和 C++ 之间的内存共享

matlab - 为我的图形创建一个圆形 mask

c# - 特定格式 C# 的日期时间值解析

django - 解析来自标签 django 的字符串

html - 从 JSON 对象中的非结构化字符串中提取 html 标签和数据