Use Mathematica to simplify a function with repeating subexpression?

I have a large function (~2800 characters) with a high degree of nesting with parenthesis (more than 32 levels). I need to get it into a more simple form so it’s parseable by other programs. I know that there are repeating subexpressions within the function that if eliminated (or “simplified” in some way) could allow the nesting level to drop low enough - but I don’t know what the subexpression are, only that they exist.

However, I’m running into some issues. I’m mainly working with the Simplify function, but it doesn’t seem to quite understand what I want. Below is an example formula for illustration (note that it doesn’t happen to contain repeating subexpressions):

y = 0.61 + 0.12x(1)cos(84.54x(2)) + 0.55gauss(2.46 - 17.36sin(sinh(x(2)))cos(2.75sin(sinh(x(2)))))/(1.39 + 0.13x(2)cos(84.54x(2)))

x(1) and x(2) are each distinct variables, which Mathematica seemed to have difficulty with at first so I replaced them with a coding that I can later reverse, as shown below:

y = 0.61 + 0.12x$a$cos(84.54x$b$) + 0.55gauss(2.46 - 17.36sin(sinh(x$b$))cos(2.75sin(sinh(x$b$))))/(1.39 + 0.13x$b$cos(84.54x$b$))

That fix seemed to work. However, the problem I’m stuck on is that Matematica doesn’t seem to understand the difference between functions and variables; i.e. running Simplify on the formula above produces the formula below, which breaks some rules (for example; cos, sin, sinh don’t seem to have inputs anymore).

y = 0.61 + 10.14cosx$a$x$b$ + (gauss(0.12 - 2.39cossin^2sinh^2x$b$^2))/ (0.13 + 1.cosx$b$^2)

Can anyone give me some advice on how to solve this?

You might look at this Common subexpression eliminator which seems close to what you are looking for.

Also might want to check these links.

http://mathematica.stackexchange.com/questions/25132/common-subexpression-from-two-expressions

http://stackoverflow.com/questions/4202845/mathematica-using-simplify-to-do-common-sub-expression-elimination-and-reductio

http://mathematica.stackexchange.com/questions/8787/find-subexpression-to-minimize-leafcount-after-replacment-with-temporary-variabl/8792#8792