【问题标题】:How does MATLAB determine validity of expression / check whether parentheses are balanced?MATLAB如何确定表达式的有效性/检查括号是否平衡?
【发布时间】:2019-07-14 08:54:44
【问题描述】:

如果您尝试运行缺少括号的代码(()[]{}),脚本或函数会抛出错误:

错误:文件:XXX.m 行:1337 列:42

无效的表达式。调用函数或索引变量时,请使用括号。否则,检查不匹配的分隔符。

它似乎在执行之前执行此操作。我将编辑器设置为“出错时暂停”,但与其他错误相反(例如引用不存在的变量),它不会“跳转”到出现错误的行。

这让我很疑惑。起初我以为,MATLAB 可能会计算所有类型的括号,并检查是否有与特定类型的闭括号一样多的开括号。然而,情况似乎并非如此:

  • 错误标识了正确的行和列。上述过程无法做到这一点 - 因为它在文件级别查看括号,而不是成对的。

  • 这将包括字符串中使用的括号,这当然可以是不平衡的。

我的问题:MATLAB 如何检查括号是否平衡,或者更一般地说,MATLAB 如何确定表达式的有效性

【问题讨论】:

  • 除非由编写 MATLAB 应用程序的人提供,否则任何答案都可能是纯粹的猜测,因此这个问题“主要基于意见”是题外话。您可以看到,在您编写代码时,MATLAB 编辑器会在括号问题下划线,它清楚地知道它们发生在哪里,而无需编译。
  • MATLAB 在开始执行之前解析代码。这意味着所有的语法都必须是正确的,而不仅仅是有正确数量的括号。你应该阅读解析。这是一个非常有趣的话题,有很多东西要学。

标签: matlab validation


【解决方案1】:

MATLAB 基本上是在运行中运行checkcode,当您键入时会产生那些红色的摆动,并且当您尝试运行带有不平衡括号和/或方/大括号的代码时确实会产生这些错误。您只需在命令窗口中输入edit checkcode 即可查看checkcode() 的作用。我不会在这里粘贴它的代码,因为它可能是专有的,但是帮助文件说:

要强制代码分析器忽略一行代码,请在末尾使用%#ok 线。这个标签后面可以跟 cmets。例如:

unsuppressed1 = 10   % This line will get caught
suppressed2 = 20     %#ok  These next two lines will not get caught
suppressed3 = 30     %#ok

所以它的代码分析器(原文如此)会进行检查。可能它每行运行一些类似正则表达式的检查。

如需更详细的答案,请直接联系 The MathWorks,因为其余部分大多是封闭源代码。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-11-01
    • 2022-08-13
    • 2020-10-14
    • 2015-05-21
    • 1970-01-01
    • 1970-01-01
    • 2016-08-14
    • 1970-01-01
    相关资源
    最近更新 更多