1. A method of re-architecting a legacy software system comprising: receiving, by a processor, source code of the legacy software system, wherein the legacy software system has a monolithic architecture, and wherein the source code has a plurality of pattern instances associated with a plurality of patterns, wherein the plurality of patterns comprise at least two of service patterns, validation patterns, computation patterns, data entities patterns, data definition patterns, data access patterns, user interface patterns, or user messages patterns; inputting the plurality of patterns into a workbench to generate a plurality of pattern matchers, wherein the workbench uses a specification language describing the plurality of patterns to generate the plurality of pattern matchers, wherein the plurality of pattern matchers correspond to the plurality of patterns; identifying the plurality of pattern instances in the source code using the pattern matchers, wherein the plurality of pattern instances are identified using structural properties, static data-flow analysis, control-flow analysis of the source code or a combination thereof; identifying code portions corresponding to the plurality of pattern instances; transforming the legacy software system using an object oriented language based upon a) the plurality of pattern instances, and b) the code portions corresponding to the plurality of pattern instances for re-architecting the legacy software system.