Да, это намного сложнее.
Во-первых, вам нужно признать, что ваше регулярное выражение упрощает проблему.Посмотрите на фрагмент ниже:
class test {
/* class is important */
class smurf {
}
}
class test3 {
}
Ваше выражение действительно найдет все классы.Но он не заметит отношения вложенности между test
и smurf
.Хуже того, он также найдет классы, которые не существуют, например, ложные срабатывания в комментариях.Наконец, ваше регулярное выражение не дает вам никаких наследственных отношений.
Теперь представьте, что вы можете определить большое выражение регулярного выражения для определения определений членов: как бы вы тогда делали разницу между членами test
и членами smurf
?Таким образом, ваша логика синтаксического анализа должна была бы отслеживать, в каком классе вы что анализируете.
Очень быстро у вас возникнут проблемы с синтаксическим анализом параметров метода и общих параметров, поскольку вам потребуется добавить в свой словарь синтаксического анализа новые типы, которые были определены где-то еще.
Итак, в конце концов, для решения вашей проблемы вам понадобится настоящий анализатор языка Java , такой же сложный, как и ваш компилятор.Или вы можете использовать существующих инструментов вместо того, чтобы изобретать свои собственные.