Я хочу определить, сколько параметров (верхнего уровня) имеет функция, учитывая представление String функции. В качестве примера:Java определяет количество функциональных параметров только на основе строки функций
(1) assertEquals(verify, actual);
(2) assertEquals("message", actual, verify);
(3) assertEquals(account.addMoney(19, Delivery.fast()).toString(), bank.getAccount(person.getCredentials("basic")).tally(), mock.getData().verify());
Ответы должны быть (1) = 2, (2) = 3, (3) = 3. Можно считать, у меня есть имя функции, например, regex on assert.
В принципе, я могу считать запятыми, но мне нужно учитывать параметры функции для вызовов внутренних функций. Таким образом,
function(param1, param2.data(param3, param4, param5.getData(param6, param7));
Конечно, гнездо может быть произвольным.
Я думаю, что регулярное выражение может сделать трюк, но моего опыта с ними недостаточно, чтобы решить этот вопрос.
Обратите внимание, что я рассмотрел использование рычага/синтаксического анализатора, но это кажется немного излишним для моих намерений. У меня есть набор функций в виде строк, а мои вызовы метода-метода - это методы утверждения.
регулярных выражений Java не поддерживает рекурсию. –
Вы знаете, если вы действительно собираетесь иметь дело с ** настоящим ** исходным кодом ... рассмотрите использование ** парсера **. Или что происходит, когда люди начинают создавать экземпляры массива или анонимные внутренние классы в качестве аргументов? – GhostCat
Возможно, http://stackoverflow.com/questions/2842809/lexers-vs-parsers могут быть полезны. –