Как найти количество вложенных условий в Java - PullRequest
0 голосов
/ 21 октября 2011

Я должен прочитать файл Java по коду Java и определить наибольшее количество вложенных операторов if в нем.

например:

if (someCondition)
{
  if (someCondition)
     {
      // Expression
     }
}

В этом случае программа должна отобразить greatest nested if depth is 2.

Теперь проблема в том, что положение фигурной скобки после if является неопределенным.

например, это может быть как:

Curly brace start and end comes in same line
if (someCondition){}

OR
Curly brace start in next line
if (someCondition)
{
}

OR
Conditions without curly brace
if (someCondition)
   if (someCondition) // Single line without curly brace

Кто-нибудь может подсказать, каким будет лучший способ получить требуемое количество вложений?

Ответы [ 3 ]

1 голос
/ 21 октября 2011

Как уже говорилось в ответе, вы должны полагаться на AST, а не просматривать код вручную для этого.AST никогда не ошибется, ваши собственные навыки чтения чаще всего будут.

Я не знаю полного решения сейчас, но предлагаю вам потратить некоторое время на изучение существующих инструментов для вычисления метрик программного обеспечения.Глубина вложения является типичной метрикой, и вокруг должны быть инструменты.

Если вы не можете ничего найти, вы можете, по крайней мере, вернуться к написанию чего-то вроде плагина Eclipse.В этом случае вы можете просто загрузить файл Java в редакторе Eclipse, и Eclipse выполнит всю тяжелую работу за вас и бесплатно предоставит вам AST.Определение глубины вложенности данного AST становится простой задачей.Разработка прототипа для этого не должна занять более нескольких часов.И его легко расширить, чтобы охватить весь ваш проект и дать ему возможность ответить на такие вопросы, как «какой java-файл в нашем проекте имеет максимальную глубину вложения и какая это глубина?».Но опять же ... кто-то еще обязательно укажет на существующий инструмент, который уже делает это и многое другое.

1 голос
/ 21 октября 2011

Вам нужно будет проанализировать Абстрактное синтаксическое дерево (AST) исходного кода Java. См. Библиотека Java для анализа кода . Получив AST, вы можете выполнить поиск, чтобы найти самый длинный путь вложенных условных выражений.

0 голосов
/ 21 октября 2011

I82Мучный ответ, конечно, доставит вас туда, но немного похоже на обман.

Немного зная о вашем проекте, я бы подумал, что простой механизм стека с записью максимального значения сделает трюк нажатием {и срабатыванием}. Как только у вас будет работать эта базовая модель, просто добавьте специальный случай управляющих операторов с однострочными телами (это верно для if, for, while ...). В этих случаях вы будете искать эти ключевые слова, а затем (и а). После того, как вы столкнулись с этой комбинацией, если сканирование встречает другой оператор управления или точку с запятой до того, как оно встречает {, то это один из тех особых случаев, и вы должны нажать (используя специальный маркер, указывающий, что вместо; }).

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