Как MATLAB определяет правильность выражения / проверяет, сбалансированы ли скобки? - PullRequest
0 голосов
/ 20 февраля 2019

Если вы попытаетесь запустить код, в котором отсутствует скобка ((, ), [, ], { или }), скрипт или функция выдает ошибку:

Ошибка: файл: XXX.m Строка: 1337 Столбец: 42

Неверное выражение.При вызове функции или индексации переменной используйте скобки.В противном случае проверьте наличие несовпадающих разделителей.

Кажется, это нужно сделать перед выполнением.Мой редактор установлен на «Приостановить ошибки», но, в отличие от других ошибок (например, ссылки на несуществующую переменную), он не «перепрыгивает» на строку с ошибкой.

Это заставило меня задуматься.Сначала я подумал, что MATLAB может подсчитать все типы скобок и проверить, есть ли столько открывающих, сколько есть закрывающих для определенного типа.Однако, похоже, что это не так:

  • Ошибка определяет правильную строку и столбец.Процедура, описанная выше, не сможет этого сделать - поскольку она смотрит на круглые скобки на уровне файлов , а не в виде пар.

  • Это будет включать скобкииспользуется в строках, которые, конечно, могут быть разбалансированными.

Мой вопрос: Как MATLAB проверяет, сбалансированы ли скобки или, в более общем смысле, какMATLAB определяет правильность выражения ?

1 Ответ

0 голосов
/ 20 февраля 2019

MATLAB в основном запускает checkcode на лету, генерируя эти красные шевеления при вводе и даже те ошибки, когда вы пытаетесь запустить код с несбалансированными скобками и / или квадратными / фигурными скобками.Вы можете увидеть, что делает checkcode(), просто набрав edit checkcode в своем командном окне.Я не буду вставлять его код здесь, поскольку он, вероятно, проприетарный, но файл справки гласит:

Чтобы заставить Code Analyzer игнорировать строку кода, используйте %#ok в конце строки,Этот тег может сопровождаться комментариями.Например:

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

, поэтому его анализатор кода (sic) выполняет проверки.Вероятно, он выполняет несколько проверок, похожих на регулярные выражения в каждой строке.

Для более подробного ответа следует связаться напрямую с MathWorks, так как остальное в основном с закрытым исходным кодом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...